Programa Metodo de Cholesky C++

898 palabras 4 páginas
#include
#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<n;i++) printf("\n X%d = %.14lf",i,x[i]); free(x); printf ("\n");
}
else
{
printf ("No se ha podido resolver el sistema \n");
}
for (i=0;i<n;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; 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));

/*
…ver más…

lse
{
B[j][j] = sqrt(z);
}
} else { suma = 0.; for(k=0;k<j;k++) { producto = B[i][k]*B[j][k]; suma = suma + producto;
}
B[i][j] = (double)(A[i][j]-suma)/B[j][j];
}
printf("\nB[%d][%d] = %.14lf",i,j,B[i][j]);
}
} return 1;
}

void MatrizTraspuesta(double **A,double **At,int dimension)
/* Ambas matrices deben ya disponer de espacio de memoria dinamica
// A = matriz original
// At = matriz traspuesta de la matriz A
// dimension = dimension de la matriz cuadrada*/
{
int i,j;

for (j=0;j<dimension;j++)
{
for(i=0;i<dimension;i++)
At[i][j] = A[j][i];
}
return;
}

void DescensoCholesky(double **B,double *y,double *b,int dimension)
/*Ambas matrices deben ya disponer de espacio de memoria dinamica
// B = matriz B
// y = soluciones del descenso
// b = vector de terminos independientes
// dimension = dimension de la matriz cuadrada*/
{
int i,j; double suma;

for(i=0;i<dimension;i++)
{
suma = 0.; for(j=0;j<i;j++) { suma = suma + (B[i][j]*y[j]);
}
y[i] = (double)(b[i]-suma)/B[i][i];
}

for(i=0;i<4;i++) printf("\ny%d = %.14lf",i,y[i]);

return;
}

void AscensoCholesky(double **Bt,double *x,double *y,int dimension)
/*Ambas matrices deben ya disponer de espacio de memoria dinamica
// Bt = matriz traspuesta de B
// x = soluciones del sistemas
// y = soluciones del descenso
// dimension = dimension de la matriz cuadrada */
{
int i,j; double suma;

for(i=(dimension-1);i>=0;i--)
{
suma = 0.; for(j=i;j<dimension;j++) { suma = suma + (Bt[i][j]*x[j]);
}
x[i] = (double)(y[i]-suma)/Bt[i][i];
}

Documentos relacionados

  • Ciclos economicos en mexico
    3219 palabras | 13 páginas
  • Genesis del universo
    2979 palabras | 12 páginas