**
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分解...