非線形方程式の数値解法 〜ニュートン法(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
© Copyright 2026 ExpyDoc