跟踪1参数矩阵族的特征向量

我的问题是这样的:我正在尝试通过(截断的)Karhunen-Loeve变换对随机过程进行频谱分解,但是我的协方差矩阵实际上是一个1参数矩阵矩阵,我需要一种方法来估算/可视化我的随机过程取决于此参数。为此,我需要一种跟踪numpy.linalg.eigh()产生的特征向量的方法。


为了让您了解我的问题,这里有一个示例玩具问题:假设我有一组点{xs},并且随机过程R的协方差C(x,y)= 1 /(1 + a *(xy) ^ 2),取决于参数a。对于[0,1]范围内的网格点的随机样本和给定的a(例如a = 1)选择,我可以填充协方差矩阵并使用以下方法实现Karhunen-Loeve变换:


num_x = 1000

xs = numpy.array([numpy.random.uniform() for i in range(num_x)])

z=numpy.random.standard_normal(num_x)

a0=1

def cov(x,y,a=a0): return 1/(1+a*(x-y)^2)

cov_m = numpy.array(map(lambda y: map(lambda x: cov(x,y),xs),xs))

w,v=numpy.linalg.eigh(cov_m)

R=numpy.dot(v,z*w^0.5)

这将使我认识到R的值是在每个随机网格点xs上定义的值。但是,我需要做的是-对于特定的实现(这意味着我的网格xs和我的随机系数z的特定选择)-跟踪R如何相对于我的协方差函数中的参数a发生变化。


如果我可以用符号方式计算协方差矩阵并在事后指定a,那么这将很容易做到。但是,对于大型矩阵,这不是一个可行的选择。另一种方法是找到一种方法来跟踪numpy.linalg.eigh()返回的每个特征向量。不幸的是,numpy似乎正在对它们进行重新排序,以便始终总是首先列出最小的特征值。这意味着,当我改变a时,特征向量将发生不可预测的重新排序,并且点积numpy.dot(v,z * w ^ 0.5)不再为相同的特征向量分配相同的系数。


有没有解决的办法?


婷婷同学_
浏览 165回答 2
2回答

江户川乱折腾

经过一些研究,我设法为这个问题提出了两个部分的答案。首先是,对于没有零本征向量的实对称矩阵(可能还需要指定非简并矩阵),应该可行的是生成一种求解本征对问题的算法,该算法以固定顺序生成本征对,而与矩阵的选择。给定一个恒定的起始向量,Lanczos算法将以确定性方式为任意实数对称矩阵生成一个三对角矩阵。“分而治之”算法的“除法”部分具有类似的确定性,这意味着该算法中唯一迭代次数取决于矩阵元素值的部分是“征服”部分,世俗方程:1+ \ sum_j ^ m w_j ^ 2 /(d_j- \ lambda)= 0因此,对于每个2x2块,问题归结为如何以一种实际上不依赖于原始矩阵值的方式对世俗方程的两个根进行排序。第二部分解决方案更容易实现,但更容易失败。回想起来,这也是显而易见的。同一矩阵的两个不同特征向量将始终彼此正交。因此,如果特征向量根据单个参数α平稳变化,则:v_i(a).v_j(a + da)= \ delta_ {ij} + O(da)因此,随着参数α的变化,这给出了特征向量之间的自然映射。这与David Zwicker和jorgeca提出的测量特征向量对之间的全局距离的想法类似,但是更容易实现。但是,在特征向量快速变化的区域或参数a的变化太大的区域中,此方法的实现将很容易失败。同样,在特征值相交处会发生什么的问题也很有趣,因为在每个这样的相交处,系统都会退化。然而,在跨越简并性的允许特征向量集合中,将存在两个满足点积条件并且可用作跨越简并性的基础,从而维持映射的两个向量。当然,这是假设将特征向量视为参数空间上的光滑连续函数是正确的,但我不确定(正如jorgeca指出的那样)。

翻翻过去那场雪

如果我理解得很好,您正在寻找由实变量t的连续函数输入的矩阵A(t)的特征值\ lambda(t)。让我建议您查阅这些书:[1] R. Bathia:施普林格(Matrixer),矩阵分析。第六章?[2]加藤(T. Kato):线性算子微扰理论的简短介绍,第二章定理5.2。[3] D. Hinrichsen,A。Pritchard:数学系统理论,第1卷。1,推论4.1.19。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python