求特征值的传统方法是令特征多项式| AE-A| = 0,求出A的特征值,对于A的任一特征值h,特征方程( aE- A)X= 0的所有非零解X即为矩阵A的属于特征值N的特征向量两者的计算是分割的,一个是计算行列式,另一个是解齐次线性方程组,且计算量都较大。使用matlab可以方便的计算任何复杂的方阵的特征值和特征向量:
matlab求行列式的值 MATLAB求行列式的值
1、首先需要知道计算矩阵的特征值和特征向量要用eig函数,可以在命令行窗口中输入 eig,查看一下eig函数的用法,如下图所示:
2、在命令行窗口中输入a=[1 2 3;2 4 5;7 8 9],按回车键之后,输入[x,y]=eig(a),如下图所示:
3、按回车键之后,得到了x,y的值,其中x的每一列值表示矩阵a的一个特征向量,这里有3个特征向量,y的对角元素值代表a矩阵的特征值,如下图所示:
4、步如果我们要取y的对角元素值,可以使用diag(y),如下图所示:
5、按回车键之后,可以看到已经取出y的对角线元素| 3 2 1|值,也就是a矩阵的特征值,如下图所示:
6、第六步我们也可以在命令行窗口 diag,可以看到关于diag函数的用法,如下图所示:
注意事项:
特征值和特征向量的应用:
1、可以用在研究物理、化学领域的微分方程、连续的或离散的动力系统中。例如,在力学中,惯量的特征向量定义了刚体的主轴。惯量是决定刚体围绕质心转动的关键数据;
3、的图像处理中的PCA方法,选取特征值的k个特征向量来表示一个矩阵,从而达到降维分析+特征显示的方法,还有图像压缩的K-L变换。再比如很多人脸识别,数据流模式挖掘分析等方面。
浮点数的计算精度导致的,在计算机中,矩阵(行列式)中的元素默认的话以双精度保存在计算机内存中,其精度是有限的,不能完全用人脑的逻辑来计算。
B = [-9 2 3 4 ; 1 -8 3 4 ; 1 2 -7 4; 1 2 3 -6;];
det(B) %会输出 -1/2814749767107,一个非常接近0的数,作为数值计算的结果已经足够了
B = single(B)
det(B) %会输出 -25/65536 .
det(B100) %就会输出0了.
想得出0的结果这里也提供一种方法:
B = [-9 2 3 4 ; 1 -8 3 4 ; 1 2 -7 4; 1 2 3 -6;];
x = eig(B)
1 2 0det_b = 1;
for i =1:length(x)
end
用到是 行列式的值等于对应矩阵的所有特征值的乘积这个结论.
按第三行展开得-1分情况:
y-x<0 x-y=0
MATLAB好像不能算行列式的值,我只知道用DET函数可以算N阶矩阵行列式的值,不知道是不是这样。
那么由矩阵秩的不等式
r(A) + r(B) - n ≤ r(A0 1 2 -1 4B) ≤ min(r(A), r(B))
可以得到 r(A) + 2 - 3 ≤1,
即r(A)≤2
根据所知的矩阵,直接用poly生成特征多项式,或用eig命令求出特征值,再用poly生成多项式,。如:
>> syms xa=magic(4);b=eig(a),d=poly(b),c=poly(a)
结果是:
b =
34.0000
8.9443
-8.9443
0.0000
d =
0.0010 -0.0340 -0.0800 2.7200 -0.0000
c =
0.0010 -0.0340 -0.0800 2.7200 -0.0000
c和d是一样的,也就是说,特征多项式就是:y=x^4-34x^3-8x^2+272x
使用matlab的符号计算功能即可。
使用到的函数:
det 求矩阵行列式
simplify 符号量化简
示例代码:
syms x
A=[1 2 0;2 2 -2;0 -2 3]%定义一个矩阵
simplify(det(A-eye(3)x))%求出并展示其特征多项式
运行结果为:
A =
2 2 -2
用eig函数求特征值,知道特征值后就可以用(x-a)(x-b)...(x-m)求出特征多项式出来
poly(X)
>> x=[1 2 3;4 5 6;7 8 9];
>> poly(x)
1.0000 -15.0000 -18.0000 -0.0000
a=[,,;,,;,,];poly(a)得到的ans=.-
这题感觉就像出题人随便给的,没什么技巧可言啊,只能用基本的方法,化成上三角矩阵(只要化成上三角就可以了,不需要化成对角),然后只看对角元。对角元的乘积就是行列式。
行列式=-483(用Matlab算的)
解: D =
r5-r2,r2-2r3,r4+3r3
0 6 11 4 5
-1 3 5 1 2
0 12 16 5 7
0 1 -1 1 4
r4-2r2,r2-6r1,r5-r1
0 0 -1 10 -19
-1 3 5 1 2
0 0 -6 -3 -3
0 0 -3 2 0
0 0 -1 10 -19
-1 3 5 1 2
0 0 0 -28 57
0 0 -1 10 -19
-1 3 5 1 2
交换行(2次)
-1 3 5 1 2
0 0 -1 10 -19
行列式 = -769 = -483.
-1 3 5 1 2
2 1 0 3 5 第4行减去第2行
=0 1 2 -1 4
-1 3 5 1 2
1 3 0 0 0
2 1 0 3 5 第2列减去第1列×3
=0 1 2 -1 4
2 -6 1 2 1
-1 6 5 1 2
1 0 0 0 0
2 -5 0 3 5 按第4行展开
=0 0 0 0 6 2 -1 4
-6 1 2 1
6 5 1 2
-5 0 3 5 (-1)^(1+4) 第1行减去第2行×2,第3行减去第2行×5
=13 0 -5 2
36 0 -9 -3
-5 0 3 5 (-1) 按第2列展开
=13 -5 2
36 -9 -3
-5 3 5 (-1) (-1)(2+2)第1列加上第3列×12,第2列减去第3列×3
=37 -11 2
0 0 -3
55 -12 5 (-1)按第2行展开
=(-1) (-3)(-1)^(2+3)( -3712 +5511)
= -483
所以求得行列式的值D= -483
2、对。你可以用第二个作为第三个的基础,这样可以加快速度。组代表平安保险和太平洋保险所覆盖的家庭;第二组代表投保家庭;第三组代表未投保家庭。
3、不用det函数,如何用matlab编写一个函数计算行列式的值?编写该程序,我们可以利用代数余子式方法求取矩阵行列式值。通过递归的方法进行计算。
可以
例:
>> det([x 1; 1 x])
x^2 - 1
>> solve(ar4-2r5,r5-3r2ns)
-1
1>>至于计算机到底是具体如何计算出这个数的,限于个人水平无法详述.
>>syms P A B
2 0 1 2 1>>S =[P, 0, 1200000000000, 0, 0, 0;0, P, 0, 2000000000000, 0, 0; B, 0, 12P, 0, 36000000000000, 0; A, B, 0, 20P, 0, 84000000000000;
1, 3, 6, 10, 15,21; 0, 1, 4, 10, 20, 35];
>> X=det(S);
>> Y=solve(X,'P')
Y =
。。。。。。
A=A-diag(diag(A))+diag([1,0,2])
行列式:det(Aans =)
转置:A'
求逆:inv(A)y-x≥0 y-x=0
特征值,特征向量:[V,D]=eig(A) % V的列向量是特征向量,D对角戏是特征值
求x:x=inv(A)[1,2,3]'
形成实系数多项式,则根向两种的复数根必须共轭成对;含复数的根向量所生成的多项式系数向量(如P)的系数有可能带在截断误数量级的虚部,此时可以采用取实部的- x^3 + 6x^2 - 3x - 10函数real来将此虚部滤掉。作如下:
1、用matlab求矩阵的秩。命令:rank(A),A代表所求的矩阵。英语单词rank表示秩。运算结果中的ans是answer(结果、)的缩写。
2、用matlab求矩阵的乘积,一般乘法:AB,A、B代表两个矩阵。
3、矩阵点乘:A.B,即两矩阵的对应项相乘。
4、三、用matlab求矩阵的逆矩阵,命令:inv(A)或A^-1,inv是英语单词inverseones(a,k) 生成a阶全1方阵(逆向)的缩写。
5、用matlab求行列式的值,命令:det(A),det是英文单词determinant(行列式)的缩写。
版权声明:本文内容由互联。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发 a13828211729@163.com 邮箱删除。