Clase de Métodos Numéricos Lunes 24 de octubre de 2011

Anuncio
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))
}
}
Descargar