1、1题目要求给定一个多维矩阵,实现该矩阵的求逆运算。1、理论分析矩阵的一种有效而广泛应用的分解方法是矩阵的LU三角分解,将一个n阶矩阵A分解为一个下三角矩阵L和一个上三角矩阵U 的乘积。所以首先对矩阵进行三角分解,这里采用Doolittle分解,即分解为一个下三角矩阵(对角元素为1) ,和一个上三角矩阵的乘积。再进行相应的处理。所以,矩阵求逆的算法流程可表述如下:输入矩阵 A矩阵的 L U 分解L 矩阵求逆 U 矩阵求逆矩阵 U 的逆乘以 L 的逆得到 A 的逆矩阵UL图 1 矩阵求逆流程图1)进行 LU 分解;22)对分解后的 L 阵(下三角矩阵)和 U 阵(上三角矩阵)进行求逆;;3)L 阵
2、的逆矩阵和 U 阵的逆矩阵相乘,即可求得原来矩阵的逆。即:111()ALL(1)1.1 矩阵的 LU 分解若 n 阶方阵 的各阶顺序主子式不等于零,即:nCA*),2,1(021nkakak (2)则 A 的 LU 分解 存在且唯一。ALU111111111rnrrrnnrnrnr rrnnr naaaaUUL L (3)由矩阵的乘法原理, 可推导出 LU 分解的迭代算法(400,(,12,1),jjUan3)0,(,12,1),iial nu(5)11,(0,12,;,),rjikjrrj jkjraluualunn (6)1,(0,12,;1,)riikrirralulnirn (7)矩阵
3、的 LU 分解是一个循环迭代的过程, U 矩阵是从第 1 行迭代到第n 行, 而 L 矩阵则是从第 1 列迭代到第 n 列, 且 U 矩阵先于 L 矩阵一个节拍。1.2 L 矩阵和 U 矩阵求逆首先假设下三角矩阵 L 的逆矩阵为 ,不失一般性,考虑 4 阶的情况,l利用 ,有:LlI(1) , , ;101l12l13lL(2) 1010();lL(3) 222ll(4) 。3031030()rr4从而求得下三角矩阵L的逆矩阵R式如下:, 11,(),0ijjiijkikiljrrlj(8)上三角矩阵U的逆矩阵可以由下式得到:。, 11,(),0jiji jkikjjujuUj(9)矩阵求逆是
4、一个迭代的过程,依次循环, 迭代 次, 求出整个1n逆矩阵。其中U矩阵的循环迭代时按行顺序,列倒序进行,L矩阵的循环迭代按列顺序,行顺序进行,直到计算出整个矩阵的所有结果为止。1.3 矩阵相乘上三角矩阵U的逆矩阵u与下三角矩阵L的逆矩阵 相乘, 最终得到原l始矩阵A的逆矩阵 , 完成整个矩阵求逆的过程。对于n11AULul阶矩阵相乘的迭代形式可表示如下:1nkjiuilkj(10)51.4 实例分析例:给定一4阶矩阵 ,通过LU分解求逆矩阵 。4215870369A 1A解:算法过程为:,1111()ALULul第一步:求LU矩阵设 ,0 001020311 1202 2233133000LU
5、UULL 通过(4)(7)式可逐步进行矩阵L和U 中元素的计算,如下所示:6012300102031020301102213103(),U4,1,5,(L)846, , 1.,4()73,10LaaUaaLLUaL计 算 的 对 角的 第 一 行的 第 一 列的 第 二 行212101331220213333232023125,()()(82)5.3U120,65L1()(4aULLaUL的 第 二 列( 的 第 三 行 )( 的 第 三 列 )3303132 5.10)1.2,3U90.5;aU( 的 第 四 行 )经迭代计算,最后得到L和U矩阵为:第二步:求L和U矩阵的逆 ,ul711,;
6、uUlL(1)求U矩阵的逆 1 101023 010231 123 23425000 0.25uuuUu 由式(9)可得矩阵U的逆的各元素计算如下: 001010112 12201023 233(),41()(),3436(3).50.5()(.).12411(4)4)(4uuUuuUuuUu12022313, ,121301302303()(0)1)(2(2)54).4Uuu 03u(2)求L 矩阵的逆 1 10 01 1202 202313 3130 0021.5067.25llL llL 由(8)式可得L矩阵的逆的各元素计算如下8010102020210333312113132123()
7、, ,()3,5).()1.967() ,().8().25;llLllLlllllllLl3=,(4)所以得到L和U的逆矩阵为:(3)求A的逆矩阵由式(10)可计算得到矩阵A的逆,如下:10.25.670.1254.100321. 320041.9670.83.518.34.6756735.2.254ul 由程序计算出的结果如下:92、 C 语言程序设计及测试2.1 算法 c 程序实现#include#include #define N 4void main() float aNN;float LNN,UNN,outNN, out1NN;float rNN,uNN;memset( a , 0
8、 , sizeof(a);memset( L , 0 , sizeof(L);memset( U , 0 , sizeof(U);memset( r , 0 , sizeof(r);memset( u , 0 , sizeof(u);int n=N;int k,i,j;int flag=1;float s,t;/input a matrix/printf(“ninput A=“);for(i=0;ij) Lij=aij; Uij=0;/如果ij,说明行大于列,计算矩阵的下三角部分,得出L的值,U的/为0else Uij=aij;if(i=j) Lij=1; /否则如果i=0;k-)s=0;for (j=k+1;j、整数矩阵2、小数矩阵12(2 ) 满秩矩阵1 整数矩阵的测试2 小数矩阵的测试13