/**********改进乔利斯基三角分解**********/
void Improved_Cholesky()
{
int i,j,k;
float t;
L=(float
**)malloc(sizeof(float)*(n+1));
for(i=0;i
L[i]=(float
*)malloc(sizeof(float)*(n+1));
T=(float
**)malloc(sizeof(float)*(n+1));
for(i=0;i
T[i]=(float
*)malloc(sizeof(float)*(n+1));
D=(float
*)malloc(sizeof(float)*(n+1));
D[1]=a[1][1];
for(i=2;i
{
for(j=1;j
{
t=0.0;
for(k=1;k
t=t+T[i][k]*L[j][k];
T[i][j]=a[i][j]-t;
L[i][j]=T[i][j]/D[j];
}
t=0.0;
for(k=1;k
t=t+T[i][k]*L[i][k];
D[i]=a[i][i]-t;
}
for(i=1;i
for(j=i;j
if(j==i)
T[i][j]=D[i];
else
T[i][j]=0.0;
for(i=1;i
for(j=i;j
if(j==i)
L[i][j]=1.0;
else
L[i][j]=0.0;
printf("\nArray T is:\n");
for(i=1;i
{
for(j=1;j
printf("%f ",T[i][j]);
printf("\n");
}
printf("\nArray L is:\n");
for(i=1;i
{
for(j=1;j
printf("%f ",L[i][j]);
printf("\n");
}
printf("\nArray D is:\n");
for(i=1;i
{
for(j=1;j
if(j==i)
printf("%f ",D[i]);
else
printf("%f ",D[i]-D[i]);
printf("\n");
}
}
/**********改进乔利斯基三角分解法解方程组**********/
void Improved_Method_Cholesky()
{
int i,j,k;
float t;
y[1]=b[1];
for(i=2;i
{
t=0.0;
for(k=1;k
t=t+L[i][k]*y[k];
y[i]=b[i]-t;
}
x[n]=y[n]/D[n];
for(i=n-1;i>0;i--)
{
t=0.0;
for(k=i+1;k
t=t+L[k][i]*x[k];
x[i]=y[i]/D[i]-t;
}
}