我希望在2个矩阵A
和B
之间找到或构建公共特征向量矩阵X,例如:
AX=aX with "a" the diagonal matrix corresponding to the eigenvalues
BX=bX with "b" the diagonal matrix corresponding to the eigenvalues
其中A
和B
是平方矩阵和可对角化矩阵
我查看了一下a similar post,但没有得出结论,即当我构建最终想要的自同态F
时,得到了有效的结果,该自同态由:F = P D P^-1
定义
我也读过wikipedia topic和这个interesting paper,但不必提取很容易实现的方法
特别是,我对eig(A,B)
Matlab函数感兴趣
我试着这样使用它:
% Search for common build eigen vectors between FISH_sp and FISH_xc
[V,D] = eig(FISH_sp,FISH_xc);
% Diagonalize the matrix (A B^-1) to compute Lambda since we have AX=Lambda B X
[eigenv, eigen_final] = eig(inv(FISH_xc)*FISH_sp);
% Compute the final endomorphism : F = P D P^-1
FISH_final = V*eye(7).*eigen_final*inv(V)
但是矩阵FISH_final
没有给出好的结果,因为我可以从这个矩阵FISH_final
进行其他计算(这实际上是一个Fisher矩阵),这些计算的结果是无效的
所以,我肯定是在上面的代码片段中出错了。第一次,我更喜欢在Matlab中总结,就好像它是一个原型一样,如果它能工作,那么就用MKL或Python函数来完成这个合成。因此,也需要标记python
我如何建立这些公共特征向量并找到相关的特征值?我有点迷失在现有的所有可能实现它的方法之间
下面的屏幕截图显示换向器的内核必须不同于零向量:
编辑1:从数学交换中,我们建议在换向器[A,B]上使用奇异值分解(SVD),这是在Matlab中通过以下方式实现的:
“如果𝑣 是公共特征向量,则‖(𝐴𝐵−𝐵𝐴)𝑣‖=SVD方法为您提供了一个单位向量𝑣 这将‖最小化(𝐴𝐵−𝐵𝐴)𝑣‖ (限制条件是‖𝑣‖=1) "
所以我从中提取近似特征向量V:
[U,S,V] = svd(A*B-B*A)
是否有办法提高精确度,以最大限度地减少‖(𝐴𝐵−𝐵𝐴)𝑣‖ 尽可能多?
重要评论:也许你们中的一些人没有完全理解我的目标
关于本征向量的公共基,我正在寻找V1
和V2
的组合(向量或矩阵),或直接在2个输入Fisher-marices上使用null
算子,以建立这个新的基“p”,其中,除了已知的D1
和D2
(注D1a
和D2a
)之外的其他本征值,我们可以:
F = P (D1a+D2a) P^-1
为了计算新的Fisher矩阵F,我需要知道P
,假设D1a
和D2a
分别等于D1
和D2
对角矩阵(来自A
和B
矩阵的对角化)
如果我知道本征向量的公共基P
,我可以从D1
和D2
推导出D1a
和Da2
,不是吗
以下链接提供了2个Fisher矩阵:
我怀疑这是一个相当微妙的问题
首先,在数学上,A和B是同时对角化的,当它们通勤时,也就是当它们通勤时
所以我想说,首先要检查的是,你的A和B确实通勤,这是第一个棘手的问题:由于舍入误差,计算出的[A,B]不可能都是零,你需要确定[A,B]非零是因为舍入误差,还是实际上,A和B不通勤
现在假设x是A的特征向量,特征值为e。然后
从数学上讲,我们有两种可能性:要么Bx是0,要么Bx也是A的特征向量,特征值为e
一个很好的例子是A的所有元素都不同,即A的每个特征空间都是一维的。在这种情况下: 如果AX=Xa表示对角线a,那么BX=Xb表示对角线b(需要进行计算)。如果你对角化A,并且所有的特征值都是完全不同的,那么你可以假设每个特征空间的维数都是1,但是“足够”是什么意思呢?唉,又是一个微妙的问题。如果两个计算的特征值非常接近,那么特征值是不同的还是差异舍入误差? 总之,为了计算b的每个特征向量x,来计算b的特征值。如果| | Bx | |与| | x | |相比足够小,那么B的本征值为0,否则为
在一般情况下,一些特征空间的维数可能大于1。一维本征空间可以如上所述处理,但高维本征空间需要更多的计算
假设m个特征向量x[1]。。A的x[m]对应于特征值e。由于A和B通勤,很容易看出B将xs跨越的空间映射到了它自己。设C为mxm矩阵
然后C是对称的,所以我们可以对它进行对角化,即用
如果我们定义
然后一点代数表明y[l]是B的特征向量,特征值为c[l]。此外,由于每个x[i]是具有相同特征值e的A的特征向量,因此每个y[l]也是具有特征向量e的A的特征向量
总而言之,我认为一种方法是:
测试换向器是否为零的一种相对昂贵(在计算工作中)但合理可靠的方法是计算换向器的奇异值,取最大奇异值,比如c,并取A和b的最大奇异值(或特征值的最大绝对值)。除非c小得多(例如1e-10倍)a和b中的较小者,你应该得出换向器不为零的结论
我认为Matlab中没有内置的工具来计算两个矩阵的公共特征值。我将概述蛮力方法,并在Matlab中使用它,以突出其特征向量相关的一些方法。我们假设矩阵A和B是平方的且可对角化的
步骤概述:
分别获取A和B的特征向量/值
将合成的特征向量按其特征空间分组
通过检查A和B的特征向量之间的线性相关性,一次检查一对特征空间,检查特征空间的相交
Matlab确实提供了(有效地)完成每个步骤的方法!当然,第3步需要多次检查线性依赖关系,这意味着我们可能会进行不必要的计算。更不用说,查找公共特征向量可能不需要查找所有特征向量。所以这并不是一个通用的数值公式
如何获得特征向量/值
语法是
其中
D(i), V(:,i)
是对应的本征对只是要小心数字错误。换句话说,如果你检查
tol<n*
^{n
对于小矩阵a应该是真的,但是对于0或1可能不是真的例如:
如何根据特征空间对特征向量进行分组
在Matlab中,特征值不会在
[V,D] = eig(A)
的输出中自动排序。所以你需要这样做获取矩阵的对角项:
diag(D)
排序并跟踪排序所需的排列:
[d,I]=sort(diag(D))
识别
d
:[~,ia,~]=unique(d,'stable')
中的重复元素ia(i)
告诉您第i
个特征空间的开始索引。因此,您可以期望d(ia(i):ia(i+1)-1)
是相同的特征值,因此属于i
第特征空间的特征向量是W(:,ia(i):ia(i+1)-1)
列,其中W=V(:,I)
。当然,对于最后一个,索引是ia(end):end
最后一步恰好得到了真正一般性的回答here。在这里,
unique
至少对于小的A
是足够的(请随意问一个单独的问题,关于如何有效地执行“基于另一对角矩阵洗牌一个矩阵的列”的整个步骤。可能还有其他使用内置Matlab函数的有效方法。)
比如说,
这是有意义的,因为第一个特征空间的特征值3由
W
的第1列和第2列的跨度组成,第二个空间也是如此如何获得两个集合的(跨度)线性相交
要完成查找公共特征向量的任务,请对
A
和B
执行上述操作。接下来,对于每对特征空间,检查线性相关性。如果存在线性相关性,则线性相交为答案检查线性依赖关系有多种方法。一是使用他人的工具。示例:https://www.mathworks.com/matlabcentral/fileexchange/32060-intersection-of-linear-subspaces
一种是通过逐列连接列向量得到矩阵的RREF
假设您在步骤2中进行了计算,得到了
V1, D1, d1, W1, ia1
的A
和V2, D2, d2, W2, ia2
的B
。你需要做什么其中
col1
是W1(:,ia1(i):ia1(i+1)-1)
,如第2步所述,但最后一个空格和类似的col2
有警告,我们所说的check_linear_dependency
是指以下内容。首先我们得到RREF:首先,您正在寻找
rank([col1,col2])<size([col1,col2],2)
。如果您已经计算了rref
,那么您已经有了排名。您可以查看Matlab documentation以了解详细信息。您需要分析代码以选择更有效的方法。我将避免猜测Matlab在rank()
中的作用。尽管做rank()
是否意味着做rref
中的工作可以成为一个好的独立的问题在
rank([col1,col2])<size([col1,col2],2)
为true
的情况下,某些行没有前导1我相信p
将帮助您追溯哪些列依赖于哪些其他列。你可以从这里建立交叉点。像往常一样,要警惕数字错误妨碍了==
语句。我们将要讨论一个不同的问题,即如何从Matlab中的rref()
得到线性相交,所以我将把它留在这里还有另一种方法使用fundamental theorem of linear algebra(*对这个不幸的命名感到叹息):
我从here得到的公式。我认为ftla是它应该起作用的原因。如果这不是原因,或者如果您想确保公式有效(您可能应该这样做),请问一个单独的问题。请注意,纯数学问题应该放在不同的stackexchange网站上
现在我想我们完了
编辑1:
让我们用一个例子来说明
ia
是如何工作的。假设我们用一个尾随的1
来命名所有事物,用A
和2
来命名所有事物。我们需要编辑2:
我应该提到一个观察结果,即公共特征向量应该是换向器零空间中的特征向量。因此,也许
null(A*B-B*A)
会产生相同的结果但仍然要警惕数字错误。使用蛮力法,我们从低
tol
的特征对开始(见前面章节中的定义),因此我们已经验证了特征向量中的“特征”部分。对于null(A*B-B*A)
,也应该这样做当然,有多种方法在手,比较不同方法的结果是个好主意
相关问题 更多 >
编程相关推荐