平方根法求解正定矩阵的线性方程组的Python实现
定理:对线性方程组Ax=b,若A唯正定矩阵,则有唯一分解A=LU,且U的对角线元素大于0,而U可以进一步分解为一个对角矩阵D与一个上三角矩阵的乘积,设为U=DM,进而A=LDM,又由于A是一个正定矩阵,因此A’=(LDM)’=M’DL’=A=LDM,于是有M=L’,即A=LDL’,令D=D^0.5 * D0.5,再令G=L*D0.5,则有A=G*G’,这一分解成为cholesky分解。Ax=b转化为Gy=b,G’x=y,这一方法成为平方根法。
给出一个例子,见图片
下面是平方根法的Python实现。尽量少的使用numpy。
# -*- coding: utf-8 -*-
"""
Created on Mon Feb 11 09:31:48 2019
@author: 鹰皇
"""
#平方根法
import numpy as np
A=[[4,2,4],[2,10,-1],[4,-1,6]]
b=[[4,17,0]]
print len(A)
k=0
def get_under(A):#获取A的下三角矩阵
Under=list(np.zeros((len(A),len(A))))
for i in A:
x=A.index(i)
n=0
for t in i:
if n<=x:
Under[x][n]=A[x][n]
n=n+1
d=[]
for i in Under:
d.append((list(i)))
return d
def get_base(m):#给一个矩阵为基,在这个基上修改得到我们的答案
base=list(np.zeros((len(A),len(A))))
retur