matlab用QR方法怎麼求特徵值把程式寫出來,謝謝

2021-03-07 07:53:13 字數 4991 閱讀 6516

1樓:匿名使用者

function l = rqrtz(a,m)%qr演算法求矩陣全部特徵值

%已知矩陣:a

%迭代步數:m

%求得的矩陣特徵值:l

a = hess(a);

for i=1:m

n = size(a);

n = n(1,1);

u = a(n,n);

[q,r]=qr(a-u*eye(n,n));

a = r*q+u*eye(n,n);

l = diag(a);

end------------------------------------

a=[0 5 0 0 0 0;1 0 4 0 0 0;0 1 0 3 0 0;0 0 1 0 2 0;0 0 0 1 0 1;0 0 0 0 1 0]

a =0 5 0 0 0 01 0 4 0 0 00 1 0 3 0 00 0 1 0 2 00 0 0 1 0 10 0 0 0 1 0>> rqrtz(a,50)

ans =

-3.2030

3.2030

-1.8837

1.8837

-0.6167

0.6167

>> eig(a)

ans =

-3.3243

3.3243

-1.8892

-0.6167

1.8892

0.6167

2樓:匿名使用者

看matlab幫助檔案,裡邊都有例程,電腦沒有安裝matlab,懶得安裝了,但是我知道幫助檔案裡有這個例子

3樓:言清韻柯北

前面的函式是求特徵值的函式,後面的是呼叫的例子和驗證functionl=

rqrtz(a,m)

%qr演算法求矩陣全部特徵值

%已知矩陣:a

%迭代步數:m

%求得的矩陣特徵值:la=

hess(a);

fori=1:mn=

size(a);n=

n(1,1);u=

a(n,n);

[q,r]=qr(a-u*eye(n,n));a=r*q+u*eye(n,n);l=

diag(a);

enda=[050

000;1040

00;010

300;0010

20;000

101;0000

10]a=

0500

0010

4000

0103

0000

1020

0001

0100

0010

>>rqrtz(a,50)

ans=

-3.2030

3.2030

-1.8837

1.8837

-0.6167

0.6167

>>eig(a)

ans=

-3.3243

3.3243

-1.8892

-0.6167

1.8892

0.6167

matlab中如何用qr函式求特徵值和特徵向量,矩陣是mxn

4樓:匿名使用者

1.矩陣qr分解直接用函式qr就可以了。qr函式適用於不是方針的矩陣分解。

2.用法[q,r]=qr(a)得到q是mm矩陣,r是mn.

3.排列大小的可以採用sort函式。

具體情況建議開啟matlab 幫助瀏覽器詳細看qr函式的用法。

5樓:電燈劍客

先不要考慮matlab了, 先回去複習一下線性代數, 單個的矩陣但不是方陣何談特徵值

即使是方陣, qr分解也不是直接用來求特徵值和特徵向量的.

儘管求所有特徵值和特徵向量最重要的演算法是qr演算法, 數學上可以解釋為反覆做qr分解, 但實際上也並不該qr這個函式來實現.

當然, 如果你一定想用qr, 那麼可以反覆迭代[q,r]=qr(a); a=q'*a*q;

直到a收斂到對角塊不超過2階的分塊上三角陣.

至於求特徵向量, 對每個特徵值各解一次方程組就行了.

就講這些, 即使你看不明白, 我也不會繼續回答了, 這純粹是浪費時間.

a=(2,-1,0;-1,2,-1;0,-1,2) 在matlab中按雅克賓方法和qr方法求矩陣特徵值 帶程式 謝謝

6樓:白楊龍

雅克賓方法

clc;

clear all;

%矩陣a

a=[2 ,-1,0;-1,2,-1;0,-1,2]%取矩陣a的維數

n=max(size(a));

%迭代誤差

eps=1e-5;

r=1;

%最大迭代次數為100

m=100;

k=1;

%小於迭代次數或迭代誤差進入計算

while r>=eps & k<=m

p=1;

q=1;

amax=0;

for i=1:n

for j=1:n

if i~=j & abs(a(i,j))>amaxamax=abs(a(i,j));

p=i;

q=j;

endend

endr=amax;%計算當前迭代誤差

%以下為構造正交矩陣u

l=-a(p,q);

u=(a(p,p)-a(q,q))/2;

if u==0

w=1;

else

w=sign(u)*l/sqrt(l*l+u*u);

ends=-w/sqrt(2*(1+sqrt(1-w*w)));

c=sqrt(1-s*s);

u=eye(n);

u(p,p)=c;

u(q,q)=c;

u(p,q)=-s;

u(q,p)=s;

%旋轉計算

a=u'*a*u%顯示每步計算a的計算結果k=k+1;

endif k>m

disp('a矩陣不收斂');

else

for i=1:n

d(i)=a(i,i);

enddisp('a特徵值為:');

dend

qr方法以a=[1 -1 2;-2 0 5;6 -3 6]為例不改了,自己改

構造矩陣

>>a=[1 -1 2;-2 0 5;6 -3 6]a =1 -1 2

-2 0 5

6 -3 6

將矩陣a變換為相似的擬上三角矩陣(即為上hessenberg矩陣)>>h=hess(a)

h =1.0000 2.2136 -0.

31626.3246 4.8000 -1.

40000 6.6000 1.2000對h矩陣作qr分解:

>>[q,r]=qr(h)

q =-0.1562 0.2101 -0.

9651-0.9877 -0.0332 0.

15260 0.9771 0.2127r =-6.

4031 -5.0868 1.43220 6.

7546 1.15260 0 0.3468作50次迭代計算(具體迭代次數可依具體實驗矩陣進行)>>for i=1:

50b=r*q;

[q,r]=qr(b);

end>>r*q

ans =

5.0000 7.4864 0.

5929-0.0000 3.0000 4.

96000 0.0000 -1.0000由以上結果可得到迭代計算的特徵值為,可見基本qr法的迭代精度還是很高的.

急求,matlab中, 已知矩陣a,已完成對a的qr分解,下一步求a的特徵值和特徵向量,程式怎麼編寫?

7樓:匿名使用者

樓主的問題是自己寫程式完成矩陣的qr分解,既然是迭代實現qr分解,就與矩陣論中說的計算特徵值和特徵向量的方法有些區別了。大體的步驟應該是首先將矩陣化成雙對角矩陣,然後追趕計算特徵值和特徵向量,程式**可以參考 徐士良編的 常用數值演算法 c語言描述

8樓:匿名使用者

求特徵向量用matlab中eig命令

第三個問題應該是階段誤差的原因吧!

用qr方法怎樣求矩陣的特徵值?

9樓:匿名使用者

對稱矩陣用雅可比迭代法求特徵值;一般矩陣 (非對稱矩陣) 用qr迭代法求特徵值。看下面例題。

10樓:匿名使用者

a=q r

a1=r q=q1 r1

a2=r1 q1=q2 r2

...注意所有的a,a1,...相似(a1=rq=q^t a q =q^ a q),具有相同的特徵值。

在一定條件下最終收斂到一個上三角陣,把對角線上的元拿出來就是特徵值。事實上,因為a是對稱矩陣,a1=q1^t a q 所以a1是對稱陣(顯然a1^t=a1),以此類推,a2,a3...都是對稱陣。

所以當a是對稱陣時an收斂於對角陣(既是上三角陣又是對稱陣,所以是對角陣),對角線上的元素就是特徵值。

matlab中對復對稱矩陣a qr分解結束後,怎樣求特徵值特徵向量? 30

11樓:在野之雲

轉換陣就是特徵向量組成的呀。直接把轉換陣拿來就是特徵向量

12樓:幻想波波

兄弟做任務來了,給一個答案,我就做完了,謝謝!

用matlab求切線,怎麼用matlab在曲線上畫切線

求原函式在 的切線?我假設是函式在點 x0,y0 切線 1對原函式進行一專階求導 matlab實現diff n,t,1 屬實現 2把 x0,y0 代入求導後的方程,得到斜率 matlab實現n x0 t 1307.7011 1 exp 1.5422 0.72423 t 3寫出切線方程並化簡 matl...

怎麼用matlab畫散點圖,用matlab畫散點圖

一般有兩種方法 一 scatter 1.scatter x,y x和y是資料向量,以x中資料為橫座標,以y中資料位縱座標描繪散點圖,點的形狀預設使用圈。例子 x 1 10 y x rand size x scatter x,y 2.scatter filled 描繪實心點。3.scatter3 x,...

怎麼用MATLAB程式設計求方程組的解

b 4 3 9 8 a1 a b r rref a1 r 1.0000 0 0 0 1.4841 0 1.0000 0 0 0.6816 0 0 1.0000 0 0.5337 0 0 0 1.0000 1.2429 最後一列為方程的抄解,跟樓上的那位仁兄的好像有點差別,不過我把我的解代入原方程檢驗...