基于Python实现的Cholesky分解与Crout分解
目录
- Cholesky分解
- 避免开平方的改进
- Crout分解
阅读这篇博客需要有矩阵Doolittle分解的理论基础。
Cholesky分解
对于对称正定矩阵,如果 AAA 的所有顺序主子式均大于0,则该矩阵可分解为 A=LUA = LUA=LU 。其中,UUU 为上三角矩阵,并分解为 U=DMU=DMU=DM , DDD 为对角矩阵 diag(u11,u22,…,unn)diag(u_{11},u_{22},\dots,u_{nn})diag(u11,u22,…,unn),M为单位上三角矩阵。
利用矩阵的对称性和Doolittle分解的唯一性进行如下推导
A=LDM=AT=(LDM)T=MTDLTM=LT(分解的唯一性)A=LDLTA = LDM = A^T = (LDM)^T=M^TDL^T\\ \;\\ M=L^T(分解的唯一性)\\ \;\\ A = LDL^T A=LDM=AT=(LDM)T=MTDLTM=LT(分解的唯一性)A=LDLT
因为A是正定的,所以若令 D12=diag(u11,u22,…,unn)D^\frac{1}2=diag(\sqrt{u_{11}},\sqrt{u_{22}},\dots,\sqrt{u_{nn}})D21=diag(u11,u22,…,unn),有
D=D12D12T令G=LD12A=GGTD = D^\frac{1}2{D^\frac{1}2}^T\\ \;\\ 令G=LD^\frac{1}2\\ \;\\ A=GG^T D=D21D21T令G=LD21A=GGT
G为下三角矩阵,上述分解为正定矩阵的Cholesky分解
代码
#为方便示意不考虑时间空间代价
def Cholesky(matrix):w = matrix.shape[0]G = np.zeros((w,w))#实际上只用一半的空间就可以完成矩阵分解for i in range(w):G[i,i] = (matrix[i,i] - np.dot(G[i,:i],G[i,:i].T))**0.5for j in range(i+1,w):G[j,i] = (matrix[j,i] - np.dot(G[j,:i],G[i,:i].T))/G[i,i]return G
实验
C = np.array([[4,-2,4],[-2,5,0],[4,0,6]])
print(Cholesky(C))
结果
原矩阵
G
由于G的对称性,Cholesky分解所需的计算量和存储量仅为Doolittle分解的一半。
避免开平方的改进
在Cholesky分解的过程中,G的主元需要通过开平方运算,对于早期的计算机,开平方运算很耗费资源,所以人们在Cholesky分解的基础上进行改进,并没有引入 GGG 而是将矩阵分解为如下的形式
A=LDLTA = LDL^T A=LDLT
代码
#为方便示意不考虑时间空间代价
def Cholesky_plus(matrix):w = matrix.shape[0]L = np.zeros((w,w))for i in range(w):L[i,i] = 1D = np.zeros((w,w))for i in range(w):D[i,i] = matrix[i,i] - np.dot(np.dot(L[i,:i],D[:i,:i]),L[i,:i].T)for j in range(i+1,w):L[j,i] = (matrix[j,i] - np.dot(np.dot(L[j,:i],D[:i,:i]),L[i,:i].T))/D[i,i]return L,D
实验
L,D = Cholesky_plus(C)
print(L)
print(D)
print(np.dot(np.dot(L,D),L.T))
结果
原矩阵
L、DL、DL、D 以及 LDLTLDL^TLDLT
Crout分解
很简单的
A=LDM令T=LDA=TMA = LDM \\ \;\\ 令T = LD\\ \;\\ A=TM A=LDM令T=LDA=TM
这个 A=TMA=TMA=TM 就是Crout分解,其中T为下三角矩阵,M为单位上三角矩阵。嗯,和Doolittle分解很类似。。。。。
代码
def Crout(matrix):w = matrix.shape[0]T = np.zeros((w,w))M = np.zeros((w,w))for i in range(w):M[i,i] = 1for i in range(w):for j in range(i,w):T[j,i] = matrix[j,i] - np.dot(T[j,:i],M[:i,i])for j in range(i+1,w):M[i,j] = (matrix[i,j] - np.dot(T[i,:i],M[:i,j]))/T[i,i]return T,M
实验
A = np.array([[2,-1,0,0],[-1,2,-1,0],[0,-1,2,-1],[0,0,-1,2]])
T,M = Crout(A)
print(T)
print(M)
结果
原矩阵
T
M
基于Python实现的Cholesky分解与Crout分解相关推荐
- crout分解计算例题_矩阵与数值计算(2)——矩阵三角分解LU、PALU、Cholesky三角分解、QR分解...
前言 矩阵分解是设计算法的主要技巧,通过分解可以将复杂问题转化为几个简单问题求解,通常完成这一转化任务的主要技巧就是矩阵分解.例如,我们知道上三角矩阵和下三角矩阵是容易求解的,或者对角矩阵是最理想的求 ...
- 【数据挖掘】基于卷积神经网络的非侵入式负荷分解(NILM)Python实现
本方法主要利用基于卷积神经网络的非侵入式负荷分解方法实现住宅设备的识别,输入数据为在设备运行时获得的瞬态功率信号数据.训练卷积神经网络使用数据为开源数据REDD(1Hz),具体实现原理请参考文献下载链 ...
- python量化投资必背代码-基于python的开源量化交易,量化投资架构
原标题:基于python的开源量化交易,量化投资架构 github地址:https://github.com/bbfamily/abu abu能够帮助用户自动完善策略,主动分析策略产生的交易行为,智能 ...
- python篮球-基于Python/Java的人工智能篮球训练系统的制作方法
本发明涉及信息技术领域,尤其涉及一种基于Python/Java的人工智能篮球训练系统. 背景技术: 人工智能的发展已经开始渗透到各行各业.经过发明人的研究和检索,发现作为篮球训练,已经有专利申请.其中 ...
- 德巴赫猜想python_哥德巴赫猜想问题基于Python的验证方法研究
1.概述 Python语言[1,2]是一门面向对象的解释型高级程序设计语言,其不仅开源,而且支持命令式编程,包含丰富且易理解的标准库和扩展库,可以快速生成程序的原型,帮助开发者高效地完成任务.同时,P ...
- 基于Python的岭回归与LASSO回归模型介绍及实践
基于Python的岭回归与LASSO回归模型介绍及实践 这是一篇学习的总结笔记 参考自<从零开始学数据分析与挖掘> [中]刘顺祥 著 完整代码及实践所用数据集等资料放置于:Github 岭 ...
- 基于Python的线性回归预测模型介绍及实践
基于Python的线性回归预测模型介绍及实践 这是一篇学习的总结笔记 参考自<从零开始学数据分析与挖掘> [中]刘顺祥 著 完整代码及实践所用数据集等资料放置于:Github 线性回归预测 ...
- Flask Web开发:基于Python的Web应用开发实战
<Flask Web开发:基于Python的Web应用开发实战> 虽然简单的网站(Flask+Python+SAE)已经上线,但只是入门.开发大型网站,系统地学习一遍还是有必要的. 201 ...
- 基于python的文字识别系统,python神经网络识别图片
如何快速使用Python神经网络识别手写字符 CNN卷积神经网络是一种深度模型.它其实老早就已经可以成功训练并且应用了(最近可能deeplearning太火了,CNNs也往这里面靠. 虽然CNNs也属 ...
- 基于 Python 的大型超市商品销售关联度分析系统
温馨提示:文末有 CSDN 平台官方提供的学长 Wechat / QQ 名片 :) 1. 项目背景 本项目通过对数据挖掘领域中的关联规则经典算法Apriori,运用关联规则对某大型超市超市的部分数据进 ...
最新文章
- 破解CentOS的root密码(救援模式无密码)
- 看完JDK并发包源码的这个性能问题,我惊了!
- 前端工程师需要掌握的技能
- QT 通过QNetworkReply *获取对应请求的URL地址
- C语言内存/指针相关
- Elasticseach 从零开始学习记录(一) - 单实例环境搭建
- 问题六十八:着色模型(shading model)(1)——反射模型(reflection model)(3.1)——辐射学(Radiometry)
- linux 解压 7z 乱码,7z-linux下解决中文名乱码的终极办法
- 封装cuda/cudnn写卷积网络前向计算程序
- 微信小程序云开发教程-云函数入门(2)-接收参数、前端调用
- 阿里云储存OSS(服务端签名后前端直传)
- 架构师之路(七)之五视图方法论
- oracle经常考的题型是哪些,Oracle考试试题(带答案).doc
- adb命令 激活并设置默认输入法
- hihocoder图像算子(高斯消元)
- 彻底解决Word中子标题变黑块问题
- linux下c语言调用mysql,Linux下C语言操作MYSQL总结
- 我司工程师荣获2020年度网络安全等级保护测评体系建设工作表现突出个人
- macbook 终端命令怎么使用_玩转 Terminal 终端:入门指南及进阶技巧
- 23计算机考研22408上岸武汉理工大学经验贴