请教各位大侠一个矩阵特征值排序的问题
mathematica吧
全部回复
仅看楼主
level 3
yb118 楼主
无论是内置的Eigenvalues,还是使用SchurDecomposition,总会莫名的改变原矩阵特征值的顺序。比如一个4阶方阵,test ={{600, 20, 20, 20}, {20, 400, 20, 20}, {20, 20, 800, 20}, {20, 20, 20,1000}},对角原远大于非对角元,显然特征值的顺序应该是600左右的一个,400左右的一个,800左右的一个,1000左右的一个。可是Eigenvalues一定会从大到小牌序,用Schur分解的方法就更离谱了:
test 1=SchurDecomposition[N@test][[1]];
[email protected]
给出的顺序是400,600,1000,800,并且还会随着非对角元的取值迷之变化顺序。
请教各位大侠,如何让求出的特征值顺序和原矩阵的顺序保持一致?因为要与基的顺序对应,所以需要知道具体顺序。谢谢大侠们[呵呵]
2021年03月27日 14点03分 1
吧务
level 10
接近{k,0,0}的特征向量所对应的特征值,会接近于第一个主对角元。以此类推。
2021年03月27日 22点03分 2
谢谢你的回答,我以非对角元远小于主对角元为例问,是为了说的方便,很多时候它们有相似的数值,那么从特征值大小上无法判断软件给出的顺序是否发生了变化。我需要计算另一个矩阵乘某个固定行对应的的特征值,自动改变顺序导致我根本无法判断我的结果对错。请教你有办法吗?相信有这个需求的人也少。
2021年03月28日 01点03分
相信有这个需求的朋友也不少,谢谢你
2021年03月28日 01点03分
@yb118 如果矩阵不是接近于对角矩阵的,那么使其对角化的坐标变换就不可避免地涉及轴的大幅度旋转,这种情况下,你没法把新旧轴用唯一的方式对应起来。考虑45度角的旋转矩阵,新的x轴在旧坐标系中是(1,1)方向,我可以说它源于旧x轴,也可以说它源于旧y轴
2021年03月28日 13点03分
@yb118 也就是说,这种情况下,特征值没有什么顺序之分。每个特征值都是“混合”的,而不是一一对应于原坐标方向的。
2021年03月28日 13点03分
level 3
楼主,你这个问题解决了吗,我最近也有类似的问题
2022年10月20日 13点10分 4
level 3
就是我在用Eigensystem求解矩阵的时候,如何让本征值从大到小排序或者是从小到大排序,并且本征值和本征态能够一一对应
2022年10月20日 13点10分 5
你这个用Sort之类的函数排一排就行,比LZ的问题要容易太多了。
2022年11月05日 06点11分
吧务
level 15
说实话我不确定我是不是完全理解了LZ的问题,但LZ的问题似乎和
《How do I keep the right ordering of eigenvalues using Eigensystem?》
mathematica.stackexchange.com/q/6420/1871
是同一问题。
2022年11月05日 06点11分 6
是同一个问题,我去那里看了,也没有找到合适的解决办法,[泪]
2023年05月17日 10点05分
level 2
想问下楼主这个问题解决了吗?我也遇到同样的问题了
2023年05月17日 10点05分 7
没解决,大家有解决办法记得互相说一声
2023年05月17日 11点05分
level 1
对于Mathematica而言,如果是对一个数组进行排序,有专门的函数Sort[],代码如下:
Sort[{4, 1, 3, 2, 2}, Greater] (***对41322进行从大到小排列****)
输出:{4,3,2,1}
Lin Zhang
2024年01月07日 04点01分 9
输出:{4, 3, 2, 2,1}
2024年01月07日 04点01分
你压根没懂我的问题
2024年01月07日 04点01分
level 9
test = {{600, 20, 20, 20}, {20, 400, 20, 20}, {20, 20, 800, 20}, {20,
20, 20, 1000}}; {e, v} = Eigensystem[N@test];
data = Association@Thread[Rule[e, v]];
data /@ (Flatten[Nearest[e, #] & /@ Diagonal[test]])
[酷]利用Association可以给出key值对应的value
2024年11月22日 10点11分 11
1