Python實現部分主元法下LU分解

2021-10-10 01:39:58 字數 1600 閱讀 8269

'''

《矩陣分析與應用》小作業1 實現部分主元法下的lu分解 by苗棟

程式大體介紹:

引入了numpy便於對陣列的操作

①尋找出一列中絕對值最大的元素作為主元並進行陣列的行交換,並將l主對角線元素置為1

②構造兩個for迴圈,取出l和a對應的值並儲存

l[j, i] = a[j, i] / a[i, i]

a[j, :] = a[j, :] - l[j, i] * a[i, :]

③最後列印結果

'''import numpy as np

deflu_with_partial_pivoting

(a):

#轉換為float型別的陣列並初始化l

a = np.array(a, dtype=np.float64)

l = np.zeros_like(a)

m = a.shape[0]

#新建乙個單位矩陣p

p = np.identity(m)

#構造乙個雙重迴圈分別取出l和u的元素

for i in

range

(m-1):

#得到這一列中絕對值元素最大所在的行數

idx = i + np.argmax(

abs(a[i:

, i]))

#每列比較的元素遞減,因此加上了a[i:]後面的元素

#交換a,l,p的行

if idx != i & idx != m-1:

a[[i, idx],:

]= a[

[idx, i],:

] l[

[i, idx],:

]= l[

[idx, i],:

] p[

[i, idx],:

]= p[

[idx, i],:

]#主對角線元素至為1

l[i, i]=1

for j in

range

(i+1

, m)

:#計算l和u元素的值

l[j, i]

= a[j, i]

/ a[i, i]

a[j,:]

= a[j,:]

- l[j, i]

* a[i,:]

#最後處理一下主對角線元素

l[i+

1, i+1]

=1#得到u

u = np.array(a)

print

('l矩陣為:\n'

, l)

print

('u矩陣為:\n'

, u)

print

('p矩陣為:\n'

, p)

#測試程式

a = np.array([[

1,2,

-3,4

],[4

,8,12

,-8]

,[2,

3,2,

1],[

-3,-

1,1,

-4]]

)lu_with_partial_pivoting(a)

列主元Gauss消去法 C 實現

原理 列主元素消去法是為控制捨入誤差而提出來的一種演算法,列主元素消去法計算基本上能控制捨入誤差的影響,其基本思想是 在進行第 k k 1,2,n 1 步消元時,從第k列的 akk及其以下的各元素中選取絕對值最大的元素,然後通過行變換將它交換到主元素akk的位置上,再進行消元。列主元消去法的基本思想...

高斯列主元消去法以c 實現

肺炎期間上網課,學習工程與科學計算的乙個作業 通過c 進行實現 借鑑了大佬的演算法思想,原帖位址 解決了幾個問題,乙個是原來 輸入偶數陣列結果有誤,另外是輸出的陣列第一列不為零。如有問題或建議歡迎指正 include include using namespace std const int n 4...

高斯消元法的python實現

高斯消元法是解線性方程組的一種常見的方法,下面是高斯消元法的實現過程,下面的演算法僅能解決各主元素不為0的情況。下面是演算法的實現思路 1.演算法總共分為兩大步驟,第乙個步驟是將增廣矩陣消元形成上三角矩陣,第二個步驟是從下向上進行回帶完成解方程的步驟。2.在第乙個步驟裡總共有三重迴圈 1 第一重迴圈...