现行方程式求解:
高斯消去法
rref()
>> A = [1 2 1; 2 6 1; 1 1 4]
A =
1 2 1
2 6 1
1 1 4
>> b = [2 7 3]';
>> R = rref([A b])
R =
1 0 0 -3
0 1 0 2
0 0 1 1
>>
LU Factorization
利用lu():
【P*A = L*U】 参见博客:https://blog.csdn.net/Lrrent/article/details/51297284
>> A = [1 1 1; 2 3 5 ; 4 6 8];
>> [L U P] = lu(A);
>> L
L =
1.0000 0 0
0.2500 1.0000 0
0.5000 0 1.0000
>> U
U =
4.0000 6.0000 8.0000
0 -0.5000 -1.0000
0 0 1.0000
>> P
P =
0 0 1
1 0 0
0 1 0
>> inv(L)
ans =
1.0000 0 0
-0.2500 1.0000 0
-0.5000 0 1.0000
>>
左除法: \ 、mldivide()
>> A = [1 2 1; 2 6 1; 1 1 4];
>> b = [2; 7; 3];
>> x = A\b
x =
-3.0000
2.0000
1.0000
>>
左除法会根据情况自动判断选择合适的方法进行求值。
几个常用函数总结:
矩阵的逆 inverse matrix
利用INV求解:
【但是inv(A) 不一定存在】
例如:
>> A = [1 2 3 4; 2 4 6 8; 9 8 7 6; 1 3 2 8];
>> inv(A)
警告: 矩阵为奇异工作精度。
ans =
Inf Inf Inf Inf
Inf Inf Inf Inf
Inf Inf Inf Inf
Inf Inf Inf Inf
>> det(A)
ans =
0
>>
det():求方阵行列式的值。
当det(A) = 0是A就没有inv。
当det(A)接近于0时不能用inv()求解。
检查矩阵的健康情形:
健康:某个元素做很小的变动,他的det也只会变动很小。
>> A = [1 2 3; 2 4.001 6;9 8 7];
>> cond(A)
ans =
4.3484e+04
>> B = [1 2 3; 2 5 6; 9 8 7]; cond(B)
ans =
45.5623
>>
1、矩阵的条件数是判断矩阵“病态”程度的一个指标。
若矩阵的条件数越大,则表明矩阵的病态越严重(稳定性越差);反而就是呈现出良态
2、矩阵的条件数函数
(1)cond函数 求矩阵二范式条件数
(2)condest函数 求矩阵一范式条件数
(3)rcond函数 求矩阵条件数的倒数
【由上面可以看出A相对于B是非常不稳定的】
特征向量
eig()
>> [v,d] = eig([2 -12;1 -5])
v =
0.9701 0.9487
0.2425 0.3162
d =
-1 0
0 -2
>>
在MATLAB中,计算矩阵A的特征值和特征向量的函数是eig(A),常用的调用格式有5种:
(1) E=eig(A):求矩阵A的全部特征值,构成向量E。
(2) [V,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。
(3) [V,D]=eig(A,'nobalance'):与第2种格式类似,但第2种格式中先对A作相似变换后求矩阵A的特征值和特征向量,而格式3直接求矩阵A的特征值和特征向量。(4) E=eig(A,B):由eig(A,B)返回N×N阶方阵A和B的N个广义特征值,构成向量E。
(5) [V,D]=eig(A,B):由eig(A,B)返回方阵A和B的N个广义特征值,构成N×N阶对角阵D,其对角线上的N个元素即为相应的广义特征值,同时将返回相应的特征向量构成N×N阶满秩矩阵,且满足AV=BVD。
【参考:https://blog.csdn.net/ssdxiao01/article/details/6641180 】
expm()
>> A = [0 -6 -1;6 2 -16; -5 20 -10];
>> x0 = [1 1 1]' ;
>> X=[];
>> for t = 0:.01:1
X = [X expm(t*A)*x0];
end
>> plot3(X(1,:),X(2,:),X(3,:),'-o');
>> xlabel('x_1'); ylabel('x_2');
>> zlabel('x_3'); grid on;
>> axis tight square;
>> set(gcf,'color',[1 1 1])
>>