Método LU en C
sofftastic1Práctica o problema29 de Septiembre de 2015
1.660 Palabras (7 Páginas)539 Visitas
Método de Factorización LU
1. Completar la función de impresión del sistema de ecuaciones considerando la representación adecuada de la matriz de 3x3 y los términos independientes.
2. Completar la función encargada de validar que no existan ceros en la diagonal principal, si existen mandar un mensaje y terminar la ejecución del programa.
3. Completar la función para cargar la matriz A y el arreglo b de dos archivos de texto diferentes.
4. Modificar el código para no usar los arreglos estáticos y emplear memoria dinámica. La reservación de la memoria debe hacerse desde dos funciones, una para el arreglo unidimensional y otra para el bidimensional. Agregar también la función para liberar la
5. Ejecutar para la siguiente matriz y hacer el desarrollo a mano para comprobar el resultado.
[pic 1]
//Método de LU o factorización
#include
#include
//Función para almacenar los archivos a leer
void cargarArchivos(float **sistema,float *b)
{
//apuntadores a archivos 1 y 2
FILE *archivo1 = NULL;
FILE *archivo2 = NULL;
int i=0;
//Condición para abrir los archivos
if((archivo1 = fopen("arreglo.txt","r")) == NULL || (archivo2 = fopen("b.txt","r")) == NULL )
//if(!(archivo1 = fopen("arreglo.txt","r")) || !(archivo2 = fopen("b.txt","r")) == NULL )
{
printf("\n\n\n *** No encontre los archivos ):");
getchar();
exit (0);
}
while(feof(archivo1)==0)
//while!(feof(archivo1)==0)
{
fscanf(archivo1,"%f %f %f",&sistema[i][0],&sistema[i][1],&sistema[i][2]);
i++;
}
i=0;
while(feof(archivo2)==0)
//while!(feof(archivo2)==0)
{
fscanf(archivo2, "%f",&b[i]);
i++;
}
//cierra archivos
fclose(archivo1);
fclose(archivo2);
}
//Función para imprimir el sistema de ecuaciones inicial cada que sea necesario
void imprimirSistema(float **arreglo,float *b)
{
int i=0,j=0;
printf("\n\nSistema de Ecuaciones: \n\n");
for(i=0;i<3;i++)
{
for(j=0;j<4;j++)
{
if(j==3)
printf("\t%.2f ",b[i]);
else
printf("\t%.2f ",arreglo[i][j]);
}
printf("\n");
}
}
//Función para corroborar que no existan ceros en la diagonal principal del arreglo en forma de matriz
void noCerosDiagonal(float **arreglo)
{
if((arreglo[0][0]==0)||(arreglo[1][1]==0)||( arreglo[2][2]==0))
{
printf("\n\t\t***T%c diagonal principal tiene un cero...***",163);
printf("\n\t\t\tT%crmino de ejecuci%cn!!!!!!",130,162);
getchar();
exit(0);//termina la ejecuancion aqui
}
}
//Función para almacenar memoria dinámica para resolver el sistema de ecuaciones
float **memoria_matriz(int renglones, int columnas)
{
float **sistema=NULL;
int i=0;
sistema=(float**)calloc(renglones,sizeof(float*));
if(sistema==NULL)
{
printf("\nNo hay suficiente memoria!!!!");
printf("\n\t\t\tT%crmino de ejecuci%cn!!!!!!",130,162);
getchar();
exit(0);
}
for(i=0;i
{
sistema[i]=(float*)calloc(columnas,sizeof(float));
}
return sistema;
...