ユークリッド距離を使って、フ―リエ展開した関数と元の関数の近似誤差をグラフに表したいです。
成功したプログラム(fse103.py)はうまく出力されます。ただ、関数を変えたfb104.pyはグラフがおかしいです。本来なら、fse103.pyのようにグラフは0に近付いていくはずです。
どなたかどこが違うのかご指摘ください。
python
1#fse103.py 2# -*- coding: utf-8 -*- 3import numpy as np 4import matplotlib.pyplot as plt 5 6def func(t,k): 7 return 2.0*np.power(-1.0,k+1)*np.sin(k*t)/k 8 9def diff(K): 10 dt = 0.01 11 start = -1.0*np.pi 12 end = 1.0*np.pi 13 t = np.arange(start, end, dt) 14 s = 0*t 15 for k in range(1,K): 16 s = s + func(t,k) 17 return np.linalg.norm(s-t, ord=2) 18 19# maxK = np.arange(-np.pi, np.pi, 0.01).size 20maxK = 100 21K = np.arange(1,maxK, 1) 22r = [] 23for k in range(1,maxK): 24 r.append( diff(k) ) 25 26fig=plt.figure(0) 27plt.plot (K, r, linewidth=1.0, color="r",linestyle="solid",label="$ f(t)=t $") 28plt.xlabel("$K$-th approximation", fontsize=14, color="black") 29plt.ylabel("error", fontsize=14) 30plt.grid() 31plt.legend() 32plt.show() 33fig.savefig('fig323.pdf') 34
python
1#fb104.py 2# -*- coding: utf-8 -*- 3import numpy as np 4import matplotlib.pyplot as plt 5 6def func(t,k): 7 return 4.0*np.power(-1.0,k)*np.cos(k*t)/np.power(k,2) 8 9def diff(K): 10 dt = 0.01 11 start = -1.0*np.pi 12 end = 1.0*np.pi 13 t = np.arange(start, end, dt) 14 s = (1.0/3.0)*np.power(np.pi,2)*np.ones(t.size) 15 for k in range(1,K): 16 s = s + func(t,k) 17 return np.linalg.norm(s-t, ord=2) 18 19# maxK = np.arange(-np.pi, np.pi, 0.01).size 20maxK = 100 21K = np.arange(1,maxK, 1) 22r = [] 23for k in range(1,maxK): 24 r.append( diff(k) ) 25 26fig=plt.figure(0) 27plt.plot (K, r, linewidth=1.0, color="r",linestyle="solid",label="$ f(t)=t $") 28plt.xlabel("$K$-th approximation", fontsize=14, color="black") 29plt.ylabel("error", fontsize=14) 30plt.grid() 31plt.legend() 32plt.show() 33fig.savefig('fig323.pdf') 34
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/11/10 05:38