Cómo encontrar la matriz inversa de una matriz de tercer orden usando lenguaje C
# 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 p>
///& 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;
}