对阵正定矩阵的楚列斯基(Cholesky)分解(C语言)

原创 2012年03月30日 18:46:31

//定理2.2.3:对阵正定矩阵的楚列斯基(Cholesky)分解
//设A为n阶对阵正定矩阵,则存在一个可逆的下三角矩阵G,使得
//A=GG’,当限定G的对角元为正时,这种分解是唯一的
//
//--------A=GG’的分解算法-------
//参考教材:《数值分析》李乃成,梅立泉,科学出版社
//    《计算方法教程》第二版 凌永祥,陈明逵
#include<stdio.h>
#include<math.h>

int min(int a,int b);
int main(void)
{
 int size=10;
 int i,j,p=0;
 double A[10][10] = {0.0};
 double sum,up=0.0;
 printf("矩阵A[10][10]:\n");
 for(i=0;i<size;i++)
 {
  for(j=0;j<size;j++)
  {
   if(i==j)
    A[i][i]=i+1;
   else
    A[i][j]=min(i,j)-1;
   printf("%5.4f ",A[i][j]);
  }
  printf("\n");
 }
 A[0][0]=sqrt(A[0][0]);
 for(i=1;i<size;i++)
 {
  A[i][0]=A[i][0]/A[0][0];
 }
 for(j=1;i<size-1;i++)
 {
  sum=0.0;
  for(p=0;p<=j-1;p++)
  {
   sum=sum+A[j][p]*A[j][p];
  }
  A[j][j]=sqrt(A[j][j]-sum);
  for(i=j+1;j<size;j++)
  {
   sum=0.0;
   for(p=0;p<=j-1;p++)
   {
    sum=sum+A[i][p]*A[j][p];
   }
   A[i][j]=(A[i][j]-sum)/A[j][j];
  }

 }
 printf("\nCholesky分解后的矩阵G[10][10]:\n");
 for(i=0;i<size;i++)
 {
  for(j=0;j<size;j++)
  {
   if(i<j)
   {
    printf("%5.4f ",up);
   }
   else
   {
    printf("%5.4f ",A[i][j]);
   }
   
  }
  printf("\n");
 }

 return 0;
}

int min(int a,int b)
{
 return a<b?a:b;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Cholesky分解

Cholesky 分解 1、Cholesky 分解的原因; 2、实正定Hermit矩阵的完全Cholesky分解及简单实现; 3、实现矩阵计算的实用工具和网址

cholesky分解法

Cholesky分解对称正定矩阵三角分解的一个基本方法。该方法是LU的特殊形式,其中L和U转置。利用这个性质我们可以方便的解得L的值。然后再利用LU法的回代过程的到方程组的解,其代码如下:#inclu...

c语言实现cholesky分解

/* file: cholesky.c */ /* Take the cholesky decomposition in the manner described in FA Graybil...

【Dongle】【程序语言】文法——乔姆斯基分类法

乔姆斯基分类法的四种类型:0型文法、1型文法、2型文法和3型文法的通俗理解。

线性代数导论28——正定矩阵和最小值

本文是Gilbert Strang的线性代数导论课程笔记。课程地址:http://v.163.com/special/opencourse/daishu.html   第二十八课时:正定矩阵和最小值...

算法 楚列斯基

内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)