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

17 ビュー (過去 30 日間)
MathWorks Support Team
MathWorks Support Team 2010 年 1 月 21 日
MATLAB を使って数値的に、多変数の非線形連立方程式を解く方法を教えてください。

採用された回答

MathWorks Support Team
MathWorks Support Team 2010 年 1 月 21 日
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 件)

カテゴリ

Help Center および File Exchange非線形方程式系 についてさらに検索

タグ

タグが未入力です。

Community Treasure Hunt

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

Start Hunting!