Main Content

線形方程式系の求解

この節では、Symbolic Math Toolbox™ を使用して線形方程式系を解く方法を説明します。

linsolve を使用した線形方程式系の求解

線形方程式系

a11x1+a12x2++a1nxn=b1a21x1+a22x2++a2nxn=b2am1x1+am2x2++amnxn=bm

は、行列方程式 Ax=b として表すことができます。ここで、A は次の係数行列です。

A=(a11a1nam1amn)

また、b は、方程式の右辺

b=(b1bm)

を含むベクトルです。

線形方程式系が AX = B の形式になっていない場合は、equationsToMatrix を使用して方程式をこの形式に変換します。以下の方程式系を考えます。

2x+y+z=2x+yz=3x+2y+3z=10

方程式系を宣言します。

syms x y z
eqn1 = 2*x + y + z == 2;
eqn2 = -x + y - z == 3;
eqn3 = x + 2*y + 3*z == -10;

equationsToMatrix を使用して方程式を AX = B の形式に変換します。equationsToMatrix への 2 番目の入力は方程式の独立変数を指定します。

[A,B] = equationsToMatrix([eqn1, eqn2, eqn3], [x, y, z])
A =
[  2, 1,  1]
[ -1, 1, -1]
[  1, 2,  3]
 
B =
   2
   3
 -10

linsolve を使用して AX = B を解き、不明な X のベクトルを求めます。

X = linsolve(A,B)
X =
  3
  1
 -5

X から x = 3y = 1、および z = -5 が求められます。

solve を使用した線形方程式系の求解

方程式が係数の行列ではなく式の形式である場合は linsolve の代わりに solve を使用します。同様の線形方程式系を考えます。

2x+y+z=2x+yz=3x+2y+3z=10

方程式系を宣言します。

syms x y z
eqn1 = 2*x + y + z == 2;
eqn2 = -x + y - z == 3;
eqn3 = x + 2*y + 3*z == -10;

solve を使用して方程式系を解きます。solve への入力は方程式のベクトルと、方程式から求める変数のベクトルです。

sol = solve([eqn1, eqn2, eqn3], [x, y, z]);
xSol = sol.x
ySol = sol.y
zSol = sol.z
xSol =
3
ySol =
1
zSol =
-5

solve は解を構造体配列で返します。解にアクセスするには配列のインデックスを指定します。

関連するトピック