矩阵与线性方程
01 方阵的计算
矩阵行列式调用格式为:
det(A)
实践
- 计 算 行 列 式 ∣ 4 1 2 4 1 2 0 2 10 5 2 0 0 1 1 7 ∣ 计算行列式 \left| \begin{matrix} 4 & 1 & 2 & 4 \\ 1 & 2 & 0 & 2 \\ 10 & 5 & 2 & 0 & \\ 0 & 1 & 1 & 7 \end{matrix} \right| 计算行列式∣∣∣∣∣∣∣∣41100125120214207∣∣∣∣∣∣∣∣
A=[4 1 2 4;1 2 0 2;10 5 2 0;0 1 1 7];
det(A)
运行
>> A=[4 1 2 4;1 2 0 2;10 5 2 0;0 1 1 7];
det(A)
ans =
-8.5117e-15
实际上这个行列式的解析解为0,可以看见,此时的运行结果不是我们想的那样。这是因为A给出的是数值矩阵,运行det(A)时得到的是数值解,会有一定的误差。
但是如果我们将A声明为符号表达式,则可以解决这种情况。(这是一个好习惯)
A=str2sym('[4 1 2 4;1 2 0 2;10 5 2 0;0 1 1 7]'); % 符号矩阵
det(A)
运行
>> A=str2sym('[4 1 2 4;1 2 0 2;10 5 2 0;0 1 1 7]'); % 符号矩阵
det(A)
ans =
0
关于矩阵的加减乘法运算,此前都已经提及。这里主要想表达养成用符号表达式的习惯。
02 求解方程组
调用格式为:
求解N个方程eq1,...,eqN的N个未知变量var1,...,varN的解。
S=solve(eq1,eq2,...,eqN,var1,var2,...,varN);
实践
- 解 方 程 a x + b = 0 解方程ax+b=0 解方程ax+b=0
syms a b x;
s1=solve(a*x+b==0,x)
值得注意的是:在旧版本中,可写成solve(‘a*x+b=0’,‘x’);
不过matlab 2019 后已经不接受向 solve 中传入字符串,并且将表示公式的等式中的 = 改成 == 表示条件判断;
运行
s1 =
-b/a
也可以直接使用结构体来表示方程的解,例如:
- 求 解 方 程 组 y 2 = 2 x ; x + y = 4 求解方程组y^2=2x; x+y=4 求解方程组y2=2x;x+y=4
syms x y;
[x,y]=solve(y^2-2*x==0,y+x-4==0) %[x,y]为输出列表,也可理解为结构体。
可以通过符号“.”来访问结构体中的值
syms x y;
S=solve(y^2-2*x==0,y+x-4==0); %解S是一个结构体
x=S.x %S.x表示结构体S中的x的值
y=S.y %同上
以上两段代码的结果一样
x =
2
8
y =
2
-4
附:矩阵基础知识
声明
A=[a1,a2,a3;b1,b2,b3;c1,c2,c3;]
空矩阵:
A=[]
零矩阵:
zeros(m,n)
值全为1矩阵:
ones(m,n)
单位矩阵:
eye(m,n)
主对角线元素为a1,a2...an矩阵:
diag([a1 a2 ... an])
n阶魔方矩阵:
magic(n)
0~1间均匀分布的随机矩阵:
rand(m,n)
访问
提取第i行元素:
A(i,:)
提取第j列元素:
A(:,j)
矩阵A按列拉长为一个列向量:
A(:)
提取矩阵A的第i1至i2行、j1至j2列元素构成新矩阵:
A(i1:i2,j1:j2)
删除矩阵A的第i1至i2行构成的新矩阵:
A(i1:i2,:)=[]
删除矩阵A的第j1至j2列构成的新矩阵:
A(:,j1:j2)=[]
拼接矩阵
[A B]或[A;B]
运算
矩阵相乘
A*B
矩阵点乘
A.*B
矩阵除法,A\B表示A(逆)B, A/B表示BA(逆)
A\B or A/B
求逆阵
inv(A)
行列式
det(A)
求秩
rank(A)
求特征值
eig(A)
求阶数
size(A)
求行最简形式
rref(A)