怎么做网站运营编辑的简历,企业网站制作心得,wordpress问答模块,快点tv下载安装文章目录 1. 投影平面2. Arnoldi Iteration3. python 代码 1. 投影平面
假设我们有一个向量q,我们需要关于向量q#xff0c;构建一个投影平面P#xff0c;使得给定任何向量v,可以通过公式 p P v pPv pPv#xff0c;快速得到向量v在投影平面P上的投影向量p.
计算向量内积,… 文章目录 1. 投影平面2. Arnoldi Iteration3. python 代码 1. 投影平面
假设我们有一个向量q,我们需要关于向量q构建一个投影平面P使得给定任何向量v,可以通过公式 p P v pPv pPv快速得到向量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∣∣q∣cosθ∣p∣∣q∣→∣p∣∣q∣vTq我们知道q方向上的单位向量为 q ∣ q ∣ \frac{q}{|q|} ∣q∣q,那么投影向量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∣p∣⋅∣q∣q∣q∣vTq⋅∣q∣qqTqvTqq重点内积可以随便转换并且标量位置可以随便放 v T q q T v \begin{equation} v^Tqq^Tv \end{equation} vTqqTv整理可得 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} pqTqqTvqqTqqTvq标量位置随意可得: q T v q → q q T v q^Tvq\rightarrow qq^Tv qTvq→qqTv 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} pqTqqTvqqTqqqTv第一个是投影矩阵P P q q T q T q , p P v \begin{equation} P\frac{qq^T}{q^Tq},pPv \end{equation} PqTqqqT,pPv第二快速计算一个向量v在向量q上的投影p p q T v q q T q \begin{equation} p\frac{q^Tvq}{q^Tq} \end{equation} pqTqqTvq第三当q为单位向量的时候 q T q ∣ q ∣ 2 1 q^Tq|q|^21 qTq∣q∣21,像不像二次型形式就是这么神奇 p q T v q \begin{equation} pq^Tvq \end{equation} pqTvq第四 一般情况下计算垂直向量e,向量几何关系可得vpe e v − p v − q T v q q T q \begin{equation} ev-pv-\frac{q^Tvq}{q^Tq} \end{equation} ev−pv−qTqqTvq 第五特殊情况下,|q|1,整理可得 e v − q T v q \begin{equation} ev-q^Tvq \end{equation} ev−qTvq
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 (k1)).H : numpy.ndarrayThe Hessenberg matrix (k1 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)