Programa Metodo de Cholesky C++
#include
#include "cholesky.h"
#include "Leer.h"
int main()
{
double **A,*x;
int n,i,j;
A=LeerDatos("Dto2.dat",&n);
if ( (x=Cholesky(A,n))!=NULL)
{
printf ("\nEstos son los resultados:\n");
for(i=0;i
free(x);
printf ("\n");
}
else
{
printf ("No se ha podido resolver el sistema \n");
}
for (i=0;i
free(A[i]);
}
free(A);
return 1;
}//Leer.h
double** LeerDatos(char *nombrefichero,int *dimension);
//Leer.c
#include
#include "Leer.h"
#include
double** LeerDatos(char *nombrefichero,int *dimension) {
double **matriz;
inti,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;
}
//Cholesky.h
int Diagonalizar(double **A,double **B,int dimension);
voidMatrizTraspuesta(double **A,double **At,int dimension);
void DescensoCholesky(double **B,double *y,double *b,int dimension);
void AscensoCholesky(double **Bt,double *x,double *y,int dimension);
int Simetrica(double **A,int n);
double** LeerDatos(char *nombrefichero,int *dimension);
double* Cholesky (double **A, int dimension);
//Cholesky.c
#include "cholesky.h"
#include
#include
#include
intDiagonalizar(double **A,double **B,int dimension)
/* Ambas matrices deben ya disponer de espacio de memoria dinamica
// A = matriz original de coeficientes
// B = triangular inferior (los de arriba todos acero) despues de
aplicar Cholesky
// dimension = dimension de la matriz cuadrada*/
{
int i,j,k;
double suma,producto,z;
for(j=0;j
for (i=j;i
if(i==j)
{
suma = 0.;...
Regístrate para leer el documento completo.