C語言實現逆冪法求矩陣解特徵值

2021-10-25 03:18:42 字數 2399 閱讀 5790

實驗結果

逆冪法用於計算非奇異陣a

aa的按模最小的特徵值和特徵向量。

實際計算中,可以構造以下迭代格式:

l_k} = }\\ u = _k}\\ = \max )_i}\\ = /\\ \end \quad(1 < = i < = n)

⎩⎪⎪⎪⎨⎪

⎪⎪⎧​

lyˉ​

k​=z

k−1​

uyk​

=yˉ​

k​mk

​=max(yk

​)i​

zk​=

yk​/

mk​​

(1<=i

<=n

)其中l

ll是下三角矩陣,u

uu是上三角矩陣, a−1

}a−1的最大特徵值是1λn

\frac}}

λn​1​,若

0

n∣n+1∣

,k→∞

0 < || < |}|,k \to \infty 0n​

∣n+1​

∣,k→

∞ \to \frac}}\\ \to /\max () \end

4&1&4\\ 1&&1\\ 4&1& \end

⎣⎡​414

​110

1​41

10​⎦

⎤​

#ifndef npowerway_h_included

#define npowerway_h_included

#endif

// npowerway_h_included

#include

#include

#include

#define maxsize 100

#define e 1e-6

double a[maxsize]

[maxsize]

;double l[maxsize]

[maxsize]

;double r[maxsize]

[maxsize]

;double t[maxsize]

[maxsize]

;double z[maxsize]

;double z1[maxsize]

;double z2[maxsize]

;double z3[maxsize]

;int n;

//矩陣尺寸大小

double m;

void

initmatrix()

//for

(i=0

;i)for

(j=0

;j(i

l[i]

[j]=0;

if(i>j)

r[i]

[j]=0;

}}void

doolittle()

for(i=k+

1;i)//此處i是從k+1開始迴圈,若從0}}

void

npowerway1()

for(i=n-

1;i>=

0;i--

)for

(i=0

;i) z[i]

=z3[i]

; max=z[0]

;for

(i=0

;i)//尋找z的優勢分量

printf

("第%d次迭代後特徵值為:%lf\n"

,k,1

/max+m)

;printf

("第%d次迭代後歸一化z向量為:\n"

,k);

for(i=

0;i)//z向量歸一化處理

printf

("\n");

int flag=0;

for(i=

0;i(fabs

(z[i]

-z1[i]

)flag++;if

(flag==n)}}

void

input()

void

print()

printf

("上三角矩陣r:\n");

冪法求矩陣最大特徵值的近似解(C 實現)

數字影象處理領域中經常會要求某畫素矩陣的最大特徵值。在處理攝像頭資料的時候,遇到過這個問題。本來用matlab是可以很快解決的。幾行 而已。但是程式要寫入mcu中,matlab就無能為力了。並且本人不熟悉matlab函式向c 的轉化。網上找不到直接可用的c 於是查詢資料自己寫了乙個。冪法的數學推導就...

c語言實踐 數字特徵值

這題的要求是這樣的 這題我沒做出來,我大概思路是這樣的,根據輸入的數字,把這個數字的每一位都分離出來,然後判斷奇數還是偶數,再判斷序是奇數還是偶數,最後兩個奇偶性比較,輸出1還是0,這個輸出的1和0該怎麼儲存,以及最後怎麼轉化為十進位制呢?卡住了。最近又想了一下,做出來了。int main else...

C語言實現逆波蘭表示法(棧)

逆波蘭表示法是一種將運算子寫在運算元後面的描述程式 算式 的方法。舉個例子,我們平常用中綴表示法描述的算式 1 2 5 4 改為逆波蘭表示法之後則是12 54 相較於中綴表示法,逆波蘭表示法的優勢在於不需要括號 主要使用了棧的資料結構 現在我有式子 12 54 1 2先壓入棧,遇到運算子後,把 1 ...