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

조회 수: 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 CenterFile Exchange에서 非線形方程式系에 대해 자세히 알아보기

태그

아직 태그를 입력하지 않았습니다.

Community Treasure Hunt

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

Start Hunting!