main() { int i,j,k,l,m,n ; float a[100][100]; float det; cout << "Introducir el ORDEN DE LA MATRIZ : N = " << endl; cin >> n; m=n-1; /* Vamos a introducir la matriz por teclado*/
cout << "Introducir los elementos" << endl; cout << "------------------------" << endl;; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) {cin >> a[i][j];}} /* SI QUEREMOS LEER LOS ELEMENTOS DE LA MATRIZ LISTADOS */
/**************CALCULO DE DETERMINANTES****************/ # include <stdio.h>
main() { int i,j,k,l,m,n ; float a[100][100]; float det; printf("\t\tIntroducir el ORDEN DE LA MATRIZ : N = "); scanf("%d",&n); printf("\n"); m=n-1; /* Vamos a introducir la matriz por teclado*/
printf("\t\tIntroducir los elementos por FILAS \n"); printf("\t\t---------------------------------- \n"); for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { printf("A(%d,%d) =",i,j); scanf("%f",&a[i][j]); } }
/* SI QUEREMOS LEER LOS ELEMENTOS DE LA MATRIZ LISTADOS */ for(i=1;i<=n;i++) { for(j=1;j<=n;j++) printf("\t\t\tA(%d,%d) =%8.4f\n",i,j,a[i][j] ); }
Bueno aca funciona ese programita k tenias vos, anda hermoso =P Espero que te sirva SALUDOS!
#include<iostream> using namespace std;
main() { int i,j,k,l,m,n ; float a[100][100]; float det; cout << "Introducir el ORDEN DE LA MATRIZ : N = " << endl; cin >> n; m=n-1; /* Vamos a introducir la matriz por teclado*/
cout << "Introducir los elementos" << endl; cout << "------------------------" << endl;; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) {cin >> a[i][j];}} /* SI QUEREMOS LEER LOS ELEMENTOS DE LA MATRIZ LISTADOS */
// Liberamos memoria destruyendo la que ocupan A, p e invA 41.
gsl_matrix_free(A); 42.
gsl_matrix_free(invA); 43.
gsl_permutation_free(p); 44.
return(0); 45.
}
Traspuesta #include<iostream.h>
void main() { int original[100][100],M,N,i,k;
cout<<"\n Numero de Columnas de la matriz: "; cin>>M; cout<<"\n Numero de Filas de la matriz: "; cin>>N;
/*** LLENANDO LA MATRIZ ORIGINAL ***/ for(i=0;i<N;i++) { for(k=0;k<M;k++) { cout<<"\t Valor de la Matriz en la fila "<<i<<" columna "<<k<<": "; cin>>original[i][k]; } } /*** IMPRIMIENDO LA ORIGINAL ***/ cout<<"\n\n ESTA ES LA MATRIZ ORIGINAL ->\n"; for(i=0;i<N;i++) { cout<<"\n"; for(k=0;k<M;k++) { if(original[i][k]<10) cout<<" "<<original[i][k]; else cout<<" "<<original[i][k]; } } /*** IMPRIMIENDO LA TRANSPUESTA ***/ cout<<"\n\n ESTA ES LA TRASPUESTA DE LA MATRIZ ORIGINAL ->\n"; for(i=0;i<M;i++) { cout<<"\n"; for(k=0;k<N;k++) { if(original[k][i]<10) cout<<" "<<original[k][i]; else cout<<" "<<original[k][i]; } } cin.get();cin.get();cin.get();
# include <iostream.h> # include <conio.h> # include <iomanip.h> # include <dos.h> main() { int k,j,f=17,c; int mat[100][100]; long mat_res[100][100]; clrscr(); gotoxy(26,5);cout<<"digite tamao de la matriz [__]";gotoxy(54,5);cin>>c; gotoxy(26,9);cout<<"ASIGNAR VALORES A LA MATRIZ"; for(k=0;k<c;k++) { for(j=0;j<c;j++) { gotoxy(10,15);cout<<"introduzca un valor entero [ ]"<<" fila "<< k <<" columna " << j; gotoxy(39,15);cin>>mat[k][j]; } } gotoxy(26,16);cout<<"traspuesta de la matriz"; for(k=0;k<c;k++) { gotoxy(25,f); for(j=0;j<c;j++) { mat_res[k][j]=mat[j][k]; cout<<setw(5)<<mat_res[k][j]<<" "; getch(); } f++; } }
men espero que este programilla dea lo que estas buscando Metodo Gauss-Jordan Este programa calcula la inversa de una matriz por medio del metodo del espejo, es decir se aplica la reduccion de Gauss-Jordan en una matriz de nxn y se aplican las mismas operaciones de fila a una matriz identidad de nxn #include <stdio.h> #include <conio.h> #include <math.h>
double matriz[50][50]; double identidad[50][50]; int N; //N contiene el tamao de la matriz cuadrada /*********** PROTOTIPOS DE FUNCIONES *****************/
/*****************************************************/ int main() { int fi, co;
clrscr();
do{ printf("Ingrese el tamao de la matriz cuadrada: "); scanf("%i",&N); if(N>50 || N<2) {clrscr(); printf("El numero debe estar entre 2 y 50n");} }while(N>50 || N<2);
for(fi=0;fi<N;fi++) { for(co=0;co<N;co++) { printf("Ingrese el valor de matriz[%i][%i]",fi+1,co+1); scanf("%lf",&matriz[fi][co]); } }
void hallar_inversa(void) { int cont,cont2, flag=0;
escalonar_matriz(); generar_matriz_identidad(); //rellena la matriz identidad for(cont=0;cont<N;cont++) //recorre filas { for(cont2=0;cont2<N;cont2++) //recorre columnas { if(matriz[cont][cont2]!=0) //busca pivote (elemento ditinto de 0) { if(matriz[cont][cont2]!=1) //si pivote no es 1, se lo multiplica { multip_fila(cont,pow(matriz[cont][cont2],-1)); }
ceros_arriba(cont,cont2); // se hacen 0's por arriba ceros_abajo(cont,cont2); // y por debajo del pivote
break; } } }
/*--------------------------------------------------------------*/ /* Una vez terminada esta operacion, la matriz identidad estara */ /* transformada en la inversa */ /* */ /* Ahora se comprueba que la matriz original este transformada */ /* en la matriz identidad, de no ser asi la inversa obtenida */ /* no es valida y la matriz no tiena inversa */ /*--------------------------------------------------------------*/ for(cont=0;cont<N;cont++) { for(cont2=0;cont2<N;cont2++) { if(cont==cont2) { if(matriz[cont][cont2]!=1) flag=1; } else { if(matriz[cont][cont2]!=0) flag=1; } } }
if(flag==1) { printf("nnLa matriz no tiene inversann"); } else { printf("nnLa Matriz Inversa es :nn");
} printf("n"); } } printf("nPresione una tecla para continuar..."); getch(); }
/*-----------------------------------------------------------------------*/ /* */ /* Ordena la matriz de forma que quede en su forma escalonada por */ /* renglones */ /* */ /*-----------------------------------------------------------------------*/
void escalonar_matriz(void) { int cont, col, ceros, vec[10]; int flag, aux;
/*----------------------------------------------------------------------*/ /* SE DEFINEN LAS 3 OPERACIONES ELEMENTALES DE FILA */ /* */ /* Las operaciones que se le realizen a la matriz para reducirla */ /* tambien deberan realizarsele a la matriz identidad para obtener */ /* la matriz inversa */ /*----------------------------------------------------------------------*/ void permutar_filas(int fila1,int fila2) { float auxval; int cont;
si alguien puede tomarse la molestia de verificar este codigo se lo agradesco, tengo un error pero no se en que se gun yo el algoritmo deve funcionar correctamente:
1- se tirangula la matriz, y el producto de la diagonal principal es el determinante de la matriz a, lo de mas biene de regalo pa en contrar los valores de x:
importante: EL CODIGO ESTA ECHO EN DEV-C++ POR SI LAS DUDAS
#include <cstdlib> #include <iostream> #include <conio.h> #include <math.h> #include <stdlib.h> using namespace std; int main(int argc, char *argv[]) { int n,i,j,k; float a[10][10],b[10],x[10],det; cout<<endl<<endl<<" METODO DE ELIMINACION DE GAUSS "<<endl; cout<<" ========================================================="<<endl<<endl<<endl; cout<<"Introduce el numero de ecuaciones => "; cin>>n;cout<<endl; cout<<"Introduce los coeficientes dela matriz A => "<<endl; for(i=1;i<=n;i++) // carga los coefientes de a { for(j=1;j<=n;j++) { cout<<"A["<<i<<"]["<<j<<"]"<<"=>"; cin>>a[i][j]; } cout<<endl; } cout<<"Introduce el vector independiente b => "<<endl; for(j=1;j<=n;j++) //carga vector independiente { cout<<"b["<<i<<"]["<<j<<"]"<<"=>"; cin>>b[j]; } //muestra la matriz a for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { cout<<a[i][j]<<" "; } cout<<endl; } //calcula el determinante de a // <<<<< INICIA EL METODO DE GAUSS >>>>> j=0; i=0; det=1; //paso uno for(i=1;1<=n-1;i=i+1) //paso tres { det=det*a[i][i]; //paso cuatro if(det==0) //paso cinco { cout<<"Hay un cero en la diagonal principal..."; goto salir; } for(k=i+1;k<=n;k=k+1) //paso siete { for(j=i+i;j<=n;j=j+1) //paso nueve { a[k][j]=a[k][j]-(a[k][i]*a[i][j])/a[i][i]; } b[k]=b[k]-(a[k][i]*b[i])/a[i][i]; //paso doce } } //fin del for paso tres det=det*a[n][n]; if(det==0) //paso 16 { cout<<"Hay un cero en la diagonal principal..."; goto salir; } x[n]=b[n]/a[n][n]; for(i=n-1;i>=1;i=i-1) //paso 19 { x[i]=b[i]; for(j=i+1;j<=n;j=j+1) //paso 20 { x[i]=x[i]-a[i][j]*x[j]; } x[i]=x[i]/a[i][i]; } cout<<"El determinante de a es => "<<det; cout<<"Los valores de x => "<<endl; for(j=1;j<=n;j++) { cout<<"x["<<i<<"]"<<"=>"<<x[j];cout<<endl; } salir: system("PAUSE"); return EXIT_SUCCESS; }
#include <iostream>
#include <fstream> #include <iomanip>
using namespace std;
void gaussjordan (int n, double **A);
int main(){
ifstream label1 ("datos//datos.dat");
ofstream label2 ("salida//salida.dat");
int i, j, k;
cout << "Resolucion de sistemas lineales por el metodo de Gauss-Jordan\n\n";
label2 << "Resolucion de sistemas lineales por el metodo de Gauss-Jordan\n\n";
int n;
label1 >> n;
cout << "Numero de incognitas = " << n;
cout << "\n\n";
double **A;
A = new double *[n+1];
for (j=0; j < n+1; j++)
A[j] = new double [n+1];
cout.setf(ios::fixed);
cout.precision(4);
label2.setf(ios::fixed);
label2.precision(4);
// Introduccin de datos a partir del archivo correspondiente
Grbenlo como gaussjordan.c++ y coloqunlo en una carpeta llamada GAUSSJORDAN. En GAUSSJORDAN, creen un directorio llamado datos y otro llamado salida. En datos, copien el siguiente datos.dat:
#include<iostream.h> #include<stdio.h> #include<conio.h> #include<stdlib.h> int i,j,k,n; double m[20][20],aux;
void main() {
cout<<" <<<<Metodo de Gauss >>>> "; cout<<"\n Matriz cuadrada de orden N= "; cin>>n; cout<<"\n Digite los elementos de la matriz en la posicion "; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { cout<<"\n M=["<<i<<","<<j<<"]= "; cin>>m[i][j]; } cout<<"\n Termino independiente de X"<<i<<" "; cin>>m[i][n+1];