0 évaluation0% ont trouvé ce document utile (0 vote)
150 vues19 pages
Este documento contiene código en C++ para calcular el determinante de una matriz cuadrada de orden n introducida por el usuario. Primero se pide el orden de la matriz, luego se leen los elementos y se almacenan en un arreglo bidimensional. Finalmente, se implementa el método de reducción de Gauss para calcular el determinante de manera recursiva. El resultado se imprime al final. También incluye código para calcular la inversa, transpuesta y reducción de Gauss-Jordan de una matriz.
Este documento contiene código en C++ para calcular el determinante de una matriz cuadrada de orden n introducida por el usuario. Primero se pide el orden de la matriz, luego se leen los elementos y se almacenan en un arreglo bidimensional. Finalmente, se implementa el método de reducción de Gauss para calcular el determinante de manera recursiva. El resultado se imprime al final. También incluye código para calcular la inversa, transpuesta y reducción de Gauss-Jordan de una matriz.
Este documento contiene código en C++ para calcular el determinante de una matriz cuadrada de orden n introducida por el usuario. Primero se pide el orden de la matriz, luego se leen los elementos y se almacenan en un arreglo bidimensional. Finalmente, se implementa el método de reducción de Gauss para calcular el determinante de manera recursiva. El resultado se imprime al final. También incluye código para calcular la inversa, transpuesta y reducción de Gauss-Jordan de una matriz.
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];