ARPACK特征值求解分析

线性方程组求解特征值求解是(数值)线性代数的主要研究内容。力学、电磁等许多问题,最终都可以归结为特征值、特征向量的求解。

ARPACK使用IRAM(Implicit Restarted Arnoldi Method)求解大规模系数矩阵的部分特征值与特征向量。了解或者熟悉IRAM算法,必定有助于更好地使用ARPACK中相关特征值求解函数。

本文拟就ARPACK中特征值求解的IRAM算法进行分析,希望对从事相关研究的朋友们有所帮助。

注1:限于研究水平,分析难免不当,欢迎批评指正。

零、预修

对于n阶级复矩阵\boldsymbol{A}\in \mathbb{C}^{n\times n},若存在n阶向量\boldsymbol{x}\in \mathbb{C}^{n}与标量\lambda \in \mathbb{C}^{1},满足\boldsymbol{\mathbf{A}}\boldsymbol{\mathbf{x}}=\lambda \boldsymbol{x},则称\lambda是矩阵\boldsymbol{A}的特征值,\boldsymbol{x}是对应的特征向量。

更一般地,若对于n阶级复矩阵\boldsymbol{A}\in \mathbb{C}^{n\times n}\boldsymbol{B}\in \mathbb{C}^{n\times n},若存在n阶向量\boldsymbol{x}\in \mathbb{C}^{n}与标量\lambda \in \mathbb{C}^{1},满足\boldsymbol{\mathbf{A}}\boldsymbol{\mathbf{x}}=\lambda\boldsymbol{B} \boldsymbol{x},则称\lambda是矩阵\boldsymbol{A}的广义特征值,\boldsymbol{x}是对应的广义特征向量。

定义Hessenberg矩阵\boldsymbol{H}

\boldsymbol{H}=\begin{pmatrix} h_{1,1} & h_{1,2} & \cdots & h_{1,k}\\ h _{2,1} & h_{2,2} & \cdots &h_{2,k} \\ 0& \ddots& \ddots &\vdots \\ 0& 0 & h_{k,k-1}& h _{k,k} \end{pmatrix}

为了叙述方便,本文以一般特征值问题进行叙述,而不讨论广义特征值。

一、大型稀疏矩阵特征值算法

1.1 Lancos算法

1.2 Arnoldi算法

Arnoldi在1951年发表的文章中提出了一种获取大型稀疏矩阵的部分特征值、特征向量的方法。在这种方法中,通过Ritz\Galerkin余量法,将矩阵\boldsymbol{u}约化为低阶Hessenberg矩阵,进而求解该Hessenberg矩阵的特征值与特征向量,用以近似源矩阵\boldsymbol{u}部分特征值、特征向量,即

\left [ \kappa _{i} \right ]\left ( \lambda \boldsymbol{I}-\boldsymbol{u} \right )\left [ k_{i} \right ]\boldsymbol{c}=0

上式也可以写作

\boldsymbol{A}\boldsymbol{V}=\boldsymbol{V}\boldsymbol{H}+\boldsymbol{f}\boldsymbol{e}_{k}^{T}

其中,\boldsymbol{V}=\left ( \boldsymbol{v}_{1}, \boldsymbol{v}_{2},\cdots ,\boldsymbol{v}_{k} \right )\in \mathbb{C}^{n\times k }\boldsymbol{V}^{H}\boldsymbol{V}=\mathbf{I}\boldsymbol{H}=h_{i,j}\in \mathbb{C}^{k\times k }\boldsymbol{f}\in \mathbb{C}^{n }\boldsymbol{V}^{H} \mathbf{f}=\mathbf{0}e_{k}^{T}=\left ( 0,0,\cdots,0,1 \right )\in \mathbb{C}^{k}

即有,

\begin{matrix} \boldsymbol{v}_{i}^{T}\boldsymbol{v}_{j}=0, i\neq j, i\in \left [ 1,k \right ],j\in \left [ 1,k \right ]\\ \boldsymbol{v}_{i}^{T}\boldsymbol{v}_{i}=1, j\in \left [ 1,k \right ]\\ \boldsymbol{A}\boldsymbol{v}_{j}=\sum_{i=1}^{i=j}h_{i,j}\boldsymbol{v}_{i}+v_{j+1}h_{j+1,j}\\ \\ \end{matrix}

由此,可推出

\begin{matrix} h_{i,j}=\frac{\boldsymbol{v}_{i}^{T}\boldsymbol{A}\mathbf{v}_{j}}{\boldsymbol{v}_{i}^{T}\boldsymbol{v}_{i}}, i\in \left [ 1,j \right ]\\ h_{j+1,j}\mathbf{v}_{j+1}=\boldsymbol{A}\boldsymbol{v}_{j}-\sum_{i=1}^{i=j}h_{i,j}\boldsymbol{v}_{i}\\ \\ \\ \end{matrix}

若取h_{j+1,j}=\left \| \boldsymbol{A}\boldsymbol{v}_{j}-\sum_{i=1}^{i=j}h_{i,j}\boldsymbol{v}_{i} \right \|,则有\mathbf{v}_{j+1}=\frac{\boldsymbol{A}\boldsymbol{v}_{j}-\sum_{i=1}^{i=j}h_{i,j}\boldsymbol{v}_{i}}{\left \| \boldsymbol{A}\boldsymbol{v}_{j}-\sum_{i=1}^{i=j}h_{i,j}\boldsymbol{v}_{i} \right \|}

从中可以看出,\boldsymbol{V}=\left ( \boldsymbol{v}_{1}, \boldsymbol{v}_{2},\cdots ,\boldsymbol{v}_{k} \right )实际上就是Krylov子空间\boldsymbol{K}\left ( \boldsymbol{A},\mathbf{v}_{1},k \right )=\left ( \mathbf{v}_{1} ,\boldsymbol{A}\mathbf{v}_{1},\boldsymbol{A}^{2}\mathbf{v}_{1},\cdots ,\boldsymbol{A}^{k-1}\mathbf{v}_{1}\right )的一组标准正交基。

然而,在实际数值计算过程中,由于计算精度等问题,通常很难保证\boldsymbol{v}_{j+1}^{T}\boldsymbol{v}_{i}=0,j\in \left [ 1,k \right ], i\in \left [ 1,j \right ],也就是说矩阵计算矩阵\boldsymbol{V}=\left ( \boldsymbol{v}_{1}, \boldsymbol{v}_{2},\cdots ,\boldsymbol{v}_{k} \right )的过程中,存在正交性丢失的问题。

针对此问题,Sorensen在1992的论文中提出了一种称之IRAM(Implicit Restarted Arnoldi Method)的算法。Sorensen认为误差\boldsymbol{f}实际上是初始向量\boldsymbol{v}_{i}的函数,可以通过不断选取新的初始向量\boldsymbol{v}_{i}^{new}=\boldsymbol{A}\boldsymbol{v}_{k+1},迭代Arnoldi过程p次来强迫\boldsymbol{f}\rightarrow \mathbf{0},并且给出了收敛性证明。同时对于得到的\boldsymbol{H}_{k+p},可以施加了带偏移的QR分解,用以剔除不想要的特征值。这实际上就是ARPACK使用的算法。

参考书籍

Gene H. Golub. Matrix Computations.

徐树方. 数值线性代数. 北京大学出版社, 2013.

参考文献

Arnoldi W E .The principle of minimized iterations in the solution of the matrix eigenvalue problem[J].Quarterly of Applied Mathematics, 1951, 9(1).DOI:10.1093/qjmam/4.4.466.

D,C,Sorensen.Implicit Application of Polynomial Filters in a k-Step Arnoldi Method[J].Siam Journal on Matrix Analysis & Applications, 1992.DOI:10.1137/0613025.

Burrus C S , Cox S J , Radke R J .A Matlab Implementation of the Implicitly Restarted Arnoldi Method for Solving Large-Scale Eigenvalue Problems[J]. 2000.

R.B. Lehoucq, Analysis and Implementation of an Implicitly Restarted Arnoldi Iteration", Rice University Technical Report TR95-13, Department of Computational and Applied Mathematics.

网络资料

ARPACKhttps://github.com/opencollab/arpack-ng

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/23423.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Spring Boot中如何解决Redis的缓存穿透、缓存击穿、缓存雪崩?

Redis的缓存穿透、缓存击穿、缓存雪崩 一、概述 ① 缓存穿透:大量请求根本不存在的key ② 缓存雪崩:Redis中大量key集体过期 ③ 缓存击穿:Redis中一个热点key过期 三者出现的根本原因:Redis命中率下降,请求直接打…

机器学习 day27(反向传播)

导数 函数在某点的导数为该点处的斜率,用height / width表示,可以看作若当w增加ε,J(w,b)增加k倍的ε,则k为该点的导数 反向传播 tensorflow中的计算图,由有向边和节点组成。从左向右为正向传播,神经网…

常用的缓存工具有ehcache、memcache和redis,这里介绍spring中ehcache的配置。

常用的缓存工具有ehcache、memcache和redis&#xff0c;这里介绍spring中ehcache的配置。 1.在pom添加依赖&#xff1a; <!-- ehcache 相关依赖 --><dependency><groupId>net.sf.ehcache</groupId><artifactId>ehcache</artifactId><ve…

ylb-接口13实名认证

总览&#xff1a; 在api模块下的service包&#xff0c;创建一个充值接口RechargeService&#xff0c;并创建一个&#xff08;根据userID查询它的充值记录&#xff09;方法&#xff1a; package com.bjpowernode.api.service;import com.bjpowernode.api.model.RechargeRecord…

【漂移-扩散通量重建 FV 方案】用于半导体和气体放电模拟的电子传输的更准确的 Sharfetter-Gummel 算法(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

ELK中grok插件、mutate插件、multiline插件、date插件的相关配置

目录 grok 正则捕获插件 自定义表达式调用 mutate 数据修改插件 示例&#xff1a; ●将字段old_field重命名为new_field ●添加字段 ●将字段删除 ●将filedName1字段数据类型转换成string类型&#xff0c;filedName2字段数据类型转换成float类型 ●将filedName字段中…

大华相机接入web页面实现人脸识别

先看下效果&#xff0c;中间主视频流就是大华相机&#xff08;视频编码H.264&#xff09;&#xff0c;海康相机&#xff08;视屏编码H.265&#xff09; 前端接入视屏流代码 <!--视频流--><div id"col2"><div class"cell" style"flex: …

SpringCloud——分布式请求链路跟踪Sleuth

安装运行zipkin SpringCloud从F版已不需要自己构建Zipkin Server&#xff0c;只需要调用jar包即可 https://dl.bintray.com/oenzipkin/maven/io/zipkin/java/zipkin-server/ 下载&#xff1a;zipkin-server-2.12.9-exec.jar 运行&#xff1a;java -jar zipkin-server-2.12.9-e…

Word 插件实现读取excel自动填写

日常工作中碰到需要将EXCEL的对应数据记录填写到word文档对应的位置&#xff0c;人工操作的方式是&#xff1a; 打开exel表—>查找对应报告号的行—>逐列复制excel表列单元格内容到WORD对应的位置&#xff08;如下图标注所示&#xff09; 这种方法耗时且容易出错。实际上…

三菱PLC上位机测试

利用三菱的MX Component与三菱PLC进行以太网通信&#xff0c;我们可以用官方的dll编写C#代码&#xff0c;特别简单&#xff0c;最后附上整个源码下载。 1. 安装MX Component&#xff08;必须&#xff09;和GX WORKS3&#xff08;主要是仿真用&#xff0c;实际可以不装&#xf…

【USRP X310】如何将你的X310转化为USRP RIO 可以用于FPGA编程

X310 转化为USRP RIO X310产品X310和NI-USRP对应关系 简介第一步原理解释打开工具运行 Initialize Flash.vi可以去选择设备类型Hardware Current Version 如何选择 第二步创建工程运行校准程序 附录&#xff1a;射频子板的IDWBXSBXCBXUBXTwinRX X310产品 X310和NI-USRP对应关系…

Android Java代码与JNI交互 JNI访问Java类方法 (七)

🔥 Android Studio 版本 🔥 🔥 创建包含JNI的类 JNIAccessMethod.java 🔥 package com.cmake.ndk1.jni;import com.cmake.ndk1.model.Animal;public class JNIAccessMethod {static {System.loadLibrary("access-method-lib");}public native void access…