PADのテンプレート 処理、連接 x0 ← x x ← x0+ u(x0) err ← |x - x0| 判断(選択) x2 ← x3 { x0 = x; x = x0+u(x0); err= fabs(x-x0); } 判断(選択) f (x3) > 0 x2 ← x3 x1 ← x3 if (f(x3) > 0) x2 = x3; else x1 = x3;
(repeat ~ until) 前判定反復 a ≦ 0 エラーメッセージ出力 a の入力 後判定反復 err < e x0 ← x while (a <= 0) { printf("input error\n"); printf("a = "); scanf("%lf", &a); } a ≦ 0 エラーメッセージ出力 a の入力 後判定反復 (repeat ~ until) err < e x0 ← x x ← 0.5(x0+ a/x0) err ← |x - x0| do { x0 = x; x = 0.5*(x0+a/x0); err= fabs(x-x0); } while (err >= eps); repeat ~ until と do ~ while は 条件が逆 問題向き反復 for (i=1;i<=N;i++) { s += x[i]*y[i]; } i = 1,...,N s ← s + xi yi
二分法 = 二分法 定 義 … 0 を返す 引用(参照) 入力 結果の出力 int bisection() { ... ; ... ; return 0; } 引用(参照) 入力 { scanf("%lf%lf",&x1,&x2); x = bisection(x1,x2); printf("x = %g\n",x); } 二分法 結果の出力
二分法 = x1←1, x2 ←2 err < eps x3 ← (x1+x2)/2 f (x3) > 0 x2 ← x3 x1 ← x3 err ← x2 - x1 (x1+x2)/2 を出力 ニュートン法 = x を入力 err < eps(|x0|+|x|) x0 ← x x ← x0- f(x0)/f ’(x0) err ← |x - x0| x を出力
台形公式 a, b, n を与える h ← (b - a) / n s ← ( f(a) + f(b) ) / 2 i = 1, ..., n - 1 s ← s + f(a + ih) s ← h s = シンプソンの公式 a, b, n を与える h ← (b - a) / 2n s1 ← f(a) + f(b); s2 ← 0; s4 ← 0 i = 1, ..., n - 1 s2 ← s2 + f(a + 2ih) s4 ← s4 + f(a + (2i - 1)h) s4 ← s4 + f(a + (2n - 1)h) s ← (h / 3) (s1 + 2s2 + 4s4) =