第三十二篇 Lanczos转化到三对角形式

在之前的篇章里,有许多求解线性方程的迭代方法,如最陡下降法,可以通过向量乘法和各种简单的向量运算,简化为一个单个矩阵的循环。将矩阵化为三对角形式的Lanczos方法,保留其特征值的同时,使用类似的计算方式,实际上与共轭梯度法相关联。
在这种方法中,变换矩阵[P]是用相互正交的向量构造的。通常我们求对称矩阵的特征值由下式开始:

确保[P]T [P]=[I]的一种方法是构造互相正交的,单位长度的正交化向量,如{P}, {q}和{r}构造[P]。以3 × 3矩阵为例,可以得到

在Lanczos方法中,要求得到的[P]T [A][P]是一个对称的三对角矩阵

所以

因为[P]是由正交向量组成的

可以展开上面的式子

将上式的第一,第二和第三分别乘以{p}T, {q}T和{r}T,并注意向量的正交性,得到

构造“Lanczos向量”{p}、{q}和{r},并求解三对角形式αi和βi,可以遵循以下算法:
1)开始猜一个单位长度的向量{p}(如[1 0 0]T)
2)通过方程2,计算α1 = {p}T [A]{p}
3)通过方程1,计算β1{q} = [A]{p}−α1{p}
4) {q}的长度是一个单位,因此通过正交化计算β1和{q}
5)由方程2,计算α2 = {q}T [A]{q}
6)有方程1计算β2 {r} =[A]{q}−α2{q}−β1{p}
7) {r}是单位长度,因此通过正交化计算β2和{r}
8)由式2计算α3 = {r}T [A]{r}等。
通常,对于一个n × n矩阵[A],将[P]的正交向量列记为{y}j, j = 1,2,···,n,程序使用的算法如下(设β0 = 0)

程序如下:

#对称矩阵到三对角矩阵的Lanczos推导
import numpy as np
n=4
alpha=np.zeros((n))
beta=np.zeros((n))
v=np.zeros((n))
y0=np.zeros((n))
z=np.zeros((n))
y1=np.array([1.0,0.0,0.0,0.0])
a=np.array([[1,-3,-2,1],[-3,10,-3,6],[-2,-3,3,-2],[1,6,-2,1]],dtype=np.float)
print('对称矩阵到三对角矩阵的Lanczos推导')
print('系数矩阵A')
print(a[:])
print('开始猜测值')
print(y1)
y0[:]=0
beta[-1]=0
for j in range(1,n+1):v[:]=np.dot(a,y1)alpha[j-1]=np.dot(y1,v)if j==n:breakz[:]=v[:]-alpha[j-1]*y1-beta[j-2]*y0y0[:]=y1[:]beta[j-1]=(np.dot(z,z))**0.5y1[:]=z[:]/beta[j-1]
print('转化后的主对角线')
for i in range(1,n+1):print('{:13.4e}'.format(alpha[i-1]),end='')
print()
print('转化后的非主对角线值')
for i in range(1,n):print('{:13.4e}'.format(beta[i-1]),end='')

终端输出结果

对称矩阵到三对角矩阵的Lanczos推导(python,数值积分)相关推荐

  1. 三对角矩阵原理及C++实现

    一.三对角矩阵 1.三对角矩阵概念 2.三对角矩阵元素数量 对于给定n阶方阵M,若其为三对角矩阵,则元素个数N为: 若n=1,此时方阵只有一个元素M[0][0],由定义知该元素也在三对角线上.故N=1 ...

  2. python生成任意n阶的三对角矩阵

    数学作业要求实现共轭梯度法的算法. 题目中的矩阵A是n=400/500/600的三对角矩阵. 在网上查阅资料未果后,自己解决了. import numpy as npdef generate_matr ...

  3. 一维数组二维数组对称矩阵三角矩阵三对角矩阵地址的计算

    一维数组的地址计算 设每个元素的大小是size,首元素的地址是a[1],则 a[i] = a[1] + (i-1)*size 若首元素的地址是a[0] 则a[i] = a[0] + i*size 二维 ...

  4. 数据结构-特殊矩阵【对称矩阵、上三角下三角矩阵、三对角矩阵】的压缩存储代码实现

    #include <iostream> using namespace std;typedef int ElemType;void SymmetricMatrixStore(int n, ...

  5. 数据结构-拓展突破-特殊矩阵(对称矩阵,三角矩阵,三对角矩阵,稀疏矩阵)的压缩存储)

    文章目录 1. 对称矩阵 2. 三角矩阵 3. 三对角矩阵 4. 稀疏矩阵 1. 对称矩阵 对称矩阵的定义: 若n阶方阵中任意一个元素a,都有a(i,j)=a(j,i)则该矩阵为对称矩阵 也就是说对称 ...

  6. 对称矩阵的三对角分解(Lanzos分解算法)-MINRES算法预热

    这篇博客看完以后接着看下一篇博客添加链接描述专门介绍MINRES算法实现就容易了 Lanzos分解 首先介绍Lanczos分解,Lanzos把对称矩阵转换为一个三对角对称矩阵.考虑三对角对称矩阵如下, ...

  7. 数据结构与算法-三对角矩阵的压缩公式推导

    数据结构与算法-三对角矩阵的压缩公式推导 三对角矩阵 压缩公式推导 (1)考虑a[i,j]处在第2到第n-1行之间: 我们可以看到,从第二行开始,元素的个数都为3个.对于a[i,j]将要存储的数组下标 ...

  8. 特殊矩阵的压缩存储(对称矩阵,三角矩阵,对角矩阵,稀疏矩阵的顺序,链序存储,十字链表的建立)

    特殊矩阵的压缩存储 压缩存储的定义: 若多个数据元素的值都相同,则只分配一个元素值的存储空间,且 零元素不占存储空间. 能够压缩的一些矩阵: 一些特殊矩阵,如:对称矩阵,对角矩阵,三角矩阵,稀疏矩阵等 ...

  9. 混淆矩阵是什么?Python多分类的混淆矩阵计算及可视化(包含原始混淆矩阵及归一化的混淆矩阵):基于skelarn框架iris数据集

    混淆矩阵是什么?Python多分类的混淆矩阵计算及可视化(包含原始混淆矩阵及归一化的混淆矩阵):基于skelarn框架iris数据集 目录

最新文章

  1. Tomcat报错: JDBC unregister 可能导致内存溢出
  2. SSH pager-taglib分页的实现
  3. 【SharePoint 2010】SharePoint 2010开发方面的课堂中整理有关问题
  4. 关键七步,用Apache Spark构建实时分析Dashboard
  5. SVN常用命令及在windows上安装SVN
  6. 埃及分数The Rotation Game骑士精神——IDA*
  7. leetcode —— 6. Z 字形变换
  8. apt-get 与 apt-cache使用
  9. 文件服务器+快照恢复,云服务器快照恢复
  10. 欧氏空间内积定义_泛函分析笔记3:内积空间
  11. 对Chrome自动发送邮件插件的改进
  12. TFS 10周年生日快乐 – TFS与布莱恩大叔的故事
  13. psnr--峰值信噪比
  14. Bat脚本 -(一)- echo/ echo off/ echo on/ @ / start / pause / rem
  15. iphone禁止自动连接wifi操作方法「苹果教程」
  16. 更改matlab快捷键 matlab 复制粘贴键不对
  17. CDN及其加速原理(详解)
  18. vim 配置文件 ,高亮+自动缩进+行号+折叠+优化
  19. python实现自动化查谁没交作业
  20. 使用ProxySelector选择代理服务器

热门文章

  1. 511遇见易语言调用百度OCR文字在线本地识别及游戏画面时时识别
  2. 申办高新技术企业,如何申请高新认定
  3. 计算机对英语写作的帮助,2018年6月英语六级写作范文:计算机对写作能力的影响...
  4. 实模式、保护模式和虚拟8086模式
  5. 【obs】OBS Library D3D11 OpenGL wrapper
  6. JavaWeb09(新闻数据分页)
  7. Charles浏览器抓包配置
  8. Altium Designer原理图转OrCAD原理图方法
  9. java局域网通信_java局域网通信
  10. 2000个常用的英文单词