让自己更加深刻得理解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