#include
#include
double** LeerDatos(char *nombrefichero,int *dimension)
{
double **matriz;
int i,j;
FILE *f;
if(f=fopen(nombrefichero,"r"),!f){
printf("Problema con la lectura del fichero\n");
return matriz;
}
fscanf(f,"%d\n",&(*dimension));
/* Asignacion de memoria dinamica*/
matriz=(double**)malloc(*dimension*sizeof(double*));
for(i=0;i<*dimension;i++)
matriz[i]=(double*)malloc((*dimension+1)*sizeof(double));
for(i=0;i<*dimension;i++)
for(j=0;j<*dimension;j++)
fscanf(f,"%lf\n",&(matriz[i][j]));
for(i=0;i<*dimension;i++)
fscanf(f,"%lf\n",&(matriz[i][*dimension]));
fclose(f);
return matriz;
}
void gauss_seidel (double **m, float *v, float *aprox, int dimension, int iter){
int i,j,p;
float resta = 0.;
for (i=0; i
for(p=0; p
for(j=0; j
resta = resta - m[p][j] * aprox[j]; /*Se calcula el 2º termino*/
resta =resta + v[p]; /*Numerador*/
resta = resta /m[p][p];/*Denominador se divide por la diagonal(termino despejado)*/
aprox[p]= resta; /*En Gauss seidel refescamos la aproximacion en cada iteracion*/
resta = 0.; }
}
for (i=0;i
}
int main(){
double **matriz;
float *v, *aprox, aux;
int dimension, iter, i, j;
matriz=LeerDatos("matriz4.dat",&dimension); /*Leemos la matriz del fichero*/
printf("\t---------------------------------------------\n");
printf("\t| METODO DE GAUSS-SEIDEL |\n");
printf("\t---------------------------------------------\n");
v = (float*)malloc(dimension*sizeof(float));
aprox = (float*)malloc(dimension*sizeof(float));
printf("\n La matriz de coeficientes es: \n\n");
for (i=0;i
printf("{ ");
for (j=0;j
printf("%4.3f ",matriz[i][j]);
}
printf("}\n");
}
for (i=0;i
printf("\n Introduzca la aproximacion inicial: \n");
for(i=0;i
aprox[i] = aux;}
printf("\nIntroduzca el numero de iteraciones: \n");
scanf("%d",&iter);
gauss_seidel (matriz, v ,aprox, dimension, iter);
return 0;
}
No hay comentarios:
Publicar un comentario