python共軛梯度法特征值迭代次數(shù)討論
輸入各種特征值聚堆與分散時(shí)的矩陣,并應(yīng)用共軛梯度法,觀察迭代次數(shù)與聚堆情況的關(guān)系。
因?yàn)閷?duì)角矩陣的對(duì)角線(xiàn)元素為其特征值,則用對(duì)角矩陣討論較為方便代碼
import numpy as npdef cg(x0, A, b): r0 = np.dot(A, x0) - b p0 = -r0 rk = r0 pk = p0 xk = x0 t = 0 #記錄迭代次數(shù) while np.linalg.norm(rk) >= 1e-6: rr = np.dot(rk.T, rk) ak = rr / np.dot(np.dot(pk.T, A), pk) xk = xk + ak * pk rk = rk + ak * np.dot(A, pk) bk = np.dot(rk.T, rk) / rr pk = -rk + bk * pk t += 1 return xk, t#輸入列表,生成以列表為對(duì)角元素的對(duì)角矩陣def Diagonal_matrix(D): n = len(D) diag = np.zeros((n,n)) for i in range(n): diag[i][i] = D[i] return diag#矩陣對(duì)角線(xiàn)元素D_1 = [1, 1, 1, 1, 1, 6, 7, 8, 9, 10]D_2 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]D_3 = [0.8, 0.9, 1, 1.1, 1.2, 6, 7, 8, 9, 10]D_4 = [1 - 2*1e-7, 1 - 1e-7, 1, 1 + 1e-7, 1 + 2*1e-7, 6, 7, 8, 9, 10]D_5 = [1, 1, 1, 2, 2, 2, 3, 3, 3, 10]#初始值x0 = np.zeros((10,1))b = np.ones((10,1)) #生成對(duì)角矩陣diag1 = Diagonal_matrix(D_1)diag2 = Diagonal_matrix(D_2)diag3 = Diagonal_matrix(D_3)diag4 = Diagonal_matrix(D_4)diag5 = Diagonal_matrix(D_5)#共軛梯度法迭代x_1, n_1 = cg(x0, diag1, b)x_2, n_2 = cg(x0, diag2, b)x_3, n_3 = cg(x0, diag3, b)x_4, n_4 = cg(x0, diag4, b)x_5, n_5 = cg(x0, diag5, b)n = [n_1, n_2, n_3, n_4, n_5]#輸出for i in range(5): print(’矩陣’,i + 1 ,’的迭代次數(shù)為: ’, n[i])
矩陣1,前5個(gè)元素聚堆且都為相同元素
矩陣2,特征值分散
矩陣3,前5個(gè)特征值聚堆,但是最大差為0.4 ,而cg法精度為1e-6
矩陣4,前5個(gè)特征值聚堆,且相差最大小于1e-6
矩陣5,三聚堆輸出:
分析:
聚堆特征值可看作一個(gè)特征值 特征值差小于迭代精度時(shí)被看作聚堆 例如矩陣5,前三個(gè)對(duì)角元素看作一個(gè),4-6元素看作一個(gè),7-9看作一個(gè) 一共4個(gè)元素,則需要迭代4次以上就是python共軛梯度法特征值迭代次數(shù)討論的詳細(xì)內(nèi)容,更多關(guān)于python共軛梯度法迭代的資料請(qǐng)關(guān)注好吧啦網(wǎng)其它相關(guān)文章!
相關(guān)文章:
1. IntelliJ IDEA設(shè)置默認(rèn)瀏覽器的方法2. idea設(shè)置提示不區(qū)分大小寫(xiě)的方法3. HTTP協(xié)議常用的請(qǐng)求頭和響應(yīng)頭響應(yīng)詳解說(shuō)明(學(xué)習(xí))4. IntelliJ IDEA創(chuàng)建web項(xiàng)目的方法5. VMware中如何安裝Ubuntu6. docker容器調(diào)用yum報(bào)錯(cuò)的解決辦法7. .NET SkiaSharp 生成二維碼驗(yàn)證碼及指定區(qū)域截取方法實(shí)現(xiàn)8. CentOS郵件服務(wù)器搭建系列—— POP / IMAP 服務(wù)器的構(gòu)建( Dovecot )9. css代碼優(yōu)化的12個(gè)技巧10. django創(chuàng)建css文件夾的具體方法
