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