數值分析 python LU分解法

2021-09-25 20:29:28 字數 3023 閱讀 5249

**

lu分解在本質上是高斯消元法的一種表達形式。實質上是將a通過初等行變換變成乙個上三角矩陣,其變換矩陣就是乙個單位下三角矩陣。這正是所謂的杜爾里特演算法(doolittle algorithm):從下至上地對矩陣a做初等行變換,將對角線左下方的元素變成零,然後再證明這些行變換的效果等同於左乘一系列單位下三角矩陣,這一系列單位下三角矩陣的乘積的逆就是l矩陣,它也是乙個單位下三角矩陣。這類演算法的複雜度一般在(三分之二的n三次方) 左右。

import numpy as np

a =[[

2,2,

3],[

4,7,

7],[

-2,4

,5]]

b =[[

3],[

1],[

-7]]

unit_matrix=[[

1,0,

0],[

0,1,

0],[

0,0,

1]]#合併兩個矩陣

defaugmented_matrix

(x, y)

:return

[aa + bb for aa, bb in

zip(x, y)

]def

lu_decomposition()

: a_unit_matrix=augmented_matrix(a,unit_matrix)

print

(np.array(a_unit_matrix)

)# 交換主元

for j in

range

(len

(a_unit_matrix)):

if a_unit_matrix[j]

[j]==0:

for w in

range

(len

(a_unit_matrix)):

if a_unit_matrix[w]

[j]!=0:

l = a_unit_matrix[w]

a_unit_matrix[w]

= a_unit_matrix[j]

a_unit_matrix[j]

= l break

#化為上三角矩陣

j =0while j <

len(a_unit_matrix)

: line = a_unit_matrix[j]

lest_0 =

if j==0:

for x0 in line:

x = x0

else

:for x0 in line:

x = x0/a_unit_matrix[0]

[0] a_unit_matrix[j]

= lest_0

flag = j +

1while flag <

len(a_unit_matrix)

: lest_1=

temp1 = a_unit_matrix[flag]

[j]/a_unit_matrix[j]

[j] i =

0for x1 in a_unit_matrix[flag]

: x = x1-

(temp1 * lest_0[i]

) i=i+

1 a_unit_matrix[flag]

= lest_1

flag = flag +

1 j = j +

1print

("將a矩陣與單位矩陣合併,然後化為下三角矩陣為:"

)for i in

range

(len

(a_unit_matrix)):

m =1/ a_unit_matrix[i]

[i+len

(a)]

for j in

range

(len

(a_unit_matrix[0]

)): a_unit_matrix[i]

[j]=m*a_unit_matrix[i]

[j]print

(np.array(a_unit_matrix)

)# 分解為l的逆矩陣和u矩陣

l=u=

for i in

range

(len

(a_unit_matrix)):

)[])

for i in

range

(len

(a_unit_matrix)):

for j in

range

(len

(a_unit_matrix[i]))

:if j<

len(a_unit_matrix[i])/

2:u[i]

[j])

else

: l[i]

[j])

print

("l矩陣為:"

)print

(np.linalg.inv(np.array(l)))

print

("u矩陣為:"

)print

(np.array(u)

)# 求d矩陣

d=np.dot(l,b)

print

("d矩陣為:"

)print

(d)# 通過u的逆矩陣求x矩陣

u_inverse = np.linalg.inv(np.array(u)

) x = np.dot(u_inverse, d)

print

("x矩陣為:"

)print

(x)

lu_decomposition(

)

數值分析Guass分解 錯誤討論

在數值分析求解線性方程組當中常常會用到高斯分解,對線性方程組的係數矩陣a aa進行 l ll u uu分解,即 a l ua l u a l u其中 l ll 為主對角線元素均為 1的單位下三角矩陣,u uu 為 上三角矩陣,可以將原線性方程組 ax bax b ax b 轉換成兩個三角矩陣方程組,...

時間序列分解 STL分解法

stl seasonal and trend decomposition using loess 是以魯棒區域性加權回歸作為平滑方法的時間序列分解方法。其中loess locally weighted scatterplot smoothing,lowess or loess 為區域性多項式回歸擬合...

M 數值分解

description 對乙個自然數n 1 n 50 n可以分解成若干個數字 數字可以是1,2,3,9 之和,問題是如何分解能使這些數字的乘積最大。input 輸入資料有多組,每組佔一行,每行包含乙個自然數n 1 n 50 輸入檔案直到eof為止!output 對每組輸入,輸出有2行。第一行是n分解...