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

2024-04-25 02:28:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我的问题是:我试图通过一个(截断的)Karhunen-Loeve变换对随机过程进行谱分解,但我的协方差矩阵实际上是一个单参数矩阵族,我需要一种方法来估计/可视化我的随机过程如何依赖于这个参数。为此,我需要一种方法来跟踪纽比.利纳格.埃(). 在

为了让您了解我的问题,这里有一个示例玩具问题:假设我有一组点{xs},和一个随机过程R,其协方差C(x,y)=1/(1+a*(x-y)^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)

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

如果我可以象征性地计算协方差矩阵并在事后指定一个。然而,对于大型矩阵,这不是一个合理的选择。另一种方法是找到一种方法来跟踪纽比.利纳格.埃(). 不幸的是,numpy似乎在重新排列它们,以便总是首先列出最小的特征值;这意味着,当我改变a时,特征向量会被不可预知地重新排序,并且点积纽比.dot(v,z*w^0.5)不再将相同的系数赋给相同的特征向量。在

有办法吗?在

(这是ASKSAGE中的一个十字柱。我的实现使用的是Sage,但由于问题不是Sage特有的,而且这里似乎有更多的活动,我想我会重新发布。如果不能接受交叉发布,我很抱歉;如果是,请删除此内容。)

编辑:根据下面的对话,我想我需要补充更多关于这个问题本质的细节。在

Karhunen-Loeve变换的思想是将随机过程R(x)分解成频谱,如下所示:

R(x)=\sum{i}Z_i\lambda_i^{1/2}\phi^{(i)}(x)

其中,每个Z賸i是具有标准正态分布的i.i.d.随机变量,每个φ^{(i)}(x)是由协方差矩阵的特征向量的解确定的x的非随机函数,并且每个λu i是与φ^{(i)}相关联的相应特征值。在

为了证明R对参数a的依赖性,我需要能够唯一地为每个φ^{(I)}分配一个系数Z_I。如何分配并不重要,因为所有Z都是相同分布的,但是赋值必须是唯一的,并且不能依赖于λI的相应值,因为这将依赖于参数a

解析解很简单:只需计算任意a的特征向量和特征值,通过指定我的Z来选择R的具体实现,并观察R的实现如何依赖于a(对于玩具模型,R通常会随着a的增加而变得更快速地变化)

这里的问题是如何在数字上实现这一点。显然,Numpy在计算时会对特征向量进行置乱,因此无法对其进行唯一标记。我猜唯一的方法就是深入挖掘底层代码,具体实现某种类型的任意标记函数。在

简而言之,我需要一种排序numpy产生的特征向量的方法,它不依赖于相关特征值的大小。在

有办法吗?在

更新: 我已经设法找到了这个问题的部分答案,但我还需要做更多的研究才能得到完整的答案。看来我要实现我自己的算法了。在

对于我正在考虑的类型的矩阵,Lanczos算法(对于给定的初始向量选择)是确定性的,并且步骤不依赖于参数的选择。这给了我一个对称的,三对角矩阵来求解特征值。在

分而治之也许在这里管用。似乎我可以实现它的一个版本,它允许我跟踪独立于相关特征值的特征向量。“divide”部分至少可以用一种确定的、独立于参数的方式来实现,但是我需要了解更多关于算法“征服”部分的知识才能确定。在


Tags: 方法lambdanumpy网格参数过程矩阵cov
2条回答

经过一番研究,我设法想出了这个问题的两个部分答案。在

首先,对于没有零特征向量的实对称矩阵(可能还需要指定非退化矩阵),生成一个求解特征对问题的算法是可行的,该算法生成的特征对与矩阵的选择无关。给定一个恒定的起始向量,Lanczos algorithm将以确定的方式生成任意实对称矩阵的三对角矩阵。divide-and-conquer algorithm的“除法”部分类似地具有确定性,这意味着算法中迭代次数取决于矩阵元素值的唯一部分是“征服”部分,解决长期方程:

1+\sum_j^m w_j^2/(d_j-\lambda)=0

因此,对于每个2x2块,问题归结为如何以不依赖原始矩阵值的方式对长期方程的两个根进行排序。在

第二个部分解决方案更容易实现,但更容易失败。回想起来,这也是显而易见的。在

同一矩阵的两个不同的特征向量总是相互正交的。因此,如果特征向量平滑地变化为单个参数a的函数,则:

v_i(a).v_j(a+da)=δ{ij}+O(da)

因此,当参数a变化时,这就给出了特征向量之间的自然映射。在

这与davidzwicker和jorgeca提出的测量特征向量对之间的全局距离的想法类似,但更容易实现。然而,在特征向量快速变化的区域或参数a的变化过大的区域,这种实现很容易失败。在

另外,在特征值交叉处发生什么的问题很有趣,因为在每一个这样的交叉处系统都会退化。然而,在允许的跨越简并度的特征向量集中,会有两个满足点积条件的特征向量,它们可以作为跨越简并度的基础,从而保持映射。在

当然,这是假设在参数空间上把特征向量当作光滑的连续函数是正确的,这(正如jorgeca所指出的)我不能确定。在

如果我理解得很好,你在寻找矩阵A(t)的特征值λ(t),这些矩阵是实变量t的连续函数

我建议你参考一下书:

[1]R.Bathia:矩阵分析,Springer。第六章?在

[2]T.Kato:线性算子摄动理论简介,第二章定理5.2。在

[3]D.Hinrichsen,A.Pritchard:数学系统理论,第一卷,推论4.1.19。在

相关问题 更多 >