其他分享
首页 > 其他分享> > 让自己更加深刻得理解for循环

让自己更加深刻得理解for循环

作者:互联网

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Cholesky分解定理:就是把一个正定的矩阵分解成两个对称的三角阵
A = L L T A = LL^{T} A=LLT
若要 L L L为单位下三角阵,则有
A = L D L T A = LDL^{T} A=LDLT

下面是 A = L D L T A = LDL^{T} A=LDLT的代码实现


import numpy as np
def factory(A):
   
    n = len(A)
    L = np.eye((n))
    D = np.ones(n)
    mid_l = 0
    
    D[0] = A[0][0]
    for i in range(1,n):
        L[i][0] = A[i][0]/D[0]
    
    
    for j in range(1,n-1):
        D[j]=A[j][j]
        for i in range(0,j):
            D[j] = D[j] - (L[j][i]**2)*D[i]
        for i in range(j+1,n):
            for k in range(j):
                mid_l = mid_l + L[i][k]*D[k]*L[j][k] 
                L[i][j] = (A[i][j]-mid_l)/D[j]
                mid_l = 0
    
    D[n-1] = A[n-1][n-1]
    for i in range(n-1):
        D[n-1] = D[n-1] - (L[n-1][i]**2)*D[i]
        
    print(L)
    print(D)

注意事项(个人收获):
1.不要嵌套太多个for,不要把算法全部写在一个式子里面
2.要分而治之
3.每个for循环的含义不一样,这样才不容易乱,例如:最外层的
for j in range(1,n-1)循环是将整个算法分为一个D和一系列L,
从而使得我们只需要研究清楚这一个循环的具体实施步骤;
而 j 内部的几个 i 的循环,实际上是为了算出具体的 D 和 L ,
这样想,才不容易乱!
在这里插入图片描述

标签:深刻,理解,mid,LDL,print,range,循环,np
来源: https://blog.csdn.net/weixin_51447572/article/details/115288387