Matriz Inversa usando determinante (nxn)

Si eres principiante y tienes alguna consulta entra en este foro.
Responder
Mensaje
Autor
hezelmet
Mensajes: 10
Registrado: 12/11/2007 11:26 pm
Ubicación: Caguas, Puerto Rico

Matriz Inversa usando determinante (nxn)

#1 Mensaje por hezelmet » 15/11/2007 7:58 pm

Saludos!

Es la segunda vez que escribo en este foro... la primera vez me sirvio de muchisima ayuda, la cual les agradezco infinitamente!!

Esta vez necesito realizar un programa que me entregue la matriz inversa de una matriz n x n...

No me exigen ningun metodo en especifico... decidi hacerlo por utilizando determinantes ya que se me hace mas sencillo (creo) que el metodo de Gauss-Jordan...

En fin, logre hacer el programa para una matriz 3 x 3... Necesito que, aunque sea... me den ideas de como puedo lograr que el programa funcione para cualquier valor de n... 4x4, 5x5, 6x6... nxn...

Aqui lo que tengo:

===============================================

#include<iostream.h>
#define n 3
#define filas 3
#define columnas 3


int main()

{ int a,b;
double B[n][n],A[filas][columnas],x;

for(a=0;a<=filas-1;a++)
{
for(b=0;b<=columnas-1;b++)

{

cout<<"A ["<<a<<"]["<<b<<"] = ";
cin>>A[a];

}
}

for(a=0;a<=filas-1;a++)

{
for(b=0;b<=columnas-1;b++)

{

x=(A[0][0]*((A[1][1]*A[2][2])-(A[2][1]*A[1][2])))-(A[0][1]*((A[1][0]*A[2][2])-(A[2][0]*A[1][2])))+(A[0][2]*((A[1][0]*A[2][1])-(A[2][0]*A[1][1])));
}}

cout<<"Determinate = "<<x<<endl; //x es el determinante

if (x!=0)
{

for(a=0;a<=filas-1;a++)
{
for(b=0;b<=columnas-1;b++)
{

B[0][0]=((A[1][1]*A[2][2])-(A[2][1]*A[1][2]))*(1/x);

B[0][1]=(-((A[0][1]*A[2][2])-(A[2][1]*A[0][2])))*(1/x);

B[0][2]=((A[0][1]*A[1][2])-(A[0][2]*A[1][1]))*(1/x);

B[1][0]=(-((A[1][0]*A[2][2]-A[2][0]*A[1][2])))*(1/x);

B[1][1]=((A[0][0]*A[2][2])-(A[2][0]*A[0][2]))*(1/x);

B[1][2]=(-((A[0][0]*A[1][2]-A[1][0]*A[0][2])))*(1/x);

B[2][0]=((A[1][0]*A[2][1])-(A[1][1]*A[2][0]))*(1/x);

B[2][1]=(-((A[0][0]*A[2][1]-A[2][0]*A[0][1])))*(1/x);

B[2][2]=((A[0][0]*A[1][1])-(A[1][0]*A[0][1]))*(1/x); cout<<"A^-1 ["<<a<<"]["<<b<<"] = "<<B[a]<<endl;
}
}
}
else
{
cout<<"Matriz no tiene inversa"<<endl;
}
return 0;
}

===============================================

Cualquier ayuda sera agradecida!!

hezelmet
Mensajes: 10
Registrado: 12/11/2007 11:26 pm
Ubicación: Caguas, Puerto Rico

#2 Mensaje por hezelmet » 16/11/2007 8:18 am

Investigue y me acabo de dar cuenta que para matrices mayores a 3x3 hacerlo por Determinante es casi imposible :/


Habra algun otro metodo para relaizar este ejercicio?

Avatar de Usuario
digies
Mensajes: 1001
Registrado: 18/11/2005 12:00 am
Ubicación: Blumenau (Br)

#3 Mensaje por digies » 16/11/2007 12:44 pm

En C estándar y con el método de Gauss-Jordan lo podrías hacer así:

Código: Seleccionar todo

#include <stdio.h>
#include <stdlib.h>

float pivote, a[50][50], b[50][50];
int i, j, n, k, l;
char opcion;

void lee_matriz(void);
void fila_pivote(void);
void col_pivote(void);
void otros(void);
void imprimir(void);

int main(void)
{
    lee_matriz();
    for(i=0; i<n; i++)
    {
        j=i;
        pivote=a[i][j];
        b[i][j]=1/pivote;
        fila_pivote();
        col_pivote();
        otros();
        for(k=0; k<n; k++)
            for(l=0; l<n; l++)
                a[k][l]=b[k][l];
    }
    imprimir();
    puts("\n");
    system("PAUSE");
    return EXIT_SUCCESS;
}

void lee_matriz(void)
{
    printf("INVERSA DE UNA MATRIZ nxn\n\nn: ");
    scanf("%d",&n);
    putchar('\n');
    for(i=0; i<n; i++)
        for(j=0; j<n; j++)
        {
            printf("Elemento A[%d][%d]: ", i+1, j+1);
            scanf("%f", &a[i][j]);
        }
}

void fila_pivote(void)
{
    int m;
    for(m=0; m<n; m++)
        if(m != i)
            b[i][m]=a[i][m]/pivote;
}

void col_pivote()
{
    int m;
    for(m=0; m<n; m++)
        if(m != j)
            b[m][j]=-a[m][j]/pivote;
}

void otros(void)
{
    int x,y;
    for(x=0 ;x<n; x++)
        for(y=0; y<n; y++)
            if(x!=i && y!=j)
                b[x][y]=a[x][y]-(a[i][y]*a[x][j])/pivote;
}

void imprimir(void)
{
    puts("\nMatriz inversa:\n");
    for(i=0; i<n; i++)
    {
        for(j=0; j<n; j++)
            printf("%4.2f ", a[i][j]);
        printf("\n");
    }
}
Ahora solo debes pasarlo a C++.

Un saludo

hezelmet
Mensajes: 10
Registrado: 12/11/2007 11:26 pm
Ubicación: Caguas, Puerto Rico

#4 Mensaje por hezelmet » 18/11/2007 7:51 pm

Muchisimas gracias digies!
Ya lo converti a C++ :)

Ahora solo tengo que averiguar como determinar si es o no inversible la matriz para que el programa asi me lo indique...

Saludos y gracias nuevamente!

JuanesP
Mensajes: 1
Registrado: 11/09/2019 5:42 pm

Re: Matriz Inversa usando determinante (nxn)

#5 Mensaje por JuanesP » 11/09/2019 5:44 pm

Disculpa solo quería saber si me podrías enviar el código de Gauss Jordan en C++ por favo

joedillane
Mensajes: 1
Registrado: 13/09/2019 7:39 pm

Re: Matriz Inversa usando determinante (nxn)

#6 Mensaje por joedillane » 13/09/2019 7:40 pm

Muchisimas gracias digies!

Responder

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 3 invitados