Presentation is loading. Please wait.

Presentation is loading. Please wait.

コンピュータの高速化により, 即座に計算できるようになってきたが, 手法的にはコンピュータ出現以前に考え出された 方法が数多く使われている。

Similar presentations


Presentation on theme: "コンピュータの高速化により, 即座に計算できるようになってきたが, 手法的にはコンピュータ出現以前に考え出された 方法が数多く使われている。"— Presentation transcript:

1 コンピュータの高速化により, 即座に計算できるようになってきたが, 手法的にはコンピュータ出現以前に考え出された 方法が数多く使われている。
4.非線型方程式 コンピュータの高速化により, 即座に計算できるようになってきたが, 手法的にはコンピュータ出現以前に考え出された 方法が数多く使われている。 1642/12/ /3/20 Sir Isaac Newton

2 非線型方程式の種類 ①代数方程式 ②超越方程式(sin関数や指数関数など超越関数を含む方程式)

3 注意 ①複素数の範囲内では, 代数方程式の解の個数は,分かっているが, 超越方程式の解の個数は,一般的には分からない。
②いずれの方程式を解くにしても, あらかじめ概略のグラフを描く等の手段により, 解の存在と,どの範囲に解があるかを 確認しておく必要がある。

4 4.1 実根(複素数は含めない)の求め方 (1)繰返し法
4.1 実根(複素数は含めない)の求め方 (1)繰返し法 解くべき方程式 と置き換えることができるとき とし,適当な解の予測値 を与えて, 繰返し演算を行う。

5 繰返し法の例題 [例] に急速に近づく

6 厳密解との比較のための式定義 繰返し法を Excel で式定義して様子を眺めよう 2次方程式の 根の公式による解

7 繰返し法での収束の様子 グラフを描いて確かめよう

8 課題(1) 下記の方程式を繰返し法を用いて, Excelで定義し, 収斂の様子をグラフで確かめること

9 交点における g(x) の傾きが1より大きい場合
繰返し法では,ほとんど収束しない 収束しない例

10 解決策 交点の傾きが 1 より小さくなるような等価な方程式に変換する。たとえば, とおけば, とすればよい。 を求めて,

11 解決策 [確認] とおいて を求めて元に戻す。

12 課題(2) ① 下記の方程式が繰返し法では収斂しないことを確認せよ。 ② また,どのようにすれば収斂するかを検討せよ。
① 下記の方程式が繰返し法では収斂しないことを確認せよ。 ② また,どのようにすれば収斂するかを検討せよ。 ③ 収斂する方法をExcelで定義して提出せよ。

13 VBAでのプログラム Function 漸化式(X) As Double 漸化式 = (X * X + 1) / 2 ' この部分に漸化式を書く End Function Function 繰返し法(E, iter, EPS, iterMax) As Double iter = 0: X1 = 0: E = EPS * 100 Do While E > EPS And iter < iterMax iter = iter + 1 X2 = 漸化式(X1) E = Abs(X2 - X1) X1 = X2 Loop 繰返し法 = X2 Sub ボタン1_Click() R = 繰返し法(E, iter, , 5000) MsgBox " 繰返し回数 = " & iter & _ " 結果 = " & Format(R, "#0.0000") & " 誤差 = " & E End Sub

14 (2)区間縮小法 区間 の間に解が一つだけあることが分かっていれば, は, と の間で符号を変える。すなわち もし, ならば である。
ここで,中点 における関数値の正負によって区間を 縮小できる。すなわち

15 例題とする関数 [例] の場合

16 区間縮小法の式定義 Excel式定義で確かめてみよう(1) の場合 式が変わればここを変更

17 区間縮小法の収束の様子 Excel式定義で確かめてみよう(2)

18 VBAでのプログラム Function F(X) As Double F = X * X - X - 2 ' ここに解くべき関数を書く
End Function Function 区間縮小法(E, iter, EPS, iterMax) As Double iter = 0: X1 = 1: X2 = 4: E = EPS * 100 Do While E > EPS And iter < iterMax iter = iter + 1: X = (X1 + X2) / 2: Y = F(X) If Abs(Y) < EPS Then: Exit Do ElseIf Y > 0 Then: X2 = X Else: X1 = X End If E = Abs(X2 - X1) Loop E = Abs(Y): 区間縮小法 = X Sub ボタン4_Click() R = 区間縮小法(E, iter, , 500) MsgBox " 繰返し回数 = " & iter & " 結果 = " & _ Format(R, "#0.0000") & " 誤差 = " & E End Sub

19 課題(3) 下記の方程式を区間縮小法を用いて, Excelで定義し, 収斂の様子をグラフで確かめること

20 (3)ニュートン・ラプソン(Newton-Raphson)法 (ニュートン・ラフソン法と呼ぶ人もいるが?…ニュートン・ラプソン法が多勢)
近似値 として,真の解との誤差を とすると 左辺をテーラ展開して,1次の項までとれば したがって, は,より高い精度の近似値となる。 これを繰り返して,解に収束させていく。

21 ニュートン・ラプソン法の式定義 Excel式定義で確かめてみよう(1) の場合 式が変わればここを変更

22 ニュートンラプソン法の収束の様子 Excel式定義で確かめてみよう(2)

23 課題(4) 下記の方程式をニュートンラプソン法を用いて, Excelで定義し, 収斂の様子をグラフで確かめること

24 Function ニュートンラプソン法(E, iter, EPS, iterMax) ' X^2 - X - 2 = 0を解く
Function F(X) As Double F = X * X - X - 2 ' ここに解くべき関数を書く End Function Function DF(X) As Double DF = 2*X - 1 ‘ ここに微分式を書く Function ニュートンラプソン法(E, iter, EPS, iterMax) ' X^2 - X - 2 = 0を解く iter = 0: X = 1: E = EPS * 100 Do While iter < iterMax iter = iter + 1 Y = F(X): If Abs(Y) < EPS Then Exit Do X = X - Y / DF(X) Loop E = Abs(Y): ニュートンラプソン法 = X Sub ボタン5_Click() R = ニュートンラプソン法(E, iter, , 500) MsgBox " 繰返し回数 = " & iter & " 結果 = " & _ Format(R, "#0.0000") & " 誤差 = " & E End Sub

25 (4)セカント(secant)法 (secantとは,「割線」,「交差する」等の意味)
導関数を求めることができない場合,解の近似値を2個用意し, 2点を結ぶ直線とX軸との交点を新たな近似値とする方法。すなわち, 曲線に交差する割線 これを繰り返すことで解に収束させる。

26 セカント(secant)法 k 回目の式は以下のように表すことができる。 (セカント法の弱点) 初期値を2個与える必要があるので,
  初期値を2個与える必要があるので,   多変数への拡張が困難である。 曲線に交差する割線

27 ニュートンラプソン法との比較 微分値の替わりに 割線を用いていると捉えてよい。

28 セカント法の式定義 Excel式定義で確かめてみよう(1) の場合 式が変わればここを変更

29 セカント法による収斂

30 課題(5) 下記の方程式をセカント法を用いて, Excelで定義し, 収斂の様子をグラフで確かめること

31 VBAでのプログラム(関数F(X)はニュートンラプソンと共通)
Function セカント法(E, iter, EPS, iterMax) EPS = : iter = 0: iterMax = 500 X1 = 1: X2 = 4: E = EPS * 100 Y1 = F(X1) ' X1に関する式を書く Do While E > EPS And iter < iterMax iter = iter + 1 Y2 = F(X2) ' X2に関する式を書く Y = (Y1 + Y2) / 2 If Abs(Y) < EPS Then Exit Do X = X2 - Y2 * (X1 - X2) / (Y1 - Y2) X1 = X2: X2 = X: Y1 = Y2 '前回式の保存 Loop E = Abs(Y): セカント法 = X End Function Sub ボタン6_Click() R = セカント法(E, iter, , 500) MsgBox " 繰返し回数 = " & iter & " 結果 = " & _ Format(R, "#0.0000") & " 誤差 = " & E End Sub

32 課題(6) サンプルVBAプログラムを用いて 以下の方法による収斂回数を比較せよ。 ① 繰返し法 ② 区間縮小法 ③ ニュートンラプソン法
  ① 繰返し法   ② 区間縮小法   ③ ニュートンラプソン法   ④ セカント法


Download ppt "コンピュータの高速化により, 即座に計算できるようになってきたが, 手法的にはコンピュータ出現以前に考え出された 方法が数多く使われている。"

Similar presentations


Ads by Google