資源描述:
《矩陣LU分解求逆詳細(xì)分析與C語言實現(xiàn).doc》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、題目要求給定一個多維矩陣,實現(xiàn)該矩陣的求逆運算。1、理論分析矩陣的一種有效而廣泛應(yīng)用的分解方法是矩陣的LU三角分解,將一個n階矩陣A分解為一個下三角矩陣L和一個上三角矩陣U的乘積。所以首先對矩陣進行三角分解,這里采用Doolittle分解,即分解為一個下三角矩陣(對角元素為1),和一個上三角矩陣的乘積。再進行相應(yīng)的處理。所以,矩陣求逆的算法流程可表述如下:圖1矩陣求逆流程圖1)進行LU分解;2)對分解后的L陣(下三角矩陣)和U陣(上三角矩陣)進行求逆;;3)L陣的逆矩陣和U陣的逆矩陣相乘,即可求得原來矩
2、陣的逆。即:(1)1.1矩陣的LU分解若n階方陣的各階順序主子式不等于零,即:(2)則A的LU分解存在且唯一。(3)由矩陣的乘法原理,可推導(dǎo)出LU分解的迭代算法(4)(5)(6)(7)矩陣的LU分解是一個循環(huán)迭代的過程,U矩陣是從第1行迭代到第n行,而L矩陣則是從第1列迭代到第n列,且U矩陣先于L矩陣一個節(jié)拍。1.2L矩陣和U矩陣求逆首先假設(shè)下三角矩陣L的逆矩陣為,不失一般性,考慮4階的情況,利用,有:(1),,;(2)(3)(4)。從而求得下三角矩陣L的逆矩陣R式如下:,(8)上三角矩陣U的逆矩陣可以
3、由下式得到:。,(9)矩陣求逆是一個迭代的過程,依次循環(huán),迭代次,求出整個逆矩陣。其中U矩陣的循環(huán)迭代時按行順序,列倒序進行,L矩陣的循環(huán)迭代按列順序,行順序進行,直到計算出整個矩陣的所有結(jié)果為止。1.3矩陣相乘上三角矩陣U的逆矩陣u與下三角矩陣L的逆矩陣相乘,最終得到原始矩陣A的逆矩陣,完成整個矩陣求逆的過程。對于n階矩陣相乘的迭代形式可表示如下:(10)1.4實例分析例:給定一4階矩陣,通過LU分解求逆矩陣。解:算法過程為:,第一步:求LU矩陣設(shè),通過(4)~(7)式可逐步進行矩陣L和U中元素的計算
4、,如下所示:經(jīng)迭代計算,最后得到L和U矩陣為:第二步:求L和U矩陣的逆,(1)求U矩陣的逆由式(9)可得矩陣U的逆的各元素計算如下:(2)求L矩陣的逆由(8)式可得L矩陣的逆的各元素計算如下所以得到L和U的逆矩陣為:(3)求A的逆矩陣由式(10)可計算得到矩陣A的逆,如下:由程序計算出的結(jié)果如下:2、C語言程序設(shè)計及測試2.1算法c程序?qū)崿F(xiàn)#include#include#defineN4voidmain(){floata[N][N];floatL[N][N],U[
5、N][N],out[N][N],out1[N][N];floatr[N][N],u[N][N];memset(a,0,sizeof(a));memset(L,0,sizeof(L));memset(U,0,sizeof(U));memset(r,0,sizeof(r));memset(u,0,sizeof(u));intn=N;intk,i,j;intflag=1;floats,t;////////////////////inputamatrix////printf("inputA=");for(i
6、=0;i7、n;i++)a[i][0]=a[i][0]/a[0][0];//計算L矩陣的第1列for(k=1;k8、}for(i=0;ij){L[i][j]=a[i][j];U[i][j]=0;}//如果i>j,說明行大于列,計算矩陣的下三角部分,得出L的值,U的//為0else{U[i][j]=a[i][j];if(i==j)L[i][j]=1;//否則如果i