ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

代数方程式および微分方程式の求解

この例では、Symbolic Math Toolbox™ を使って代数方程式および微分方程式の解を求める方法を示します。

代数方程式の求解

関数 solve では、単一方程式や連立方程式など、広範囲にわたる代数方程式を処理できます。既定の設定では、ソルバーは複素数解や複数の分岐を含めて常に完全な解のセットを返そうとします。たとえば、次の多項式には 2 つの実数解と 2 つの複素数解があります。

syms x
xsol = solve(x^4 + x^3 - x == 1, x)
 
xsol =
 
                     1
                    -1
   (3^(1/2)*i)/2 - 1/2
 - (3^(1/2)*i)/2 - 1/2
 

インデックスを使用して、実数解のみを選択します。

xsol(xsol == real(xsol))
 
ans =
 
  1
 -1
 

方程式の中には、三角要素のある方程式など、無数の解をもつ方程式もあります。そのような方程式の場合、ソルバーはその無限のセットから 1 つの解のみを返します。

solve(sin(x) == 1, x)
 
ans =
 
pi/2
 

代数連立方程式の求解

関数 solve を使用しても連立方程式を求解することができます。求解する連立方程式と変数を指定します。

syms x y
[x2, y2] = solve(y + x^2 == 1, x - y == 10)
 
x2 =
 
   (3*5^(1/2))/2 - 1/2
 - (3*5^(1/2))/2 - 1/2
 
 
y2 =
 
   (3*5^(1/2))/2 - 21/2
 - (3*5^(1/2))/2 - 21/2
 

個々の方程式と同様に、連立方程式が無数の解をもつ場合、ソルバーは 1 つの解のみを返します。

[x3, y3] = solve(exp(x + y) == 1, x - y == 1)
 
x3 =
 
1/2
 
 
y3 =
 
-1/2
 

場合によっては、連立方程式の行列形式で表現できます。その場合は、MATLAB のバックスラッシュ演算子を使用して方程式の解を求めることができます。方程式は数値的に求解されるため、結果が倍精度の数になることに注意してください。

A = [1 2; 3 4];
b = [5 6]';
x = A\b
x =

   -4.0000
    4.5000

'sym' コマンドを使用して、正確な連立方程式の解を求めることができます。

sym(A)\b
 
ans =
 
  -4
 9/2
 

常微分方程式 (ODE) の求解

関数 dsolve を使用すると、さまざまな種類の常微分方程式を解くことができます。たとえば、単純な 2 次線形常微分方程式なども求解できます。

syms y(t)
D2y = diff(y,2);
Dy = diff(y);
dsolve(D2y + Dy + y == 0)
 
ans =
 
C5*exp(-t/2)*cos((3^(1/2)*t)/2) + C6*exp(-t/2)*sin((3^(1/2)*t)/2)
 

常微分方程式と共に、初期条件または境界条件を指定できます。

ysol = dsolve(D2y == 2*t/Dy, y(0) == 0, Dy(0) == 1)
 
ysol =
 
(2^(1/2)*log(t + (t^2 + 1/2)^(1/2)))/4 - (2^(1/2)*log(2^(1/2)/2))/4 + (2^(1/2)*t*(t^2 + 1/2)^(1/2))/2
 

関数 ezplot を使用すると、解を微分方程式に可視化できます。

ezplot(ysol)

この情報は役に立ちましたか?