当前位置: 首页 > news >正文

Arnoldi Iteration 思考

文章目录

  • 1. 投影平面
  • 2. Arnoldi Iteration
  • 3. python 代码

1. 投影平面

假设我们有一个向量q,我们需要关于向量q,构建一个投影平面P,使得给定任何向量v,可以通过公式 p = P v p=Pv p=Pv,快速得到向量v在投影平面P上的投影向量p.

  • 计算向量内积,向量v在向量q上的投影长度|p|
    v T q = ∣ v ∣ ∣ q ∣ cos ⁡ θ = ∣ p ∣ ∣ q ∣ → ∣ p ∣ = v T q ∣ q ∣ \begin{equation} v^Tq=|v||q|\cos{\theta}=|p||q|\rightarrow |p|=\frac{v^Tq}{|q|} \end{equation} vTq=v∣∣qcosθ=p∣∣qp=qvTq
  • 我们知道,q方向上的单位向量为 q ∣ q ∣ \frac{q}{|q|} qq,那么投影向量p可得, v T q v^Tq vTq为标量,随便放位置
    p = ∣ p ∣ ⋅ q ∣ q ∣ = v T q ∣ q ∣ ⋅ q ∣ q ∣ = v T q q T q q \begin{equation} p=|p|\cdot \frac{q}{|q|} =\frac{v^Tq}{|q|}\cdot \frac{q}{|q|}=\frac{v^Tq}{q^Tq}q \end{equation} p=pqq=qvTqqq=qTqvTqq
  • 重点!内积可以随便转换,并且标量位置可以随便放!
    v T q = q T v \begin{equation} v^Tq=q^Tv \end{equation} vTq=qTv
  • 整理可得:
    p = q T v q T q q = q T v q q T q \begin{equation} p=\frac{q^Tv}{q^Tq}q=\frac{q^Tvq}{q^Tq} \end{equation} p=qTqqTvq=qTqqTvq
  • 标量位置随意可得: q T v q → q q T v q^Tvq\rightarrow qq^Tv qTvqqqTv
    p = q T v q q T q = q q T q T q v \begin{equation} p=\frac{q^Tvq}{q^Tq}= \frac{qq^T}{q^Tq}v \end{equation} p=qTqqTvq=qTqqqTv
  • 第一个是投影矩阵P
    P = q q T q T q , p = P v \begin{equation} P=\frac{qq^T}{q^Tq},p=Pv \end{equation} P=qTqqqT,p=Pv
  • 第二,快速计算一个向量v在向量q上的投影p
    p = q T v q q T q \begin{equation} p=\frac{q^Tvq}{q^Tq} \end{equation} p=qTqqTvq
  • 第三,当q为单位向量的时候, q T q = ∣ q ∣ 2 = 1 q^Tq=|q|^2=1 qTq=q2=1,像不像二次型形式,就是这么神奇!
    p = q T v q \begin{equation} p=q^Tvq \end{equation} p=qTvq
  • 第四 ,一般情况下计算垂直向量e,向量几何关系可得v=p+e,
    e = v − p = v − q T v q q T q \begin{equation} e=v-p=v-\frac{q^Tvq}{q^Tq} \end{equation} e=vp=vqTqqTvq
    第五,特殊情况下,|q|=1,整理可得:
    e = v − q T v q \begin{equation} e=v-q^Tvq \end{equation} e=vqTvq
    在这里插入图片描述

2. Arnoldi Iteration

arnoldi Iteration的作用是想在原来的krylov 子空间中增加一个向量 A q k Aq_k Aqk,具体思路如下图所示:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 小结:arnoldi Iteration 本质上就是新建一个向量 v v v,为了让v向量和以前已知的向量 q 1 , q 2 , ⋯ , q k q_1,q_2,\cdots,q_k q1,q2,,qk垂直,通过不断迭代,将v向量减去掉所有在 q 1 , q 2 , ⋯ , q k q_1,q_2,\cdots,q_k q1,q2,,qk上的投影向量 e k e_k ek,这样最后得到的向量 q k q_k qk就一定是垂直于 q 1 , q 2 , ⋯ , q k q_1,q_2,\cdots,q_k q1,q2,,qk

3. python 代码

后续提供详细的,现在直接粘贴吧。

import numpy as npdef arnoldi_iteration(A, b, k):"""Perform Arnoldi iteration to generate an orthonormal basis for the Krylov subspace.Parameters:A : numpy.ndarrayThe input matrix (n x n).b : numpy.ndarrayThe initial vector (n, ).k : intThe number of iterations, which defines the size of the Krylov subspace.Returns:Q : numpy.ndarrayThe orthonormal basis for the Krylov subspace (n x (k+1)).H : numpy.ndarrayThe Hessenberg matrix (k+1 x k)."""n = A.shape[0]Q = np.zeros((n, k + 1))  # Orthonormal basisH = np.zeros((k + 1, k))  # Hessenberg matrix# Normalize the initial vectorQ[:, 0] = b / np.linalg.norm(b)for j in range(k):v = A @ Q[:, j]  # Matrix-vector multiplicationfor i in range(j + 1):H[i, j] = np.dot(Q[:, i].conj(), v)  # Project v onto the current basis vectorsv = v - H[i, j] * Q[:, i]  # Make v orthogonal to Q[:, i]H[j + 1, j] = np.linalg.norm(v)  # Normalize v to get the next basis vectorif H[j + 1, j] != 0 and j + 1 < k:Q[:, j + 1] = v / H[j + 1, j]return Q, H# Example usage
if __name__ == "__main__":# Define a random matrix A and a random vector bA = np.random.rand(5, 5)b = np.random.rand(5)k = 4Q, H = arnoldi_iteration(A, b, k)print("Orthonormal basis Q:\n", Q)print("Hessenberg matrix H:\n", H)
http://www.lryc.cn/news/373756.html

相关文章:

  • 【Kafka】SpringBoot整合Kafka详细介绍及代码示例
  • C++ 质数因子分解
  • laravel版本≥ 8.1
  • 【iOS】MRC下的单例模式批量创建单例
  • 计算机网络期末复习
  • python写一个获取竞品信息报告
  • 一文彻底理解机器学习 ROC-AUC 指标
  • 【二】【动态规划NEW】91. 解码方法,62. 不同路径,63. 不同路径 II
  • Python闯LeetCode--第3题:无重复字符的最长子串
  • HTML DOM 对象
  • 如何解决 BeautifulSoup 安装问题:从 BeautifulSoup 3 到 BeautifulSoup 4
  • 原型模式--深复制/浅复制
  • C# TextBox模糊查询及输入提示
  • Node入门以及express创建项目
  • Cheat Engine CE v7.5 安装教程(专注于游戏的修改器)
  • 【实例分享】访问后端服务超时,银河麒麟服务器操作系统分析及处理建议
  • Java中和的区别
  • 深入理解计算机系统 CSAPP 家庭作业6.34
  • [leetcode 141环形链表]双指针解决环形链表
  • 【深度学习】Precision、Accuracy的区别,精确率与准确率:深度学习多分类问题中的性能评估详解
  • DELL服务器插入新磁盘、创建虚拟磁盘、挂载磁盘步骤
  • springboot与flowable(10):网关服务(排他网关)
  • Web前端网页源代码:深入剖析与实用技巧
  • 聊天页面样式
  • PHP入门教程3:数组和字符串操作
  • mariadb
  • C/C++:指针用法详解
  • JDK8-17新特性
  • 文件加载的管理:探索三种方法
  • 【机器学习】基于Transformer架构的移动设备图像分类模型MobileViT