多変数の非線形連立方程式を解くことはできますか?

17 views (last 30 days)
MathWorks Support Team
MathWorks Support Team on 21 Jan 2010
MATLAB を使って数値的に、多変数の非線形連立方程式を解く方法を教えてください。

Accepted Answer

MathWorks Support Team
MathWorks Support Team on 21 Jan 2010
Optimization Toolbox の FSOLVE 関数や LSQNONLIN 関数を使用することで可能です。
以下では、FSOLVE 関数を使用し、
y = sin(x)
y^2 = cos(x)
の 2 つの方程式の交点を求める手順を説明します。
1. 式(システム)を F(x,y) = 0 の形に書き直します。
y - sin(x) = 0
y^2 - cos(x) = 0
2. FSOLVE 関数の目的関数シンタックスに合わせ、ベクトル 'V = [x; y]'の形で関数を定義します。
F = @(V) [V(2)-sin(V(1)); V(2).^2-cos(V(1))];
※MATLAB 7.0(R14) 以前のバージョンをご利用の場合は、以下のようにインライン関数を用いて記述します。
F = inline('[V(2)-sin(V(1)); V(2).^2-cos(V(1))]', 'V');
3. FSOLVE関数を実行します。
InitialGuess = [1;1]; % x,y の初期値
Options = optimset('Display','iter'); % 繰り返し計算の表示を「オン」に設定
XY = fsolve(F, InitialGuess, Options); % 最適化
4.上記で得られた結果が F(x,y) = 0 を満たしているか、確認します。
ShouldBeZero = F(XY) % 最適化によって得られた x,y の値を目的関数に代入
% 2 つの方程式を表示
ezplot('y = sin(x)');
hold on
ezplot('y^2 = cos(x)');
plot(XY(1),XY(2),'ro'); % 最適化によって得られた x,y の値を表示
この例では、変数 ShouldBeZero の結果は厳密に 0 ではありませんが、FSOLVE 関数における関数出力値の許容誤差(TolFun)のデフォルト値を満たしています。同様に、X,Y の各点は厳密に 2 つの方程式の交点の値ではありませんが、FSOLVE 関数における目的変数の許容誤差(TolX)のデフォルト値を満たしています。

More Answers (0)

Tags

No tags entered yet.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!