python共轭梯度法特征值迭代次数讨论

 更新时间:2021年04月07日 11:44:50   作者:嵩悟空  
这篇文章主要介绍了python共轭梯度法特征值迭代次数讨论,想了解共轭梯度法的同学,需要着重看一下

共轭梯度法,特征值聚堆情况下迭代次数讨论

输入各种特征值聚堆与分散时的矩阵,并应用共轭梯度法,观察迭代次数与聚堆情况的关系。

因为对角矩阵的对角线元素为其特征值,则用对角矩阵讨论较为方便
代码

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 #记录迭代次数
 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

#输入列表,生成以列表为对角元素的对角矩阵
def Diagonal_matrix(D):
 n = len(D)
 diag = np.zeros((n,n))
 for i in range(n):
  diag[i][i] = D[i]
 return diag
#矩阵对角线元素
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))  
#生成对角矩阵
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 ,'的迭代次数为: ', n[i])

矩阵1,前5个元素聚堆且都为相同元素

矩阵2,特征值分散

矩阵3,前5个特征值聚堆,但是最大差为0.4 ,而cg法精度为1e-6

矩阵4,前5个特征值聚堆,且相差最大小于1e-6

矩阵5,三聚堆
输出:

分析:

  • 聚堆特征值可看作一个特征值
  • 特征值差小于迭代精度时被看作聚堆
  • 例如矩阵5,前三个对角元素看作一个,4-6元素看作一个,7-9看作一个 一共4个元素,则需要迭代4次

以上就是python共轭梯度法特征值迭代次数讨论的详细内容,更多关于python共轭梯度法迭代的资料请关注脚本之家其它相关文章!

相关文章

  • Python CVXOPT模块安装及使用解析

    Python CVXOPT模块安装及使用解析

    这篇文章主要介绍了Python CVXOPT模块安装及使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-08-08
  • Python字典创建 遍历 添加等实用基础操作技巧

    Python字典创建 遍历 添加等实用基础操作技巧

    字段是Python是字典中唯一的键-值类型,本文讲述了Python中字典如何创建 遍历 添加等实用基础操作技巧,内容非常基础但非常重要,一定要熟练掌握
    2018-09-09
  • Tensorflow实现卷积神经网络用于人脸关键点识别

    Tensorflow实现卷积神经网络用于人脸关键点识别

    这篇文章主要介绍了Tensorflow实现卷积神经网络用于人脸关键点识别,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-03-03
  • 使用Python编写一个桌面便签应用

    使用Python编写一个桌面便签应用

    ChatGPT的编程能力也不差,本文将一步一步提出要求,让ChatGPT根据我们的要求,编写出一个可用的,可打包运行的桌面便签,感兴趣的可以了解一下
    2023-06-06
  • Python函数之zip函数的介绍与实际应用

    Python函数之zip函数的介绍与实际应用

    zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的对象(python2 返回的是这些元组组成的列表 ),下面这篇文章主要给大家介绍了关于Python函数之zip函数实际应用的相关资料,需要的朋友可以参考下
    2022-03-03
  • 使用Python操作excel文件的实例代码

    使用Python操作excel文件的实例代码

    这篇文章主要介绍了使用Python操作excel文件的实例代码,需要的朋友可以参考下
    2017-10-10
  • Python多线程threading join和守护线程setDeamon原理详解

    Python多线程threading join和守护线程setDeamon原理详解

    这篇文章主要介绍了Python多线程threading join和守护线程setDeamon原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • PyQt5中向单元格添加控件的方法示例

    PyQt5中向单元格添加控件的方法示例

    这篇文章主要介绍了PyQt5中向单元格添加控件的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03
  • python3爬虫中引用Queue的实例讲解

    python3爬虫中引用Queue的实例讲解

    在本篇内容里小编给大家整理的是一篇关于python3爬虫中引用Queue的实例讲解内容,有兴趣的朋友们可以学习下。
    2020-11-11
  • Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)

    Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析)

    这篇文章主要介绍了Python如何爬取微信公众号文章和评论(基于 Fiddler 抓包分析),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-06-06

最新评论