① MATLAB實現用冪法/反冪法求矩陣的最大/最小特徵值問題(有追加!)。
%A為矩陣;ep為精度要求;N為最大迭代次數;m為絕對值最大的特徵值;u為對應最大特徵值的特徵向量。
A=[2,-1,0;-1,2,-1;0,-1,2];
N=100;
ep=1e-6;
n=length(A);
u=ones(n,1);
index=0;
k=0;
m1=0;
while k<=N
v=A*u;
m=max(abs(v));
u=v/m
if abs(m-m1)<ep
index=1;
break;
end
m1=m;
k=k+1;
end
m %特徵值
u/norm(u) %特徵向量
[vv,ll]=eig(A); %matlab求解的特徵值和特徵向量
[mm,ii]=max(abs(diag(ll)));
m_matlab=mm
v_matlab=vv(:,ii)
這個是你的冪法,你的方法基本沒有問題。
② 各位朋友,怎麼利用MATLAB用冪法求最小特徵值以及它的特徵向量。
function [lam,u1]=MinMulEig(A,v0,error)
%A為矩陣,v0為初始向量
%lam為最小特徵值,u為對應的特徵向量(列向量),error為控制精度
%求按模最小特徵值
[~,i]=max(abs(v0));
lam0=v0(i);
u0=v0/lam0;
control=0;
while (control==0)
v1=A\u0;
[~,i]=max(abs(v1));
lam1=v1(i);
u1=v1/lam1;
if abs(1/lam1-1/lam0)<error
control=1;
end
u0=u1;v0=v1;lam0=lam1;
end
lam=1/lam1;
以上為函數文件,在命令窗口輸入:
>> A=[-12 3 3;3 1 -2;3 -2 7];
>> v0=[1,1,1]';
>> [l,u]=MinMulEig(A,v0)
③ matlab 中用冪法求主特徵值和特徵向量
pmethod.m
function
[l,v,s]=pmethod(A,x0,eps)
if
nargin==2
eps
=
1.0e-6;
end
v
=
x0;
%v為主特徵向量
M
=
5000;
%迭代步數限制
m
=
0;
l
=
0;
for(k=1:M)
y
=
A*v;
m
=
max(y);
%m為按模最大的分量
v
=
y/m;
if(abs(m
-
l)<eps)
l
=
m;
%到所需精度,退出,l為主特徵值
s
=
k;
%s為迭代步數
return;
else
if(k==M)
disp('迭代步數太多,收斂速度太慢!');
l
=
m;
s
=
M;
else
l
=
m;
end
end
end
④ 如何用matlab求矩陣最大特徵值的特徵向量
用函數[V,D]=eig(A)
矩陣D的對角元存儲的是A的所有特徵值,
而且是從小到大排列的
矩陣V的每一列存儲的是相應的特徵向量
所以應該是V的最後一個列
就是最大特徵值的特徵向量
⑤ 用matlab求解矩陣的最大特徵值及對應的正規化特徵向量並做一致性檢驗。
給你提供一種很專業的數值演算法「冪法」,這是專門用來算矩陣最大特徵值的經典演算法。「冪法「的演算法過程其實很簡單,就是拿一個向量,不停地用A乘,最後就會慢慢趨近於最大特徵值對應的特徵向量。「冪法」在矩陣擁有唯一最大特徵值的前提下,迭代足夠多次,就一定能收斂的,可以用線性代數的矩陣相似性原理證明。
我這段代碼迭代了100次,取了隨便一個向量[1 0 0 0 0 0]'作為初始值(一般是取個隨機向量,其實沒啥大差別)。
A=[1 1 1/4 3 3 3 ;1 1 1/4 3 3 3 ;4 4 1 5 5 5;1/3 1/3 1/5 1 2 2; 1/3 1/3 1/5 1/2 1 3;1/3 1/3 1/5 1/2 1/3 1];
v=[1 0 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 =
6.3526
v =
0.3242
0.3242
0.8571
0.1612
0.1414
0.0963
你會發現,和內置演算法的eigs命令求出的結果是一樣的。
>>eigs(A)
ans =
6.3526
0.0737 - 1.4350i
0.0737 + 1.4350i
-0.2500 - 0.4319i
-0.2500 + 0.4319i
-0.0000
最大特徵值同樣是6.3526。
⑥ 數模作業 計算矩陣的最大特徵值和對應的歸一化特徵向量 急急急~ 用matlab算 要編程過程要答案
先給你說個土的,就是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怎麼算出來的,是不?