ethan23
ethan23

Reputation: 33

My code is not plotting a square wave(python) using a Fourier series

x=1
n=1
series1=0
z=[]
t= arange(-2,2,.1)
for i in t: 
    series1=series1 + ((2/n/pi)*(sin(n*x)))
    x+=1
    z.append(series1)

my_list=z
newlist = [x+.5 for x in my_list]


plot(newlist,t)
xlabel('x-range')
ylabel('A(X)')
title('square wave')

The image represents the function I am trying to graph:

My plot graph, which does not look like a square wave:

Upvotes: 0

Views: 2086

Answers (1)

mitoRibo
mitoRibo

Reputation: 4548

EDIT:

More pythonic version:

import matplotlib.pyplot as plt
import numpy as np

N_max = 101 #the larger the value the steeper the transition from 0 to 1 and the more "square"
n_odds = np.arange(1,N_max,2)
xs = np.arange(-6,6,0.1)
ys = [0.5+sum(np.multiply(2/(n_odds*np.pi), np.sin(n_odds*x))) for x in xs]

plt.plot(xs, ys)
plt.show()

Here is a version that worked for me. Your biggest mistake was not cycling through odd N's. Leave a comment if you have questions about the code.

import matplotlib.pyplot as plt
import numpy as np

N_max = 101
n_odds = np.arange(1,N_max,2)
xs = np.arange(-6,6,0.1)
ys = []
for x in xs:
    sum_terms = []
    for n_odd in n_odds:
        frac_term = 2/(n_odd*np.pi)
        sin_term = np.sin(n_odd*x)
        sum_term = frac_term*sin_term
        sum_terms.append(sum_term)

    y = 0.5+sum(sum_terms)
    ys.append(y)

plt.plot(xs, ys)
plt.show()

enter image description here

Upvotes: 1

Related Questions