ユークリッド距離を使って、フ―リエ展開した関数と元の関数の近似誤差をグラフに表したいです。
成功したプログラム(fse103.py)はうまく出力されます。ただ、関数を変えたfb104.pyはグラフがおかしいです。本来なら、fse103.pyのようにグラフは0に近付いていくはずです。
どなたかどこが違うのかご指摘ください。
python
#fse103.py # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt def func(t,k): return 2.0*np.power(-1.0,k+1)*np.sin(k*t)/k def diff(K): dt = 0.01 start = -1.0*np.pi end = 1.0*np.pi t = np.arange(start, end, dt) s = 0*t for k in range(1,K): s = s + func(t,k) return np.linalg.norm(s-t, ord=2) # maxK = np.arange(-np.pi, np.pi, 0.01).size maxK = 100 K = np.arange(1,maxK, 1) r = [] for k in range(1,maxK): r.append( diff(k) ) fig=plt.figure(0) plt.plot (K, r, linewidth=1.0, color="r",linestyle="solid",label="$ f(t)=t $") plt.xlabel("$K$-th approximation", fontsize=14, color="black") plt.ylabel("error", fontsize=14) plt.grid() plt.legend() plt.show() fig.savefig('fig323.pdf')
python
#fb104.py # -*- coding: utf-8 -*- import numpy as np import matplotlib.pyplot as plt def func(t,k): return 4.0*np.power(-1.0,k)*np.cos(k*t)/np.power(k,2) def diff(K): dt = 0.01 start = -1.0*np.pi end = 1.0*np.pi t = np.arange(start, end, dt) s = (1.0/3.0)*np.power(np.pi,2)*np.ones(t.size) for k in range(1,K): s = s + func(t,k) return np.linalg.norm(s-t, ord=2) # maxK = np.arange(-np.pi, np.pi, 0.01).size maxK = 100 K = np.arange(1,maxK, 1) r = [] for k in range(1,maxK): r.append( diff(k) ) fig=plt.figure(0) plt.plot (K, r, linewidth=1.0, color="r",linestyle="solid",label="$ f(t)=t $") plt.xlabel("$K$-th approximation", fontsize=14, color="black") plt.ylabel("error", fontsize=14) plt.grid() plt.legend() plt.show() fig.savefig('fig323.pdf')
まだ回答がついていません
会員登録して回答してみよう