| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
hezelmet
Registrado: 12 Nov 2007 Mensajes: 5 Ubicación: Caguas, Puerto Rico
| Publicado: 15/11/2007 7:58 pm | | | Título: Matriz Inversa usando determinante (nxn) |
| 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][b];
} }
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][b]<<endl; } } } else { cout<<"Matriz no tiene inversa"<<endl; } return 0; }
===============================================
Cualquier ayuda sera agradecida!! |
| | Volver arriba | |  | hezelmet
Registrado: 12 Nov 2007 Mensajes: 5 Ubicación: Caguas, Puerto Rico
| Publicado: 16/11/2007 8:18 am | | | Título: |
| 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? |
| | Volver arriba | |  | digies
Registrado: 18 Nov 2005 Mensajes: 314 Ubicación: Cono Sur
| Publicado: 16/11/2007 12:44 pm | | | Título: |
| En C estándar y con el método de Gauss-Jordan lo podrías hacer así:
| Código: | #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 |
| | Volver arriba | |  | | hezelmet
Registrado: 12 Nov 2007 Mensajes: 5 Ubicación: Caguas, Puerto Rico
| Publicado: 18/11/2007 7:51 pm | | | Título: |
| 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! |
| | Volver arriba | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |