平方根法求解正定矩陣的線性方程組的Python實現

2021-09-10 17:23:34 字數 1444 閱讀 4467

平方根法求解正定矩陣的線性方程組的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=0def get_under(a):#獲取a的下三角矩陣

under=list(np.zeros((len(a),len(a))))

for i in a:

x=a.index(i)

n=0for t in i:

if n<=x:

under[x][n]=a[x][n]

n=n+1

d=for i in under:

return d

def get_base(m):#給乙個矩陣為基,在這個基上修改得到我們的答案

base=list(np.zeros((len(a),len(a))))

return base

def get_gt_d(a,base,k):#對於對角線上的元素有這樣的演算法

m=0sum1=0.00000000000

while m < k:

sum1=sum1+(base[k][m])**2

m=m+1

base[k][k]=(a[k][k]-sum1)**(0.5000000000)

return base

def get_gt_nd(a,base,i,k):#對於非對角線上的元素有這樣的解法,應該可以和上面一部分並在一塊

if i==k:

return base

else:

sum1=0.0000000000000

m=0if k-1<0:

base[i][k]=a[i][k]/base[k][k]

else:

while m最後解得x=(-1,2,1)』,解答完成

改進平方根法解矩陣

float data 3 3 矩陣a 的原始資料 float datat 3 3 分解過程的矩陣 float datal 3 3 分解過後的l矩陣 float datad 3 3 分解過後的d 矩陣 float y 3 定義了乙個y的單行的矩陣 float b 3 所給定的初始值的資料 float ...

迭代法求解非線性方程的根

1 求解的是非線性方程放f x 0的根 1 判斷使用全域性收斂性定理還是區域性收斂性定理 全域性收斂性 未知根,已知根的取值區間 定理1.1 1.2 區域性收斂性 已知根,即已知根的鄰域 定理1.3 1.4 2 解題步驟 根的存在性 零點存在定理 唯一性 單調性 反證法 迭代格式的收斂性 一般用 a...

用牛頓法求方程的根(重點是平方根)

牛頓迭代法 newton s method 又稱為牛頓 拉夫遜方法 newton raphson method 它是牛頓在17世紀提出的一種在實數域和複數域上近似求解方程的方法。多數方程不存在求根公式,因此求精確根非常困難,甚至不可能,從而尋找方程的近似根就顯得特別重要。方法使用函式f x 的泰勒級...