您好,欢迎访问三七文档
当前位置:首页 > 机械/制造/汽车 > 机械/模具设计 > Cholesky分解法的思想及C语言编程
Cholesky分解法Cholesky分解法又称三角分解法,或称因子化法设线性方程组Axb(1)式中A为对称、正定的矩阵。对于对称、正定的矩阵A,可进行分解TALDL(2)式中L是下单位三角阵,D是对角线矩阵。右端项列向量(列阵)也作相应的分解bLDb(3)将式(2)和式(3)代入方程(1),得到上三角方程组TLxb再按诸如高斯消元法的回代过程就可解出x下面,通过编写一个完整的C语言程序求1234121312235416155118341720xxxx,完整的C语言程序代码如下:#includestdio.h#includemath.h#includeiostream.h#defineN4voidCholesky(intn,doubleA[N][N],doublex[N],doubleb[N]){inti,j,k;doubleL[N][N],D[N][N],b2[N];i=1;D[i-1][i-1]=A[i-1][i-1];for(i=2;i=n;i++){j=1;L[i-1][j-1]=A[i-1][j-1]/D[j-1][j-1];if(j==i-1){D[i-1][i-1]=0;for(k=1;k=i-1;k++)D[i-1][i-1]+=pow(L[i-1][k-1],2)*D[k-1][k-1];D[i-1][i-1]=A[i-1][i-1]-D[i-1][i-1];continue;}else{for(j=2;j=i-1;j++){L[i-1][j-1]=0;for(k=1;k=j-1;k++)L[i-1][j-1]+=L[i-1][k-1]*L[j-1][k-1]*D[k-1][k-1];L[i-1][j-1]=(A[i-1][j-1]-L[i-1][j-1])/D[j-1][j-1];if(j==i-1){D[i-1][i-1]=0;for(k=1;k=i-1;k++)D[i-1][i-1]+=pow(L[i-1][k-1],2)*D[k-1][k-1];D[i-1][i-1]=A[i-1][i-1]-D[i-1][i-1];continue;}}}}i=1;b2[i-1]=b[i-1]/D[i-1][i-1];for(i=2;i=n;i++){b2[i-1]=0;for(k=1;k=i-1;k++)b2[i-1]+=L[i-1][k-1]*D[k-1][k-1]*b2[k-1];b2[i-1]=(b[i-1]-b2[i-1])/D[i-1][i-1];}x[n-1]=b2[n-1];for(i=n-1;i=1;i--){x[i-1]=0.0;for(k=i+1;k=n;k++)x[i-1]+=L[k-1][i-1]*x[k-1];x[i-1]=b2[i-1]-x[i-1];}for(i=0;i=n-1;i++)printf(%f\n,x[i]);}voidmain(){doubleA[4][4]={{1,2,1,3},{2,3,-5,4},{1,-5,5,-1},{3,4,-1,7}};doublex[4]={0};doubleb[4]={12,16,18,20};Cholesky(4,A,x,b);}程序运行结果:
本文标题:Cholesky分解法的思想及C语言编程
链接地址:https://www.777doc.com/doc-7362724 .html