Cholesky分解针对的是对称非正定矩阵

主要目的包括将原矩阵强制转换为对称正定矩阵以及保证分解过程的稳定性
修正cholesky分解的做法
给定对称矩阵A∈Rn×nA \in R^{n\times n}A∈Rn×n:计算出
δ=maxi=1,…,n∣Aii∣\delta=max_{i=1,\ldots,n}|A_{ii}|δ=maxi=1,…,n​∣Aii​∣
ν=maxi≠j∣Ai,j∣\nu=max_{i\neq j}|A_{i,j}|ν=maxi​=j​∣Ai,j​∣
β2=max(δ,ν(n2−1),μ)\beta^2=max(\delta,\frac{\nu}{\sqrt(n^2-1)},\mu)β2=max(δ,(​n2−1)ν​,μ)
1:dj′=max{δ,∣Aj,j−∑r=1j−1Cj,r2dr−1∣}d_{j}^{'}=max\{\delta,|A_{j,j}-\sum_{r=1}^{j-1}C_{j,r}^{2}d_{r}^{-1}|\}dj′​=max{δ,∣Aj,j​−∑r=1j−1​Cj,r2​dr−1​∣}
2:Ci,j=Ai,j−∑r=1j−1Lj,rCi,r,i≥j+1,…,nC_{i,j}=A_{i,j}-\sum_{r=1}^{j-1}L_{j,r}C_{i,r},i\geq j+1,\ldots,nCi,j​=Ai,j​−∑r=1j−1​Lj,r​Ci,r​,i≥j+1,…,n
3:θj=max{∣Ci,j,i>j},(j=n,θj=0)\theta_{j}=max\{|C_{i,j},i>j\},(j=n,\theta_j=0)θj​=max{∣Ci,j​,i>j},(j=n,θj​=0)
4:dj=max{dj′,θj2β2}d_j=max\{d_{j}^{'},\frac{\theta_{j}^{2}}{\beta^{2}}\}dj​=max{dj′​,β2θj2​​}
5:Li,j=Ci,jdj,i≥j+1,…,nL_{i,j}=\frac{C_{i,j}}{d_{j}},i\geq j+1,\ldots,nLi,j​=dj​Ci,j​​,i≥j+1,…,n
上面步骤中,目的是为了输出矩阵L和矩阵D,其中L是单位下三角矩阵,D是对角矩阵,D=diag{d1,d2,…,dn}D=diag\{d_1,d_2,\ldots,d_n\}D=diag{d1​,d2​,…,dn​}
修正以后的矩阵Axiu=LDLTA_{xiu}=LDL^{T}Axiu​=LDLT,可以证明Axiu−AA_{xiu}-AAxiu​−A是一个对角矩阵。下面我们放代码:

#修正cholesky分解
def XC(A):n = A.shape[0]dia = np.diagonal(A.numpy())#以列表存储矩阵对角元素delta = torch.tensor(max(abs(dia)))#delta = (max(abs(dia))).clone().detach()U = np.triu(A.numpy()) - np.diag(dia)#取出非对角上三角函数#print(abs(U).max())be = max(delta,abs(U).max()/(n**2 - 1))beta = (1/be).clone().detach()#根据A给出beta^2分之一的值C = torch.zeros_like(A);L = torch.eye(n,n);D = torch.zeros_like(A)d = torch.zeros(n);theta = torch.zeros(n)#----------------------d[0] = max(delta,abs(A[0,0]))for i in range(1,n):C[i,0] = A[i,0]   theta[0] = max(abs(C[:,0]))#theta_0D[0,0] = max(beta*theta[0]**2,d[0])for i in range(1,n):L[i,0] = C[i,0]/D[0,0]#------------------------------for j in range(1,n):for i in range(j+1,n):for r in range(j):d[j] = A[j,j] - C[j,r]**2/d[r]C[i,j] = A[i,j] - L[j,r]*C[i,r]d[j] = max(delta,abs(d[j]))theta[j] = max(abs(C[:,j]))D[j,j] = max(d[j],beta*theta[j]**2)for m in range(j + 1,n):L[m,j] = C[m,j]/D[j,j]#print(beta)return L,D
A = torch.eye(3,3)
A[0,1] = 1.0;A[0,2] = 2.0
A[1,0] = 1;A[1,1] += 1e-7;A[1,2] = 3
A[2,0] = 2;A[2,1] = 3
print(A)
L,D = XC(A)
print(L@D@L.t() - A)

Python实现修正cholesky分解相关推荐

  1. 【数值分析】Doolittle分解和Cholesky分解的Python实现

    Doolittle 分解 import numpy as np # A=[[1.0,2.0,-3.0], # [2.0,-1.0,3.0], # [3.0,-2.0,2.0]]# A=[ [2, 4, ...

  2. Matlab与线性代数--矩阵的Cholesky分解

    本图文介绍了Matlab对正交矩阵的Cholesky分解操作.

  3. 线性代数笔记: Cholesky分解

    1 介绍 当一个实矩阵A是对称正定矩阵的时候,它可以分解成一个下三角矩阵L以及它的转置的乘积,即: 1.1 矩阵半正定的情况 如果矩阵是正定的话,那么L唯一确定:如果矩阵是半正定的话,那么也可以分解, ...

  4. Python中矩阵SVD分解及还原

    python中SVD分解及还原: import numpy as np from numpy import linalg as la S = np.zeros([5,5]) A=np.random.r ...

  5. matlab和python中的svd分解的区别

    matlab中的svd分解中 得到的第三项是V, 代码如下: A=[1 2 3 4 5 6 7 8 9; 5 6 7 8 9 0 8 6 7; 9 0 8 7 1 4 3 2 1; 6 4 2 1 3 ...

  6. cholesky分解java代码_Cholesky 分解(转)

    Cholesky 分解是把一个对称正定的矩阵表示成一个下三角矩阵L和其转置的乘积的分解. 它要求矩阵的所有特征值必须大于零,故分解的下三角的对角元也是大于零的. Cholesky分解法又称平方根法,是 ...

  7. 矩阵的Cholesky分解

    原文链接:矩阵的Cholesky分解 首先来复习线性代数中几个重要的概念. 1)如果一个复矩阵A = A*(共轭转置),则A称为Hermitian矩阵.(注意,矩阵A转置后仍为其本身,显然A一定是方阵 ...

  8. 使用 uBLAS 进行实对称正定矩阵的 Cholesky 分解

    Cholesky 分解理论 矩阵分解--三角分解(Cholesky 分解) 矩阵分解--三角分解(二) 注:只有实对称矩阵才有 Cholesky 分解理论. 已知实对称正定矩阵 AA,其 Choles ...

  9. 矩阵分解——三角分解(Cholesky 分解)

    (1)一个对角元素都是1的下三角矩阵,称为单位下三角矩阵. (2)上(下)三角矩阵的乘积仍是上(下)三角矩阵: (3)一般来说,矩阵的三角分解不唯一. (4)实对称正定矩阵 AA,Δk>0\De ...

  10. cholesky分解_Time Series Analysis-1.2 LDL分解

    最近考完两个小quiz,停了一段时间,今晚抽空继续来分享这门课的笔记. 1.前言 上一期分享了Cholesky分解的基本步骤和伪代码,本期介绍另外一种矩阵分解的方法--LDL分解. 首先补充一下,近几 ...

最新文章

  1. R语言使用fs包的dir_create函数在指定路径下创建新的文件夹、使用file_create函数在指定文件夹下创建文件
  2. JAVA教程 第六讲 Java的线程和Java Applet(二)
  3. Flutter 构建一个完整的聊天应用程序
  4. valid parentheses java_Valid Parentheses Java
  5. Collection中list集合的应用常见的方法
  6. React开发(162):React关于 this.props.children 总结
  7. ubuntu远程访问摄像头的设置
  8. passed into methods by value java专题
  9. Java GUI简单点名器
  10. SCI从入门到精髓(四)——SCI论文写作技巧
  11. idp 苹果开发账号续费
  12. 阿里消息中间件ONS消息乱序问题(二)
  13. [音乐天堂]爱尔兰的小童星Declan
  14. live share_带Live Share的Visual Studio Code中的实时编码入门
  15. 《数值分析》-- 埃尔米特插值与分段插值
  16. 虚函数:多态的实现原理
  17. 2019复旦大学计算机分数线,2019复旦大学录取分数线(在各省市录取数据)
  18. 郑莉老师c++第五版+b站视频 学习笔记
  19. ABAP面向对象之建造者模式(Builder Pattern)
  20. iphone图片编辑画笔_ios13照片编辑画笔在哪里

热门文章

  1. 公式冒号是什么意思_excel函数公式中的:号是什么意思
  2. k3系统的架构及简介
  3. 用HTML创建幻灯片
  4. C++使用Socks5协议进行代理上网(一)
  5. 关于如何关闭Windows错误报告
  6. 戴尔N5110装WIN10的体验
  7. 【数值计算方法】学习笔记
  8. flash播放器代码
  9. FlashFXP v3.5.4注册码+FlashFXP v3.6.0注册码+FlashFXP v3.7.2.build.1266...
  10. 目前使用SAP的公司列表