當前位置:編程學習大全網 - 編程語言 - 如何用C語言求壹個三階矩陣的逆矩陣

如何用C語言求壹個三階矩陣的逆矩陣

c語言求任意階矩陣的逆矩陣程序

# include & ltmalloc.h & gt

# include & ltstdio.h & gt

///& lt;總結& gt

///求行列式的絕對值

///& lt;/summary & gt;

///& lt;param name = " src " & gt輸入矩陣

///& lt;param name = " n " & gt矩陣的階

///& lt;returns & gt矩陣對應行列式的值

double mat_det(double *src[],const unsigned n){

if(2 & gt;n)返回src[0][0];

int subsize = n-1;

double * * sub vet =(double * *)malloc(sizeof(double *)* subsize);

for(int I = 0;我& lt子尺寸;++i)

sub vet[I]= src[I+1];

double value = mat_det(subvet,subsize)* src[0][subsize]*((subsize & amp;1) ?-1 : 1);

for(int I = 0;我& lt子尺寸;++i){

sub vet[I]= src[I];

value += mat_det(subvet,subsize)* src[I+1][subsize]*((n+I & amp;1) ?-1 : 1);

}

免費(sub vet);

返回值;

}

///& lt;總結& gt

///在矩陣的指定位置找到元素的代數余因子的值。

///& lt;/summary & gt;

///& lt;param name = " src " & gt輸入矩陣

///& lt;param name = " n " & gt矩陣的階

///& lt;param name = " x " & gt矩陣指定了元素坐標的x值

///& lt;param name = " y " & gt矩陣指定元素坐標的y值

///& lt;returns & gt對應於矩陣的指定元素的代數余因子的值

double mat_minor(double *src[],const unsigned n,const unsigned x,const unsigned y){

double * * minmat =(double * *)malloc(sizeof(double *)*(n-1));

for(無符號I = 0;我& ltn-1;++i){

minmat[I]=(double *)malloc(sizeof(double)*(n-1));

for(無符號j = 0;j & ltn-1;++j)

min mat[I][j]= src[I+(I & gt;= x)][j+(j & gt;= y)];

}

double value = mat_det(minmat,n-1)*(x+y & amp;1 ?-1 : 1);

for(無符號I = 0;我& ltn-1;++i)

free(minmat[I]);

免費(minmat);

返回值;

}

///& lt;總結& gt

///求矩陣的逆矩陣

///& lt;/summary & gt;

///& lt;param name = " src " & gt輸入矩陣

///& lt;param name = " des " & gt輸入矩陣的逆矩陣

///& lt;param name = " n " & gt矩陣的階

void mat_inv(double *src [],double *des[],const unsigned n){

double det = mat_det(src,n);//求矩陣行列式的值

for(無符號I = 0;我& ltn;++i){

for(無符號j = 0;j & ltn;++j)

des[i][j] = mat_minor(src,n,j,I)/det;

}

}

int main(){

double input[][3] = { { 8,4,9 },{ 2,3,5 },{ 7,6,1 } };

double output[][3] = { { 0 },{ 0 },{ 0 } };

double *src[3],* des[3];

//矩陣必須轉換成指針數組形式。

for(int I = 0;我& lt3;++i){

src[i] =輸入[I];

des[i] =輸出[I];

}

mat_inv(src,des,3);

for(int I = 0;我& lt3;++i){

for(int j = 0;j & lt3;++j)

printf("%lf\t ",des[I][j]);

printf(" \ n ");

}

返回0;

}

  • 上一篇:機械編程可以分為哪些編程?
  • 下一篇:臨沂大學的數控機床這個專業怎麽樣
  • copyright 2024編程學習大全網