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)のデフォルト値を満たしています。