本文学习视频:https://www.bilibili.com/video/av68228488?p=12
本文学习两个内容:
- 线性方程式
- 线性系统
电路原理的例子。要用基尔霍夫定律:
根据公式推导出来,也就是要解决如下公式:
第一种方法。 高斯消去法- reff()
reff() 这个函数有三个用法。
使用 Gauss-Jordan 消元法和部分主元消元法返回简化行阶梯形的 R
= rref(A
)A
。
指定算法用于确定可忽略列的主元容差。R
= rref(A
,tol
)
[
还返回非零主元 R
,p
] = rref(A
)p
。 这里p也就是在矩阵R中没有1的1列。这个方法是高斯里的。
计算逆矩阵的更高效方法是使用 inv(A)
。也可以用reff()
这是rref() 函数的主要用途。具体可以参考如下网址:
https://ww2.mathworks.cn/help/matlab/ref/rref.html
例题:
%%
clear all; clc; %15分钟练习
A=[1 2 1; 2 6 1;1 1 4];
b=[2;7;3];
R=rref([A b])
下面是R的显示结果:
R =
1 0 0 -3 %也就是 x1=-3
0 1 0 2 %x2=2
0 0 1 1 %x1=1
矩阵论LU分解
解题思路:
将解 Ax=b 换成求解 U, 而L-1 是一个上三角矩阵或者是下三角。
L要经过多次才可以算出来。也才能知道U。不过可以利用函数 LU()
将满矩阵或稀疏矩阵 A
分解为一个上三角矩阵 U
和一个经过置换的下三角矩阵 L
,使得 A = L*U
。
还返回一个置换矩阵 P
,并满足 A = P'*L*U
。在此语法中,L
是单位下三角矩阵,U
是上三角矩阵。
这里要特别注意:在PPT中,讲的是。。但实际用
[
算出来的是 L
,U
] = lu(A
)A = L*U
。
而且如果 用公式 [
的话, 实际上A=L
,U
,P
] = lu(A
)P'*L*U。所以35页的练习应该这样计算:
%%
clear all; clc; %32分钟练习
A=[1 1 1;2 3 5;4 6 8];
b=[2;7;3];
[L,U]=lu(A)
y=inv(L)*b
x=inv(U)*y
%%
clear all; clc; %32分钟练习,另一种方法
A=[1 1 1;2 3 5;4 6 8];
b=[2;7;3];
x=A\b
clear all; clc; %37分钟练习,另一种方法
syms R1 R2 R3 R4 R5 V1 V2
A=[R1 0 0 R4 0;
0 R2 0 -R4 R5;
0 0 -R3 0 R5;
1 -1 0 -1 0;
0 1 -1 0 -1];
b=[V1;0;V2;0;0];
x=A\b
[Q,R] = qr(A) | 正交三角分解 | 其中 A 是 m ×n )生成 m ×n 上三角形矩阵 R 和 m ×m 酉矩阵 Q ,这样 A = Q*R 。 |
ldl() | Hermitian 不定矩阵的分块 LDL 分解 | 不太明白此矩阵的用法 |
矩块分解 | 将满矩阵或稀疏矩阵 返回一个置换矩阵 | |
| Cholesky 分解 | 将对称正定矩阵 A 分解成满足 A = R'*R 的上三角 R 。如果 A 是非对称矩阵,则 chol 将矩阵视为对称矩阵,并且只使用 A 的对角线和上三角形。 |
[U,V,X,C,S] = gsvd(A,B) | 广义奇异值分解 | 返回酉矩阵
|
[ | 奇异值分解 | 执行矩阵 A 的奇异值分解,因此 A = U*S*V' 。 |
ilu | 不完全 LU 分解 |
关于chol(),看下面这个例题:
使用 chol
分解对称系数矩阵,然后使用 Cholesky 因子求解线性方程组。
创建在对角线上为正值的对称矩阵。
A = [1 0 1; 0 2 0; 1 0 3]
A = 3×3
1 0 1
0 2 0
1 0 3
计算矩阵的 Cholesky 因子。
R = chol(A)
R = 3×3
1.0000 0 1.0000
0 1.4142 0
0 0 1.4142
第二种方法。 Cramer's(Inverse) Method
这是有关线性代数的知识,再不解释了。
clear all; clc; %44分钟练习
A=[1 2 1;2 6 1; 1 1 4];
b=[2;7;3];
x=inv(A)*b %必须要A的逆矩阵要存在
49分钟练习
这个不会哦。。。。。
clear all;clc;
x=-20:1:20;
y=0:1:40;
[X Y]=meshgrid(x,y);
Z1=-X-Y;
Z2=Y-X;
Z3=-X/3;
mesh(X,Y,Z1);
view(50,10);
hold on;
mesh(X,Y,Z2);
mesh(X,Y,Z3);
xlabel('x');
ylabel('y');
zlabel('z');
% zlim([-20 20]);
hold off;
试着画了几次,感觉都画不出来。不知道哪有错误噻!!!
线性系统
y=Ab, 线性系统 是想求y.
而线性方程, 是Ax=b, 是想求x
这一节基本在讲线性,后面感觉没听懂。要先看线性了。