null

非線形方程式の数値解法 〜ニュートン法(3)〜
荻田 武史
目的
・前回学習した2元連立非線形方程式の解を求め
るニュートン法について、収束、発散の様子を考
察する。 ・さらに、MATLABのmesh, contour関数等を用い、
グラフを作成し、解の存在を確認する。 ※前回講義資料 ニュートン法を理解しておくこと。
ニュートン法の収束と発散
•  ニュートン法は、曲線の形によっては上手く解
が求まらない場合もある。 –  接線がx軸と水平になってしまう、つまり接線の傾
きが 0 になってしまった場合、発散してしまい解
は求められない。 –  また曲線が複雑な形をしていると接線があちらこ
ちらに変化して、上手く解が求まらないこともある。 → 数値計算を行って出てきた値が、実際に解
として正しいかどうかをグラフから判断すること
も重要。
例)ニュートン法の収束と発散
f1 (x, y) = 2x − y 2 + log x = 0
(x > 0)
f2 (x, y) = x 2 − xy − x +1 = 0
収束
FとFdの作り方は、 非線形方程式の数値解法
(ニュートン法:二次元) のp.7を参考にしよう
>> x0=[1;0] >> mynewton2(F,Fd,x0) k x y 1 3.33333e-­‐01 3.333333e-­‐01 2 6.29605e-­‐01 1.740789e+00 3 6.64689e-­‐01 1.135343e+00 4 7.35774e-­‐01 1.082959e+00 5 7.42349e-­‐01 1.089423e+00 6 7.42365e-­‐01 1.089411e+00 ans = 0.7424 1.0894
発散
他の初期値
x0でも試して
みよう
>> x0=[6;0] >> mynewton2(F,Fd,x0) k x y 1 -­‐3.65427e-­‐01 -­‐6.503284e+00 2 -­‐4.40440e-­‐01 -­‐3.122300e+00 3  -­‐1.17444e+00 -­‐1.365654e+00 ・・ ・・・ ・・・ 10 -­‐6.63381e-­‐03 -­‐1.029101e+00 11 -­‐6.63288e-­‐03 -­‐1.029101e+00 ans = -­‐0.0066 + 0.5433i -­‐1.0291 -­‐ 1.2971i
グラフ表示に使用する関数: meshgrid
meshgird: 座標配列の指定 >> [X,Y] = meshgrid(-­‐2:1:2, -­‐2:1:2) X = -­‐2 -­‐1 0 1 2 -­‐2 -­‐1 0 1 2 -­‐2 -­‐1 0 1 2 -­‐2 -­‐1 0 1 2 -­‐2 -­‐1 0 1 2 Y = -­‐2 -­‐2 -­‐2 -­‐2 -­‐2 -­‐1 -­‐1 -­‐1 -­‐1 -­‐1 0 0 0 0 0 1 1 1 1 1 2 2 2 2 2
【使用例】 >> [X,Y] = meshgrid(-­‐2:0.1:2, -­‐2:0.1:2); >> Z = X .* exp(-­‐X.^2 -­‐ Y.^2); >> surf(X,Y,Z)
グラフ表示に使用する関数: contour
contour: 行列の要素について値による等高線を作成 【使用例】 >> [X,Y] = meshgrid(-­‐2:.2:2,-­‐2:.2:3); >> Z = X.*exp(-­‐X.^2-­‐Y.^2); >> contour(X,Y,Z);
グラフ表示に使用する関数: contour3
Contour3: グリッド上に3次元の等高線を作成 【使用例】 >> [X,Y] = meshgrid([-­‐2:.25:2]); >> Z = X.*exp(-­‐X.^2-­‐Y.^2); >> contour3(X,Y,Z,30)
グラフ表示に使用する関数: mesh
mesh: グリッド上に三次元のメッシュグラフを作成。 色は表面の高さに比例して変化する。 【使用例】 >> [X,Y] = meshgrid([-­‐2:.25:2]); >> Z = X.*exp(-­‐X.^2-­‐Y.^2); >> mesh(X,Y,Z)
グラフ表示に使用する関数: meshc
meshc: meshグラフの下に等高線グラフをプロット 【使用例】 >> [X,Y] = meshgrid([-­‐2:.25:2]); >> Z = X.*exp(-­‐X.^2-­‐Y.^2); >> meshc(X,Y,Z)
例題:等高線を描く
■f12+f22の等高線や色々なグラフを描き、解の存在を
確認してみよう
f1 (x, y) = 2x − y 2 + log x = 0
f2 (x, y) = x 2 − xy − x +1 = 0
【実行例】 >> F=inline('(2*x-­‐y.^2+log(x)).^2+(x.^2-­‐x.*y-­‐x+1).^2') F = Inline func\on: F(x,y) = (2*x-­‐y.^2+log(x)).^2+(x.^2-­‐x.*y-­‐x+1).^2 >> [X,Y]=meshgrid(0.01:0.01:6,-­‐2:0.01:6);Z=F(X,Y);Z=min(Z,5); >> meshc(X,Y,Z)
(x > 0)
演習問題
•  MATLAB上でグラフを描き、前回作成したプログ
ラムで求められた解が正しいかどうか確かめよう
(1)
(2)
(3)
f (x, y) = sin(xy) − 0.51x − 0.32y = 0
g(x, y) = y cos(xy) − 0.51 = 0
f (x, y) = −5x + 2sin x + cos y = 0
g(x, y) = 4 cos x + 2sin y − 5y = 0
f (x, y) = x(x − 3)2 − y 2 +1 = 0
g(x, y) = y(e x − e− x ) − 4y 2 +1 = 0