两种做法: I:建一个[2n][n]的矩阵 左半部分是方程组系数的方阵,右半部分是单位矩阵 针对左半部分进行线性变换 先做掉下三角,再干掉上三角,然后把对角线上元素置1 这样右半部分就是系数矩阵的逆了 再写几个实现矩阵和向量相乘的语句就可以解决问题
II:另一种矩阵求逆的方法 需要两个n*n的矩阵,一个存储系数,一个存储它的伴随 还需要一个(n-1)*(n-1)的矩阵,存储代数余子式
写一个行列式求值的函数,它将被多次用到。建议使用化下三角再算主对角线的方法,这样较简单。 计算伴随矩阵的过程: for(i=0;i<X;i++) for(j=0;j<X;j++) { for(ii=0;ii<X;ii++) for(jj=0;jj<X;jj++) { if(ii==i || jj==j) continue; else for(n=0;n<X-1;n++) for(m=0;m<X-1;m++) zi[n][m]=si[ii][jj];/*求zi的方法就是把和si[i][j]同行同列的元素全部咔嚓掉*/ } ban[i][j]=hao(i,j)*han(zi); }
在这里还要有一个循环实现ban矩阵的转置.
for(i=0;i<X;i++) for(j=0;j<X;j++) { si[i][j]=ban[i][j]/han(si); } si[i][j]:存储系数的那个矩阵 zi[n][m]:存储代余子式的矩阵 ban[i][j] : 伴随矩阵 hao(i,j) :用来计算i,j处的符号是正是负.
注: 1:以上不是源码,只是算法流程 2:只要按照一定顺序进行操作就能把行列式化成上三角或下三角 从第i+1行以第n行,从第i列到第n-1列 3:关于hao(i,j)函数,用(i+j)%2来判断吧 han(zi) : 计算zi行列式的值