###前提・実現したいこと
python3.6で1/3シンプソンの公式を利用したプログラムを実装中です。
その際、きざみ幅がhの場合の近似値vと、きざみ幅をその半分にした場合の近似値wとを計算し、|v^w| <= 10^(-10)となった場合にプログラムを終了し、その際の計算結果を出力するというものです。
###発生している問題・エラーメッセージ
|v^w| <= 10^(-10)となった時の分割数と近似値を出力してbreakするように実装したつもりなのですが、 実行時に何も表示されなくて困っています。
###該当のソースコード
python
1import math 2 3def f1(x): 4 return (x**3-2*x**2+x-1) 5def f2(x): 6 return (math.cos(x)) 7 8N = 10000 # 分割数 9 10a_list = [-2,0] 11b_list = [3,math.pi/2] 12cnt = 0 13for i in range(1,N,1): 14 h = (b_list[0]-a_list[0])/i # きざみ幅 15 h2 = h/2 16 v = (h/3) * (f1(h*i) + 4*f1(h*(i+1)) + f1(h*(i+2))) 17 w = (h2/3) * (f1(h2*i) + 4*f1(h2*(i+1)) + f1(h2*(i+2))) 18 if abs(v-w) <= 10**(-10): 19 print("(1)\n") 20 print("分割数 N = "+str(n)+"\n") 21 print("近似値 = "+str(v)+"\n") 22 break 23for i in range(1,N,10): 24 h = (b_list[1]-a_list[1])/i 25 h2 = h/2 26 v = (h/3) * ((f2(h*i) + 4*f2(h*(i+1)) + f2(h*(i+2)))) 27 w = (h2/3) * ((f2(h2*i) + 4*f2(h2*(i+1)) + f2(h2*(i+2)))) 28 if abs(v-w) <= 10**(-10): 29 print("(2)\n") 30 print("分割数 N = "+str(n)+"\n") 31 print("近似値 = "+str(v)+"\n") 32 break
###試したこと
for文内で|v^w|の値を出力をしてみましたが、とても10^(-10)になりそうもなく、小数点1桁くらいの大きい値が出力されました。
###補足情報(言語/FW/ツール等のバージョンなど)
なし
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/01/09 16:12