python共軛梯度法特征值迭代次數(shù)討論
共軛梯度法,特征值聚堆情況下迭代次數(shù)討論
輸入各種特征值聚堆與分散時(shí)的矩陣,并應(yīng)用共軛梯度法,觀(guān)察迭代次數(shù)與聚堆情況的關(guān)系。

因?yàn)閷?duì)角矩陣的對(duì)角線(xiàn)元素為其特征值,則用對(duì)角矩陣討論較為方便
代碼
import numpy as np
def 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)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python字典創(chuàng)建 遍歷 添加等實(shí)用基礎(chǔ)操作技巧
字段是Python是字典中唯一的鍵-值類(lèi)型,本文講述了Python中字典如何創(chuàng)建 遍歷 添加等實(shí)用基礎(chǔ)操作技巧,內(nèi)容非?;A(chǔ)但非常重要,一定要熟練掌握2018-09-09
Tensorflow實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)用于人臉關(guān)鍵點(diǎn)識(shí)別
這篇文章主要介紹了Tensorflow實(shí)現(xiàn)卷積神經(jīng)網(wǎng)絡(luò)用于人臉關(guān)鍵點(diǎn)識(shí)別,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-03-03
使用Python編寫(xiě)一個(gè)桌面便簽應(yīng)用
ChatGPT的編程能力也不差,本文將一步一步提出要求,讓ChatGPT根據(jù)我們的要求,編寫(xiě)出一個(gè)可用的,可打包運(yùn)行的桌面便簽,感興趣的可以了解一下2023-06-06
Python函數(shù)之zip函數(shù)的介紹與實(shí)際應(yīng)用
zip() 函數(shù)用于將可迭代的對(duì)象作為參數(shù),將對(duì)象中對(duì)應(yīng)的元素打包成一個(gè)個(gè)元組,然后返回由這些元組組成的對(duì)象(python2 返回的是這些元組組成的列表 ),下面這篇文章主要給大家介紹了關(guān)于Python函數(shù)之zip函數(shù)實(shí)際應(yīng)用的相關(guān)資料,需要的朋友可以參考下2022-03-03
Python多線(xiàn)程threading join和守護(hù)線(xiàn)程setDeamon原理詳解
這篇文章主要介紹了Python多線(xiàn)程threading join和守護(hù)線(xiàn)程setDeamon原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
python3爬蟲(chóng)中引用Queue的實(shí)例講解
在本篇內(nèi)容里小編給大家整理的是一篇關(guān)于python3爬蟲(chóng)中引用Queue的實(shí)例講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。2020-11-11
Python如何爬取微信公眾號(hào)文章和評(píng)論(基于 Fiddler 抓包分析)
這篇文章主要介紹了Python如何爬取微信公眾號(hào)文章和評(píng)論(基于 Fiddler 抓包分析),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-06-06

