022_SelfAdjusting.mw

繰り返し計算による問題の解法

イントロダクション

このワークシートでは、数値解析へのシンボリックなアプローチの柔軟性を示します。
モデル自体に繰り返し解の中間結果に依存する台数式の二分解を示します。(例えば、方程式の解決法の間に変わる解
)

このレベルのプログラムの柔軟性は、C や FORTRAN などの伝統的な言語を使用すると非常に難しいのですが、Mapleでは簡単に行うことが出来ます。

初期のモデル構造を定義します。

> restart;

二分問題

> f := (x-2)^3+a;

f := (x-2)^3+a

簡単な二分法を使用して各繰り返しがあるモデル係数を調整し解きます。

> flag := 0;
tol := .001;
xl := 0;
xr := 3;
a := 1;

flag := 0

tol := 0.1e-2

xl := 0

xr := 3

a := 1

> for iter from 1 while flag <> 1 do
 testpt := xl + (xr-xl)*.5;
 test := subs(x=testpt,f);
 if abs(test) < tol then
   flag := 1
 elif test < 0 then
   xl := testpt;
   a := a+.01; print(`Adjusted function`,f);
 else
   xr := testpt;
   a := a-.01; print(`Adjusted function`,f);
 end if;
 print(`Iteration`,iter,`Test value`,test);
end do:

`Adjusted function`, (x-2)^3+.99

Iteration, 1, `Test value`, .875

`Adjusted function`, (x-2)^3+1.00

Iteration, 2, `Test value`, -.963125

`Adjusted function`, (x-2)^3+.99

Iteration, 3, `Test value`, .330078125

`Adjusted function`, (x-2)^3+1.00

Iteration, 4, `Test value`, -.209462891

`Adjusted function`, (x-2)^3+.99

Iteration, 5, `Test value`, 0.908508301e-1

`Adjusted function`, (x-2)^3+1.00

Iteration, 6, `Test value`, -0.57611237e-1

`Adjusted function`, (x-2)^3+.99

Iteration, 7, `Test value`, 0.232548714e-1

`Adjusted function`, (x-2)^3+1.00

Iteration, 8, `Test value`, -0.21764586e-1

`Adjusted function`, (x-2)^3+.99

Iteration, 9, `Test value`, 0.58479384e-2

`Adjusted function`, (x-2)^3+1.00

Iteration, 10, `Test value`, -0.12932548e-1

`Adjusted function`, (x-2)^3+.99

Iteration, 11, `Test value`, 0.14641279e-2

`Adjusted function`, (x-2)^3+1.00

Iteration, 12, `Test value`, -0.10732602e-1

Iteration, 13, `Test value`, 0.3661653e-3

> f;

(x-2)^3+1.00