Cholesky分解:Python和Matlab

Cholesky分解是对称正定矩阵求逆的一种有效方法。让我们在Python和Matlab中演示该方法。

胆碱酯酶因子

任何n次n对称的正定矩阵 A类 可以分解为

A=LL^T

哪里L(左)n次n下三角矩阵L(左)通常称为“胆碱酯酶因子 A类”. 矩阵L(左)可以解释为正定矩阵的平方根A类.

查找Cholesky分解的基本算法:

注:在下面的文本中,用希腊字母表示的变量表示标量值,用拉丁字母小表示的变量是列向量,而用拉丁字母大写表示的变量则是矩阵。

给定正定矩阵A类,它的分区如下。

Cholesky因子分解

\字母{11}= 的第一个元素A类L(左)分别地
a{21},l{21}=从第二行开始的第一列的列向量A类L(左)分别地
A_{22},L_{22}=矩阵的剩余下半部分A类L(左)大小分别为(n-1)次

已对矩阵进行分区A类如上所示,可以通过以下迭代过程计算Cholesky因子分解。

计算Cholesky因式分解的步骤:

步骤1:计算标量:\lambda{11}=\sqrt{\alpha{11}}
步骤2:计算列向量:l{21}=a{21}/\lambda{11}
步骤3:计算矩阵:A_{22}=l_{21}l^T_{21}+l_{22}升^T_{22}
步骤4:更换A类具有A_{22},即,A=A_{22}
第5步:从第1步开始重复,直到第4步的矩阵大小变为1\次1.

Matlab程序(实现上述算法):

函数1:[F]=cholesky(A,选项)

函数[F]=cholesky(A,选项)%求正定矩阵a的Cholesky因子的函数%作者Mathuranathanhttps://www.gaussianwaves.com网站%知识共享授权:CC-NC-BY-SA 3.0%A=正定矩阵%选项可以是以下“下”、“上”之一%L=A的Cholesky因子分解,使得A=LL^T%如果option='Lower',则返回Cholesky因子矩阵L%下三角形状%如果option='Upper',则返回Cholesky因子矩阵L%上三角形状%正定性测试(需要满足对称性)%检查矩阵是否对称如果~等于(A,A'),错误(“输入矩阵不对称”);结束如果是正定(A),[m,n]=尺寸(A);L=零(m,m);%初始化为全零行=1;col=1;j=1;对于i=1:m,a11=平方(A(1,1));L(行,列)=a11;如果(m~=1),%到达最后一个分区L21=A(j+1:m,1)/a11;L(行+1:结束,列)=L21;A=(A(j+1:m,j+1:m)-L21*L21');[m,n]=尺寸(A);行=行+1;col=col+1;结束结束切换nargin案例2如果strcmpi(option,'upper'),F=L';其他的如果strcmpi(option,'lower'),F=L;else错误(“无效选项”);结束结束案例1F=L;否则错误(“输入参数不足”)结束其他的错误(“给定矩阵A不是正定的”);结束结束

函数2:x=isPositiveDefinite(A)

函数x=是正定(A)%检查给定矩阵a是否正定的函数%作者Mathuranathanhttps://www.gaussianwaves.com%知识共享授权:CC-NC-BY-SA 3.0%如果输入矩阵是正定的,则返回x=1%如果输入矩阵不是正定的,则返回x=0[m,~]=尺寸(A);%积极确定性测试x=1;%检查积极性的标志对于i=1:msubA=A(1:i,1:i);%提取左上角的kxk子矩阵if(det(subA)<=0);%检查kxk子矩阵的行列式是否为+vex=0;断裂;结束结束%用于调试%如果是x,则显示(“给定矩阵为正定”);%else显示(“给定矩阵非正定”);结束结束

样品运行:

A是随机生成的正定矩阵。要生成随机正定矩阵,请检查下面“外部链接”部分中的链接。

>>A=[3.3821,0.8784,0.3613,-2.0349;0.8784、2.0068,0.5587,0.1169;0.3613、0.5587、3.6656,0.7807;-2.0348,0.1169,0.7807,2.5397];

A=\开始{bmatrix}3.3821&0.8784&0.3613&-2.0349 \\ 0.8784&2.0068&0.5587&0.1169\\ 0.3613&0.5587&3.6656&0.7807 \\-2.0349&0.1169&0.7807&2.5397\结束{bmatricx}

>>cholesky(A,‘下’)

ans=\ begin{bmatrix}1.8391&0&0&0\\0.4776&1.3337&0&0\\0.1964&0.3486&1.8723&0\\-1.1065&0.4839&0.4430&0.9408\ end{bmatrix}

>>cholesky(A,‘上部’)

ans=\begin{bmatrix}1.8391&0.4776&0.1964&-11065 \\0&1.3337&0.3486&0.4839 \\0&0&1.8723&0.4430\\ 0&0&0&0.9408 \end{bmatrix}

Python(numpy)

让我们使用Python的Numpy包验证上述结果。numpy包numpy.linalg公司包含乔列斯基计算Cholesky分解的函数(返回L(左)下三角矩阵形式)。可以按如下方式调用

>>>将numpy导入为np>>>A=[[3.3821,0.8784,0.3613,-2.0349]\[0.8784,2.0068,0.5587,0.1169]\[0.3613, 0.5587, 3.6656, 0.7807],\[-2.0349, 0.1169, 0.7807, 2.5397]]>>>np.linalg.cholesky(A)>>>数组([[1.83904867,0,0.        ,  0.        ],[ 0.47763826,  1.33366476,  0.        ,  0.        ],[ 0.19646027,  0.34856065,  1.87230041,  0.        ],[-1.106496  ,  0.48393333,  0.44298574,  0.94071184]])

对此文章进行评分:可怜的低于平均水平平均很好杰出的(10平均票数:4.30(共5个)

相关主题

[1]估计理论导论
[2]估计量的偏差
[3]最小方差无偏估计(MVUE)
[4]最大似然估计
[5]最大似然解码
[6]概率与随机过程
[7]似然函数和最大似然估计(MLE)
[8]分数、费希尔信息和估计灵敏度
[9]Cramer-Rao下界(CRLB)简介
[10]标量参数估计的Cramer-Rao下界
[11]应用Cramer-Rao下界(CRLB)求最小方差无偏估计(MVUE)
[12]有效估计和CRLB
[13]相位估计的Cramer-Rao下限
[14]标准化CRLB——CRLB的另一种形式及其与估计灵敏度的关系
[15]向量参数估计的Cramer-Rao下界(CRLB)
[16]均方误差–为什么我们要将其用于估算问题
[17]如何使用普通最小二乘法(OLS)估计未知参数
[18]信号处理的基本初等矩阵代数
[19]为什么要进行Cholesky分解?示例案例:
[20]矩阵正定性的检验
[21]使用正向和反向替换求解三角形矩阵
[22]Cholesky因子分解-Matlab和Python
[23]随机信号的LTI系统模型–AR、MA和ARMA模型
[24]AR和ARMA模型的比较——平方误差最小化
[25]尤尔·沃克估计
[26]自相关(Correlogram)和持久性——时间序列分析
[27]线性模型-最小二乘估计(LSE)
[28]最佳线性无偏估计(蓝色)

作者的书籍

Matlab中的无线通信系统
Matlab中的无线通信系统
第二版(PDF)

可怜的低于平均水平平均很好杰出的(168平均票数:3.71(共5个)

使用Python的数字调制
使用Python的数字调制
(PDF电子书)

可怜的低于平均水平平均很好杰出的(124平均票数:3.60(共5个)

数字模块使用matlab图书封面
使用Matlab的数字调制
(PDF电子书)

可怜的低于平均水平平均很好杰出的(129平均票数:3.71(共5个)

手绘通信工程最佳书籍
信号处理最佳书籍

发表您的宝贵意见!!!