ユークリッド距離を使って、フ―リエ展開した関数と元の関数の近似誤差のグラフを出力するプログラムを完成させたいです。
fse103.pyのようなグラフが出力されると成功なのですが、上手くいきません。
出力をすると、誤差が指数関数的に増えていくというありえないグラフになります。
def diff(K)内のs=の式を変えてみたりしたのですが、上手くいきませんでした。
func(t,k)の関数は他のプログラムでグラフとして出力できているので、問題があるとしたら、def diff(K)です。
上手くいかないプログラムはfa104.pyです。
どなたか詳しい方、ご指摘をお願いします。
~追記~
fa104.pyの元の関数はf(t)= 1 (-π <= t < 0) かつ 0 (0 <= t <π)とtを関数上に記述しないので、どうプログラムで表現すればいいか悩んでいます。
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#fa104.py 2# -*- coding: utf-8 -*- 3import numpy as np 4import matplotlib.pyplot as plt 5 6def func(t,k): 7 return 2.0*np.sin((2.0*k-1.0)*t)/(2.0*k-1.0)*np.pi 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
回答1件
あなたの回答
tips
プレビュー