#include<stdio.h>
#include<math.h>
#define N 10 //N为本函数所能求解方程组的最大阶数,而n为实际阶数
void Better_Cholesky(double A[N][N],double b[N],double X[N],int n)
{//LDLT分解法Better_Cholesky函数
int i,j,k,r;
double L[N][N],D[N][N],Y[N],Z[N];
//L[N][N]为单位下三角矩阵,D[N][N]为对角矩阵,
//Y[N]用来存储求解LY=B的结果,Z[N]用来存储求解DZ=Y的结果,
for(i=0;i<n;i++)
{
for(j=0;j<n;j++){
if(i==j)L[i][i]=1.0;
else{
D[i][j]=0.0;
L[i][j]=0.0;
if(i>j){
D[i][j]=0.0;
}
}
}
}
for(k=0;k<n;k++)
{
for(j=k;j<n;j++)//此循环为求D[][]
{
D[k][k]=A[k][k];
for(r=0;r<=k-1;r++){
D[k][k]-=L[k][r]*L[k][r]*D[r][r];
}
本内容试读结束,登录后可阅读更多
下载后可阅读完整内容,剩余2页未读,立即下载