平方根法求解正定矩陣的線性方程組的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 的泰勒級...