多変数の非線形連立方程式を解くことはできますか?
17 views (last 30 days)
Show older comments
MATLAB を使って数値的に、多変数の非線形連立方程式を解く方法を教えてください。
Accepted Answer
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)のデフォルト値を満たしています。
0 Comments
More Answers (0)
See Also
Categories
Find more on 非線形方程式系 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!