怎么用Matlab求矩阵的特征值和特征向量
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了怎么用Matlab求矩阵的特征值和特征向量相关的知识,希望对你有一定的参考价值。
具体步骤分析如下:
1、第一步我们首先需要知道计算矩阵的特征值和特征向量要用eig函数,可以在命令行窗口中输入help 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的对角线元素值,也就是a矩阵的特征值,如下图所示:
6、第六步我们也可以在命令行窗口help diag,可以看到关于diag函数的用法,如下图所示:
扩展资料:
MATLAB是美国MathWorks公司出品的商业数学软件,用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,主要包括MATLAB和Simulink两大部分。
MATLAB是matrix&laboratory两个词的组合,意为矩阵工厂(矩阵实验室)。是由美国mathworks公司发布的主要面对科学计算、可视化以及交互式程序设计的高科技计算环境。它将数值分析、矩阵计算、科学数据可视化以及非线性动态系统的建模和仿真等诸多强大功能集成在一个易于使用的视窗环境中,为科学研究、工程设计以及必须进行有效数值计算的众多科学领域提供了一种全面的解决方案,并在很大程度上摆脱了传统非交互式程序设计语言(如C、Fortran)的编辑模式,代表了当今国际科学计算软件的先进水平。
参考资料:百度百科——MATLAB
参考技术A eig函数直接可以求特征值和特征向量在MATLAB中,计算矩阵A的特征值和特征向量的函数是eig(A),常用的调用格式有5种:
E=eig(A):求矩阵A的全部特征值,构成向量E。
[V,D]=eig(A):求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量。
[V,D]=eig(A,'nobalance'):与第2种格式类似,但第2种格式中先对A作相似变换后求矩阵A的特征值和特征向量,而格式3直接求矩阵A的特征值和特征向量。
E=eig(A,B):由eig(A,B)返回N×N阶方阵A和B的N个广义特征值,构成向量E。
[V,D]=eig(A,B):由eig(A,B)返回方阵A和B的N个广义特征值,构成N×N阶对角阵D,其对角线上的N个元素即为相应的广义特征值,同时将返回相应的特征向量构成N×N阶满秩矩阵,且满足AV=BVD。本回答被提问者采纳
关于MATLAB自己编程求解特征值的问题?(比如QR法,幂法,牙可比跌代法,等)请教高手
小弟第一次在百度上问这样的问题,这个题目难度蛮大,我搞了蛮久都没有头绪,不知道有没有高手会,帮一下忙,小弟在这里谢谢了
先谢谢您的热情回答,但那个网站我也看过,问题是那个程序没有通用性,只能够求解他给的那个矩阵,对别的矩阵就不管用了,不管怎样,还是很谢谢您!
A=[190 66 -84 30; 66 303 42 -36; 336 -168 147 -112; 30 -36 28 291];
X=[1 1 1 1]';%初值,随便设定啦
lambda=0;%最大特征值的初值
for k=1:100 %循环次数自己定,也可以用while
Y=A*X;%开始迭代了
m=max(abs(Y));
dc=abs(lambda-m);
Y=(1/m)*Y;
dv=norm(X-Y);
err(k)=max(dc,dv);
X=Y;
lambda=m;
end
max_lamdba=m%最大的特征值
V=X%特征向量
plot(err)%看看误差的啦
运行结果:
max_lamdba = 343.0000
V =
0.3333
1.0000
-0.0000
-0.5000
可以用eig验证:
>> eig(A)
ans =
1.0e+002 *
1.4700 + 1.9600i
1.4700 - 1.9600i
2.9400
3.4300 就是它!!!
【1*】如果看着费劲,还有一个简捷的
A=[190 66 -84 30; 66 303 42 -36; 336 -168 147 -112; 30 -36 28 291];
X=[1 1 1 1]';%初值,随便设定啦
for k=1:100 %循环次数自己定,也可以用while
Y=A*X;%开始迭代了
m=max(abs(Y));
Y=(1/m)*Y;
X=Y;
end
max_lamdba=m%最大的特征值
V=X%特征向量
【2】不会了,用这个将就吧,不好意思。
>> [V,D]=eig(A,'nobalance')
结果:
V =
-0.0000 + 0.4286i -0.0000 - 0.4286i 0.5000 -0.3333
0.0000 - 0.2143i 0.0000 + 0.2143i 0.3333 -1.0000
1.0000 + 0.0000i 1.0000 - 0.0000i 0.0000 -0.0000
0.0000 - 0.1429i 0.0000 + 0.1429i 1.0000 0.5000
D =
1.0e+002 *
1.4700 + 1.9600i 0 0 0
0 1.4700 - 1.9600i 0 0
0 0 2.9400 0
0 0 0 3.4300
即:A*V=V*D
【3】jacobi源代码,很慢啊
function [V,D]=jacobi1(A,epsilon)
%Input - A is an nxn matrix
% - epsilon the is tolerance
%Output - V is the nxn matrix of eigenvectors
% - D is the diagonal nxn matrix of eigenvalues
% NUMERICAL METHODS: Matlab Programs
% (c) 2004 by John H. Mathews and Kurtis D. Fink
% Complementary Software to accompany the textbook:
% NUMERICAL METHODS: Using Matlab, Fourth Edition
% ISBN: 0-13-065248-2
% Prentice-Hall Pub. Inc.
% One Lake Street
% Upper Saddle River, NJ 07458
%Initialize V, D, and parameters
D=A;
[n,n]=size(A);
V=eye(n);
state=1;
%Calculate row p and column q of the off-diagonal element
%of greatest magnitude in A
[m1 p]=max(abs(D-diag(diag(D))));
[m2 q]=max(m1);
p=p(q);
while (state==1)
%Zero out Dpq and Dqp
t=D(p,q)/(D(q,q)-D(p,p));
c=1/sqrt(t^2+1);
s=c*t;
R=[c s;-s c];
D([p q],:)=R'*D([p q],:);
D(:,[p q])=D(:,[p q])*R;
V(:,[p q])=V(:,[p q])*R;
[m1 p]=max(abs(D-diag(diag(D))));
[m2 q]=max(m1);
p=p(q);
if (abs(D(p,q))<epsilon*sqrt(sum(diag(D).^2)/n))
state=0;
end
end
D=diag(diag(D));
参考资料:http://zhidao.baidu.com/question/16057664.html?si=1
以上是关于怎么用Matlab求矩阵的特征值和特征向量的主要内容,如果未能解决你的问题,请参考以下文章