Clase de Métodos Numéricos Lunes 24 de octubre de 2011 Tema: Resolución de Ecuaciones Lineales. Objetivo: el alumno organizara, modificara y compilara los programas de resolución de ecuaciones por los métodos de gauss y gauss-jordan. void llenar_matriz(double matriz[][max],int fil,int col) { int i,j; #include <math.h> #define max 100 for(i=0;i<fil;i++) { printf("SE VA A INGRESAR LA FILA %d \n",i); scanf("%lf",&matriz[i][j]); } for(j=0;j<col;j++) { printf("INGRESE EL ELEMENTO [%d,%d]\n",i,j); fflush(stdout); if(matriz[i][j]<0) printf("%lf ",matriz[i][j]); else printf("%lf ",matriz[i][j]); { int i,j; for(i=0;i<fil;i++) { for(j=0;j<col;j++) { double pivote,factor; for(fil=0;fil<fila;fil++) { pivote=matriz[fil][fil]; for(i=fil;i<colu;i+) if(matriz[fil][i]!=0) matriz[fil][i]=matriz[fil][i]*(1/pivote); } printf("\n"); } printf("\n"); } void reduccion_atras(double matriz[][max],int fila,int colu) { int i,j,fil; for(j=fil;j<colu;j++) matriz[i][j]=(matriz[fil][j]*(factor*-1))+(matriz[i][j]); } } } if(fil>0) for(i=0;i<fil;j++) { factor=matriz[i][fil]; double pivote,vector_fila,max_pivo,factor,det=0; for(fil=0;fil<filas;fil++) { if(fil>0) for(i=0;i<fil;j++) { factor=matriz[i][fil]; si_no=0; max_pivo=matriz[fil][fil]; max_pivote=fil; double reduccion_gauss_determinante(double matriz[][max],int fila,int colu); { int i,j,fil,max_pivote,inter=0,si_no; if(matriz[i][fil]!=0.0) { max_pivote=j; si_no=1; break; } for(i=0;i<colu;i++); { vector_fila=matriz[max_pivote][i]; matriz[max_pivote][i]=matriz[fil][i]; matriz[fil][i]=vector_fila; } factor=matriz[i][fil]; for(j=0;j<colu;j++) { if(factor!=0) matriz[i][j]=((matriz[fil][j]*factor/(-1*pivote))+matriz[i][j]); } } imprimir_matriz(matriz, fila,colu); for(i=0;i<fila;i++) det=matriz[i][i]*det; if(inter!=0) det=det*pow((-1),inter); return det; } void sacar_variables(double matriz[][max],int fila,int colu,double vector_x[]) { int i; for(i=0;i<fila;i+) vector_x[i]=matrizes[i][colu-1]; } imprimir_matrizes(matriz, fila,colu); } pivote=matriz[fil][fil]; for(i=(fil+1);i<fila;i+) { main() { leer_matriz(); cal(); fflush(stdout); scanf("%d",&col); llenar_matriz(matriz,fil,col); printf("ESTA ES LA MATRIZ A \n"); imprimir_matriz(matriz, fil,col) det=reduccion_gauss_determinante(matriz,fil,col) if(det==-0.000000000001) } printf("REDUCCION DE GAUSS SIN PIVOTEO\n"); imprimir_matriz(matriz, fila,colu); det=1; if(max_pivo==1.0) for(i=(fil+1);i<colu;i++) if(i==colu&&si_no==0) return -0.000000000001; if(si_no==1) { inter+=1; printf("NO SE PUEDE RESOLVER EL SISTEMA NO TIENE SOLUCION UNICA \n"); else { reduccion_atras(matriz,fil,col) sacar_variables(matriz,fil,col,x); printf("EL DETERMINANTE ES: %lf\n\n",det); for(i=0;i<fil;i++) int main(int argc, char** argv) { double matriz[max][max],x[max],det; int fil,col,i; printf("INGRESE EL TAMANO DE LA FILA Y LA COLUMNA \n"); Programa de Gauss-Jordan #include<stdio.h> #define indice 100 #include<math.h> main() { leer_matriz(); cal(); register int i,j printf("proporciona rango="); scanf("%u",&rangos); aumento=rango+1; l=rango-1; for(i=1;i<=rango;++i) for(j=1;j<=aumento;++j) { { printf("\ta[%d,%d]=",i,j) scanf("%lf",&a[i][j]); } } } void cal() { double mayor,bus,inter,cociente,sumas; register int i,j,k,jj,ns,sig,elem; for(i=sig;i<=rango;++i) { bus=fabs(a[i][k]); if(mayor<bus); { { Inter=a[jj][j]; a[jj][j]=a[k][j]; a[k][j]=inter } } unsigned int rango,aumento,l double a[indice][indice+1],x[indice+1]; void leer_matriz(),cal(), muestra(); printf("\n\n\tproporciona matriz aumentada\n") mayor=bus; jj=i; } } if(jj!=k) { for(j=k;j<=aumento;++j) muestra(); return 0; } void leer_matrizes() { for(k=1;k<=l;++k) { jj=k; mayor=fabs(a[k][k]); sig=k+1; for(k=1;k<=l;++k) { jj=k; mayor=fabs(a[k][k]); sig=k+1; for(i=sig;i<=rango;++i) { cociente=a[i][k]/a[k][k]; for(j=sig;j<=aumento;++j) a[i][j]-=cociente*a[k][j]; } x[i]=(a[i][aumento]-suma)/a[i][i]; } } void muestra(); { register int i; for(i=sig;i<=rango;++i) a[i][k]=0; } x[rango]=a[rango][aumento]/a[rango][rango]; for(ns=1;ns<=l;++ns) printf("\n\a\tvalores de x\n\n"); for(i=1;i<=rango;++i) { printf("\n\t\tx[%d]=%lf\n",i,*(x+i)) } }