'''
《矩陣分析與應用》小作業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 第一重迴圈...