Pythonでフーリエ級数展開をしたいと考えています
Python
1# -*- coding: utf-8 -*- 2from pylab import * 3from scipy.integrate import quad 4 5x_min = -pi - 0.5 6x_max = pi*2 + 0.5 7y_min = -0.25 8y_max = 1.25 9axis([x_min, x_max, y_min, y_max]) 10xs = linspace(x_min, x_max, 256) 11 12n_max = 5 13 14def fun(x): 15 x = (x + pi) % (pi * 2) - pi 16 f = abs(x) 17 18 return f 19 """ 20 if x >= 0: 21 return 1 22 else: 23 return 0 24 """ 25 26def fourier(fun, n_max): 27 a = [] 28 b = [] 29 res, err = quad(lambda x:fun(x), -pi, pi) 30 a += [res/pi] 31 b += [0.0] 32 for n in range(1, 1+n_max): 33 res, err = quad(lambda x:fun(x)*cos(n*x), -pi, pi) 34 a+=[res/pi] 35 for n in range(1, 1+n_max): 36 res, err = quad(lambda x:fun(x)*sin(n*x), pi, pi) 37 b+=[res/pi] 38 39 return a, b 40 41a, b = fourier(fun, n_max) 42 43def fourier_function(x,a,b): 44 f = 0.5 * a[0] 45 for n in range(1, len(a)): 46 f += a[n]*cos(n*x) + b[n]*sin(n*x) 47 return f 48 49f_fn = amap(lambda x:fourier_function(x,a,b),xs) 50 51 52#plot(xs, amap(f, xs), 'b:', lw=1) 53plot(xs, f_fn, 'r-', lw=1) 54show()
a, bをちゃんと求めるようにして実行できるように組んでみたのですが、やはりうまくいきません。
何度も申し訳ないのですがアドバイスいただけたらありがたいです。
よろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。