📅  最后修改于: 2023-12-03 15:11:23.194000             🧑  作者: Mango
在 matlab 中,我们可以使用矩阵表示多个变量之间的关系,并用方程组的形式表示这些关系。矩阵方程在数学建模、机器学习、信号处理等领域都有广泛的应用。
线性方程组是最简单的矩阵方程,它的一般形式为:
$$Ax=b$$
其中 $A$ 是 $n\times n$ 的方阵,$b$ 是 $n\times 1$ 的常向量,$x$ 是 $n\times 1$ 的未知向量。
在 matlab 中,我们可以使用反斜杠符号 \
求解线性方程组:
A = [1 2; 3 4];
b = [5; 6];
x = A \ b
上述代码中,我们定义了一个 $2\times 2$ 的矩阵 $A$ 和一个 $2\times 1$ 的向量 $b$,然后使用反斜杠符号求解方程 $Ax=b$,求得 $x$ 的值为:
-4
4.5
也就是说,方程的解为 $x_1=-4$,$x_2=4.5$。
如果方程组有多个解,那么 \
运算符会返回其中一个解。如果方程组无解或有无数解,\
运算符会返回一个空向量或一个包含 NaN 元素的向量。
非线性方程组是指至少有一个元素是非线性的方程组。非线性方程组的求解通常需要使用数值优化算法,matlab 中提供了多个函数来实现这个功能。
以以下非线性方程组为例:
$$\begin{cases} x^2+y^2=6 \ x^2-y^2=2 \end{cases}$$
我们可以使用 fsolve
函数求解该方程组:
fun = @(x) [x(1)^2 + x(2)^2 - 6; x(1)^2 - x(2)^2 - 2];
x0 = [1; 1];
x = fsolve(fun, x0)
上述代码中,我们首先定义了一个函数句柄 fun
,该函数返回一个 $2\times 1$ 的向量,表示方程组的两个方程。然后,我们使用初始值 $x_0=[1;1]$ 调用 fsolve
函数,求得非线性方程组的解:
x =
1.7454
1.1860
如果方程组有多个解,fsolve
函数会返回其中一个解。如果方程组无解或有无数解,fsolve
函数会抛出错误。
除了线性方程组和非线性方程组,我们还可以使用矩阵形式来表示方程组。矩阵形式的方程通常使用 inv
函数求解。
以以下矩阵形式的方程为例:
$$\begin{bmatrix}1 & 2 \ 3 & 4\end{bmatrix}\begin{bmatrix}x \ y\end{bmatrix}=\begin{bmatrix}5 \ 6\end{bmatrix}$$
我们可以使用 inv
函数求解该方程组:
A = [1 2; 3 4];
b = [5; 6];
x = inv(A) * b
上述代码中,我们定义了一个 $2\times 2$ 的矩阵 $A$ 和一个 $2\times 1$ 的向量 $b$,然后使用 inv
函数求解方程 $Ax=b$,求得 $x$ 的值为:
-4
4.5
与使用 \
运算符求解线性方程组的结果相同。
使用 inv
函数求解矩阵形式的方程组时,要注意 $A$ 的逆矩阵是否存在。如果 $A$ 的行列式为 0,那么 $A$ 的逆矩阵不存在,此时 inv
函数会抛出错误。