前回と似たような質問ですいません。
元の関数とフ―リエ級数展開した式の近似誤差をグラフに出力したいです。
数式の間違いがあり、それを正したところ、また間違ったグラフが出力されるようになってしまいました。
以前、回答をして下さった方のプログラムを少し変更しました。
def func_f(t)のところは特に間違いはないと思います。
間違いがあるとすると、def func_g(t,k)の部分と思います。フ―リエ級数展開した式は確認して確実にあっています。(return (-1)(1.0-np.power(-1,k))(np.sin(knp.pit)/(k*np.pi)))
for文のインデントなど色々試しましたが、どれもうまくいきません。
~追記~
func_g(t,k)のところを少し変えました。
グラフの形は理想に近付きましたが、まだ少し違います。
python
1# -*- coding: utf-8 -*- 2import numpy as np 3import matplotlib.pyplot as plt 4 5# 変換元関数 6def func_f(t): 7 def func_f_element(t): 8 if -np.pi <= t < 0: 9 return 1 # func_f(t) = t 10 if 0 <= t < np.pi: 11 return 0 12 f = np.vectorize(func_f_element) 13 return f(t) 14 15# 変換先関数 K項まで展開 16def func_g(t, k): 17 return (-1)*(1.0-np.power(-1,k))*(np.sin(k*np.pi*t)/(k*np.pi)) 18 s = (1.0/2.0) 19 for k in range(1,K): 20 s = s + func_g(t,k+1) 21 return s 22 23 24def diff(K): 25 dt = 0.01 26 start = -1.0*np.pi 27 end = 1.0*np.pi 28 t = np.arange(start, end, dt) 29 return np.linalg.norm(func_f(t)-func_g(t, K), ord=2) 30 31# maxK = np.arange(-np.pi, np.pi, 0.01).size 32maxK = 100 33K = np.arange(1,maxK, 1) 34r = [] 35for k in range(1,maxK): 36 r.append( diff(k) ) 37 38fig=plt.figure(0) 39plt.plot (K, r, linewidth=1.0, color="r",linestyle="solid",label="$ f(t)=1 or 0 $") 40plt.xlabel("$K$-th approximation", fontsize=14, color="black") 41plt.ylabel("error", fontsize=14) 42plt.grid() 43plt.legend() 44plt.show() 45fig.savefig('fig323.pdf') 46 47
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。