Red de conocimiento informático - Material del sitio web - Cómo encontrar la matriz inversa de una matriz de tercer orden usando lenguaje C

Cómo encontrar la matriz inversa de una matriz de tercer orden usando lenguaje C

Programa en lenguaje C para encontrar la matriz inversa de cualquier matriz de orden

# include & ltmalloc.h & gt

# include & ltstdio.h & gt

/ // <Summary>

///Encontrar el valor absoluto del determinante

///</summary >

/// & lt ; param name = " src " & gtMatriz de entrada

///& lt; param name = " n " & gtOrden de la matriz

///& lt; del determinante de la matriz

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

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

int subsize = n-1;

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

for(int I = 0;i<sub size;++i)

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

valor doble = mat_det(subvet, subsize )* src[0][subsize]*((subsize &1)?-1:1);

for(int i = 0;i<subsize ;++i){

sub vet[I]= src[I];

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

}

Gratis (sub veterinario);

Valor de retorno;

}

///& lt; resumen& gt

///Encuentre el valor del cofactor algebraico del elemento en la posición especificada en la matriz.

///</summary>

///<nombre del parámetro = "src">Matriz de entrada

// /& lt; = " n " & gtEl orden de la matriz

///& lt; param name = " x " & gtLa matriz especifica el valor x de las coordenadas del elemento

/// <param name = "y">El valor y de la coordenada del elemento especificado de la matriz

///<returns>El valor del cofactor algebraico correspondiente al elemento especificado de la matriz

doble mat_minor(doble *src[], const sin signo n, const sin signo x, const sin signo y){

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

for(unsigned I = 0;i<n-1;++i){

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

for(unsigned j = 0; j & ltn-1; ++j)

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

}

valor doble = mat_det(minmat,n-1)* (x+y&1?-1:1);

for(unsigned i = 0;i<n-1;++i)

free(minmat[I]);

gratis(minmat);

valor de retorno;

}

///<Resumen>

///Encontrar la matriz inversa de una matriz

///</summary >

///& lt; param name = " src " & gtInput Matrix

///& lt; param name = " des " & gtMatriz inversa de la matriz de entrada

/ //<param name = "n">El orden de la matriz

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

double det = mat_det(src, n);//Encontrar el valor del determinante de la matriz

for(unsigned I = 0;i<n;++i){

for (unsigned j = 0; j & ltn; ++j)

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

}

}

int main(){

doble entrada[][3] = { { 8, 4, 9 }, { 2, 3, 5 }, { 7, 6, 1 } }

doble salida[ ][3] = { { 0 }, { 0 }, { 0 } };

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

//La matriz debe convertirse en forma de matriz de punteros.

for(int I = 0;i<3;++i){

src[i] = entrada[I];

des[i ] = salida[I];

}

mat_inv(src,des,3);

for(int I = 0;i<3;+ +i){

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

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

printf(" \ n ");

}

Devuelve 0;

}