c语言矩阵的逆的程序,C语言求矩阵的逆矩阵
《C語言求矩陣的逆矩陣》由會員分享,可在線閱讀,更多相關《C語言求矩陣的逆矩陣(12頁珍藏版)》請在人人文庫網上搜索。
1、C語言求矩陣的逆矩陣班級: 自動化1604小組成員: 潘孝楓 金豆2017年4月作業要求:1. 用C語言編程;2. 查閱相關資料,至少了解三種以上的求矩陣的逆的方法;3. 倆人一組,提交大作業報告,含源代碼。方法一:用伴隨矩陣求矩陣的逆矩陣(潘孝楓)求矩陣的逆求伴隨矩陣求矩陣的行列式功能模塊輸入矩陣最主要的問題就是求解矩陣的逆矩陣,而且是一個動態矩陣1. 求解矩陣的伴隨矩陣,套用求行列式的函數 解決問題的關鍵是如何運用一個循環遞歸將求行列式的函數反復嵌套函數的分塊 1. 求矩陣的行列式的函數2. 求余子式的函數3. 求逆的函數#include #include #define N 9/默認行列。
2、式最大輸入階數為9float Fun(int n, float aNN );/定義行列式計算程序,n為行列式階數,a為矩陣a/*主程序*/ int main(void)int n ; /定義階數nint i, j, i1, j1,i2 ,j2 ; /定義循環變量float aNN , bNN , cNN; /定義數組,a為原始錄入數組,b為中間變量數組,用于提取與計算余子式,c為輸出結果數組float d; /定義a的行列式值printf(Input the order of matrix a:); /輸入a的階數scanf(%d,&n);printf(Input matrix a:n);/輸。
3、入矩陣afor( i = 0; i n; i+) for( j = 0; j n; j+)scanf(%f, &aij);d=Fun( n, a ); /計算a的行列式if(fabs(d)1e-6) /判斷a的行列式值是否為0printf(The determinant is not invertible!);/輸出“行列式值為0,不可逆 ” elseprintf(The determinant of a is %f,d); /非0繼續運算if(n=1)/階數為1的情況c00=1/d;else /階數大于1的情況for( i = 0; i =n-1; i+)for( j = 0; j = n-。
4、1; j+)for(i1=0, i2=0; i2n-1; i1+, i2+)for(j1=0, j2=0; j2n-1; j1+, j2+)if(i1 = i)i1+;if(j1 = j)j1+;bi2j2=ai1j1;/提取aij所對應的余子式到矩陣b中cji=pow( -1 , i + j ) * Fun( n - 1 , b)/d;/計算aij對應的代數余子式,存入矩陣c中并完成轉置printf(n);/輸出結果for(i=0;in;i+)for(j=0;jn;j+)printf(%10f,cij);printf(n);/*求行列式*/float Fun( int n, float aN。
5、N )/定義求矩陣行列式的程序,采用逐步降階求值float bNN;/定義矩陣b int i = 0, j = 0;/定義循環變量i,jfloat sum = 0;/定義行列式運算結果sumint c = 0,p = 0;/定義輔助變量c,pif(n = 1)/行列式階數為1函數直接返回a00值return a00;for(i = 0;i n; i+)/針對行列式第一列展開 for(c = 0;c n-1; c+)for(j = 0;j n-1;j+)if (c i)/判斷錄入數組b時行數值,如果c大于i,則在執行錄入數組a時行數下移一行,否則不執行數+1的操作 p = 0; else p =。
6、 1;bcj = ac+pj+1;/取出aij第一列每個元素對應的余子式存入數組b中sum += ai0 * Fun(n - 1, b ) * pow(- 1 , i );/求出a第一列每個元素代數余子式之和,其中嵌套Fun進行逐步降階完成高階行列式計算 return sum; 方法二:用行初等變換來求矩陣的逆/應用矩陣初等變換的方法求逆矩陣/參數說明:/naturalmat原矩陣/num矩陣的階數/InvMat求解結果,逆矩陣boolMatrix_Inv(double*naturalmat,intnum,double*InvMat)inti,j,k;double*MatEnhanced;/增。
7、廣矩陣(A|E)MatEnhanced=(double*)malloc(num*sizeof(double*);for(i=0;inum;i+)MatEnhancedi=(double*)malloc(2*num*sizeof(double);double*temp;temp=(double*)malloc(2*num*sizeof(double);doublexishu=1;/初等變換時系數,設初值為1for(i=0;inum;i+)/增廣矩陣賦值,前半部分for(j=0;jnum;j+)MatEnhancedij=naturalmatij;for(i=0;inum;i+)/增廣矩陣賦值,后。
8、半部分for(j=num;j2*num;j+)MatEnhancedij=0;/先將后半部分全部賦值為0MatEnhancedii+num=1;/再將其對角線部分賦值為1/接下來進行初等行變換for(i=0;inum;i+)if(MatEnhancedii=0)/如果前半部分的對角線上的元素為0,此時進行行變換if(i=num-1)/如果是最后一行,那么說明該矩陣不可returnfalse;/對第i行以后的各行進行判斷,找到第i個元素不為零的行,并與第i行進行交換for(j=i;jnum;j+)if(MatEnhancedji!=0)k=j;/記住該行的行號break;/退出循環/接下來對第i。
9、行和第k行進行交換temp=MatEnhancedk;/第k行MatEnhancedk=MatEnhancedi;MatEnhancedi=temp;/初等變換for(j=0;jnum;j+)/對其他行的所有列進行計算if(j!=i)/本行不參與計算if(MatEnhancedji!=0)/只有當其不為零時進行計算,否則不計算xishu=MatEnhancedji/MatEnhancedii;for(k=i;k2*num;k+)/對后面的所有列進行計算MatEnhancedjk-=xishu*MatEnhancedik;/將本行所有列都除以對角線上的值,將前半部分化成單位矩陣xishu=MatEnhancedii;for(j=i;j2*num;j+)if(xishu!=0)MatEnhancedij/=xishu;/計算完成后,后半部分即為原矩陣的逆矩陣,將其賦值給InvMat.for(i=0;inum;i+)for(j=0;jnum;j+)InvMatij=MatEnhancedij+num;/內存釋放free(MatEnhanced);free(temp);returntrue;/返回。
總結
以上是生活随笔為你收集整理的c语言矩阵的逆的程序,C语言求矩阵的逆矩阵的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【历史上的今天】6 月 5 日:洛夫莱斯
- 下一篇: createJs继承