矩阵特征值归一化

更新时间:2024-03-19 02:46:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

>> x=[1,1/2,4,3,3;2,1,7,5,5;1/4,1/7,1,1/2,1/3;1/3,1/5,2,1,1;1/3,1/5,3,1,1] x =

1.0000 0.5000 4.0000 3.0000 3.0000 2.0000 1.0000 7.0000 5.0000 5.0000 0.2500 0.1429 1.0000 0.5000 0.3333 0.3333 0.2000 2.0000 1.0000 1.0000 0.3333 0.2000 3.0000 1.0000 1.0000

>> [V D]=eig(x) V =

-0.4658 0.4419 + 0.2711i 0.4419 - 0.2711i -0.3672 + 0.2415i -0.3672 - 0.2415i

-0.8409 0.7773 0.7773 0.8575 0.8575

-0.0951 -0.0200 - 0.1557i -0.0200 + 0.1557i -0.0190 + 0.0064i -0.0190 - 0.0064i

-0.1733 -0.0261 + 0.0783i -0.0261 - 0.0783i -0.0737 - 0.2146i -0.0737 + 0.2146i

-0.1920 -0.2829 + 0.1247i -0.2829 - 0.1247i 0.0748 + 0.1185i 0.0748 - 0.1185i D =

5.0721 0 0 0 0

0 -0.0307 + 0.6008i 0 0 0

0 0 -0.0307 - 0.6008i 0 0

0 0 0 -0.0053 + 0.0548i 0

0 0 0 0 -0.0053 - 0.0548i

>> sum(abs(V).^2)

ans =

1.0000 1.0000 1.0000 1.0000 1.0000

>> z=V[:;1] ??? z=V[:;1] |

Error: Unbalanced or unexpected parenthesis or bracket.

>> rats(x)

ans =

1 1/2 4 3 3 2 1 7 5 5 1/4 1/7 1 1/2 1/3 1/3 1/5 2 1 1 1/3 1/5 3 1 1

>> v1=v./norm(v,2);

??? Undefined function or variable 'v'.

>> v1=V./norm(V,2); >> rats(v1)

ans =

-186/745 124313/524923 124313/524923 -4165/21165 -4165/21165 -201/446 912/2189 912/2189 256/557 256/557 -21/412 -2780/259235 -2780/259235 -587/57526 -587/57526 -30/323 -7198/514657 -7198/514657 -3130/79189 -3130/79189 -158/1535 -9494/62620 -9494/62620 10155/253198 10155/253198

>> x=[v1] x =

-0.2497 0.2368 + 0.1453i 0.2368 - 0.1453i -0.1968 + 0.1294i -0.1968 - 0.1294i

-0.4507 0.4166 0.4166 0.4596 0.4596

-0.0510 -0.0107 - 0.0835i -0.0107 + 0.0835i -0.0102 + 0.0034i -0.0102 - 0.0034i

-0.0929 -0.0140 + 0.0420i -0.0140 - 0.0420i -0.0395 - 0.1150i -0.0395 + 0.1150i

-0.1029 -0.1516 + 0.0668i -0.1516 - 0.0668i 0.0401 + 0.0635i 0.0401 - 0.0635i

>>MATLAB求矩阵A的特征值只需要一条语句: [V,D] = eig(A) 其中D是一个对角矩阵,对角线上的元素是特征值,V的每一列就是对应的归一化特征向量。 norm(x,2)是求向量x的欧几里得长度,实际上就是向量x各个元素平方和然后开方。 运行不了估计是v或者x为空,如果在这里是对向量v进行归一化,应该把x改为v, 即v1=v./norm(v,2);

先给你说个土的,就是Matlab的内置算法,可以算所有特征值和特征向量(没什么技术含量的,也没有什么思想,只是工程学上的纯应用罢了)。 A=[1 2 1/4 4 1/2;1/2 1 1/5 3 1/3;4 5 1 7 3;1/4 1/3 1/7 1 1/5; 2 3 1/3 5 1]; [V,D]=eigs(A) 结果: V = 0.2532 -0.1274 - 0.1409i -0.1274 + 0.1409i -0.0586 + 0.3893i -0.0586 - 0.3893i 0.1608 -0.1373 + 0.0246i -0.1373 - 0.0246i 0.2097 - 0.1984i 0.2097 + 0.1984i 0.8616 0.9116 0.9116 0.7441 0.7441 0.0774 0.0024 + 0.0881i 0.0024 - 0.0881i -0.0832 + 0.0314i -0.0832 - 0.0314i 0.4020 0.0918 - 0.3118i 0.0918 + 0.3118i -0.3444 - 0.2854i -0.3444 + 0.2854i D = 5.1374 0 0 0 0 0 0.0088 - 0.8328i 0 0 0 0 0 0.0088 + 0.8328i 0 0 0 0 0 -0.0775 - 0.0956i 0 0 0 0 0 -0.0775 + 0.0956i 所以最大特征值是5.1374,对应特征向量为[0.2532 0.1608 0.8616 0.0774 0.4020]‘。 再给你提供一种很专业的数值算法“幂法”,这是专门用来算矩阵最大特征值的经典算法。我大学里《数值分析》课程教授专门花了半节课讲解过这个算法和它的原理,“幂法”一出手,绝对是专业级的解答!“幂法“的算法过程其实很简单,就是拿一个向量,不停地用A乘,最后就会慢慢趋近于最大特征值对应的特征向量。“幂法”在矩阵拥有唯一最大特征值的前提下,迭代足够多次,就一定能收敛的,可以用线性代数的矩阵相似性原理证明。 我这段代码迭代了100次,取了随便一个向量[1 0 0 0 0]'作为初始值(一般是取个随机向量,其实没啥大差别)。“幂法”在矩阵阶数很高的情况下,比内置算法要快得多(一个5维矩阵是看不出速度上差别的)! A=[1 2 1/4 4 1/2;1/2 1 1/5 3 1/3;4 5 1 7 3;1/4 1/3 1/7 1 1/5; 2 3 1/3 5 1]; v=[1 0 0 0 0]'; for i = 1:100 v=A*v; v=v/sqrt(sum(v.^2)); end lamda=sqrt(sum((A*v).^2))/sqrt(sum(v.^2)) v 结果: lamda = 5.1374 v = 0.2532 0.1608 0.8616 0.0774 0.4020 最大特征值5.1374,对应特征向量[0.2532 0.1608 0.8616 0.0774 0.4020]‘。 可以看到,迭代了100次后,\幂法\和直接算法得出了完全一样的结果!用“幂法”,显得算法思想非常的清晰,不像用内置的eigs函数,你也不知道Matlab怎么算出来的,是不?

[v,d]=eig(a) eig函数可以矩阵的计算特征值并以向量形式存放 其中V的列向量是矩阵的特征向量,d的对角线元素是矩阵的特征值 最大的特征值为第一个,对应的第一列为最大特征值的特征向量 例如: e=max(eig(A));%最大特征值 v=null(A-e*eye(length(A)));%e对应特征向量 v1=v./norm(x,2);%归一化

本文来源:https://www.bwwdw.com/article/s5v8.html

Top