Método LU en C
Enviado por sofftastic1 • 29 de Septiembre de 2015 • Práctica o problema • 1.660 Palabras (7 Páginas) • 520 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;
...