前提・実現したいこと
4階微分のプログラムを書いているのですが、少しおかしいところがあります。
微小な値(1e-04)で実行するとかなりの誤差が出てきます。試しに値を変えてみたのですが、値が1に近い方が解析値に近くなるのですが、これは正常なのでしょうか?数学的には、h→0で近似するのではないのでしょうか。
またxの値自体を0にすると正確な値に近い値が得られますが、3などを代入すると明らかにおかしい値(568.43418860808)が得られてしまいます。解析的にはf^(4)(x)=144での値には依らないように思えてしまいますが...
何が原因なのでしょうか。
該当のソースコード
python
1def forth(func, x): 2 h = 1e-4 3 val1 = func(x + 4*h) 4 val2 = func(x - 4*h) 5 val3 = 4*func(x-2*h) 6 val4 = 4*func(x+2*h) 7 val5 = 6*func(x) 8 #print("{}\n{}\n{}\n{}".format(val1,val2,val3,val4)) 9 return (val1 + val2 - val3 - val4 + val5) / (2*h)**4 10 11def func4(x): 12 return 6*x**4 + 5*x**3 + 4*x**2 + 3*x + 2 13 14print(forth(func4,1))
試したこと
x=1で
1e-05:177635.683940025
1e-04:142.10854715202
1e-03:144.00036718598128
1e-01:143.9999999999841
1e-00:144.0
1e04:144.00000000000003
h=1e-4で
x=0:144.32899320127032
x=1:142.10854715202
x=2:284.21709430404
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/07 12:59