Pascal で非線形方程式を解く (2分法)
非線形方程式の解法(2分法)を利用して2の平方根を求める
1. まず, 条件 を満たす点 を考えると,
関数 の解は, 区間 の中に存在する.
2. 次に, 区間 の中点 を考えると,
であれば, 解は区間 の中に存在し,
同様に, であれば, 区間 の中に存在する.
3. この作業を繰り返して, 区間を絞り込んで行くことで解を求める.
※ちなみに, 区間 とは, 両端を含まない数の集合で, 開区間という
また, 両端を含む数の集合は, 閉区間という
Program Pas0901(arg); {$MODE delphi} uses SysUtils, Math; function f(x:Double):Double; begin result := x * x - 2.0; end; var a: Double = 1.0; b: Double = 2.0; c: Double; fc: Double; begin while true do begin { 区間 (a, b) の中点 c = (a + b) / 2 } c := (a + b) / 2; writeln(format('%12.10f'#9'%13.10f', [c, c - sqrt(2)])); fc := f(c); If Abs(fc) < 0.0000000001 then break; if fc < 0 then begin { f(c) < 0 であれば, 解は区間 (c, b) の中に存在 } a := c; end else begin { f(c) > 0 であれば, 解は区間 (a, c) の中に存在 } b := c; end; end; end.
1.5000000000 0.0857864376 1.2500000000 -0.1642135624 1.3750000000 -0.0392135624 1.4375000000 0.0232864376 1.4062500000 -0.0079635624 1.4218750000 0.0076614376 1.4140625000 -0.0001510624 1.4179687500 0.0037551876 1.4160156250 0.0018020626 1.4150390625 0.0008255001 1.4145507813 0.0003372189 1.4143066406 0.0000930783 1.4141845703 -0.0000289921 1.4142456055 0.0000320431 1.4142150879 0.0000015255 1.4141998291 -0.0000137333 1.4142074585 -0.0000061039 1.4142112732 -0.0000022892 1.4142131805 -0.0000003818 1.4142141342 0.0000005718 1.4142136574 0.0000000950 1.4142134190 -0.0000001434 1.4142135382 -0.0000000242 1.4142135978 0.0000000354 1.4142135680 0.0000000056 1.4142135531 -0.0000000093 1.4142135605 -0.0000000019 1.4142135642 0.0000000019 1.4142135624 0.0000000000
参考文献