R 中的特征向量复数非对称矩阵与 Matlab 不同:如何解决这个问题?
eigenvectors complex nonsymmetric matrix in R different from Matlab: how to solve the this?
我想计算 R 中复数矩阵的特征值。
比较在 MATLAB 中获得的值,我没有得到在 R 中从完全相同的矩阵计算得到的相同特征值。
在 R 中,我使用了 eigen()
。在 MATLAB 中使用 eig()
或 eigs()
(这两个函数给出相同的特征值但与 R 的特征值不同)。
对于实矩阵,R和MATLAB是一致的。
如何在 R 中获得与 MATLAB 相同的结果?
Matlab 中的例子实矩阵:
squeeze(Sigma_X(:,:,h+1)) %real matrix 10x10
ans =
1.0e+03 *
Columns 1 through 6
5.8706 5.9966 6.1225 6.2484 6.3744 6.5003
5.9966 6.1260 6.2554 6.3849 6.5143 6.6438
6.1225 6.2554 6.3884 6.5213 6.6543 6.7872
6.2484 6.3849 6.5213 6.6578 6.7942 6.9306
6.3744 6.5143 6.6543 6.7942 6.9341 7.0741
6.5003 6.6438 6.7872 6.9306 7.0741 7.2175
6.6263 6.7732 6.9201 7.0671 7.2140 7.3609
6.7522 6.9026 7.0531 7.2035 7.3539 7.5044
6.8782 7.0321 7.1860 7.3399 7.4939 7.6478
7.0041 7.1615 7.3190 7.4764 7.6338 7.7912
Columns 7 through 10
6.6263 6.7522 6.8782 7.0041
6.7732 6.9026 7.0321 7.1615
6.9201 7.0531 7.1860 7.3190
7.0671 7.2035 7.3399 7.4764
7.2140 7.3539 7.4939 7.6338
7.3609 7.5044 7.6478 7.7912
7.5079 7.6548 7.8017 7.9487
7.6548 7.8052 7.9557 8.1061
7.8017 7.9557 8.1096 8.2635
7.9487 8.1061 8.2635 8.4210
opt.disp = 0;
[P, D] = eigs(squeeze(Sigma_X(:,:,h+1)),q,'LM',opt) %compute the eigenvalues and eigenvectors
P =
-0.2872 0.5128
-0.2936 0.4029
-0.2999 0.2930
-0.3062 0.1830
-0.3125 0.0731
-0.3189 -0.0368
-0.3252 -0.1467
-0.3315 -0.2566
-0.3379 -0.3665
-0.3442 -0.4764
D =
1.0e+04 *
7.0984 0
0 0.0054
R 中的例子实数矩阵:
drop(Sigma_X[,,h+1]) #Same real matrix as before, 10x10
Columns 1 through 5
5870.610+0i 5996.552+0i 6122.495+0i 6248.438+0i 6374.381+0i
5996.552+0i 6125.994+0i 6255.435+0i 6384.876+0i 6514.317+0i
6122.495+0i 6255.435+0i 6388.375+0i 6521.314+0i 6654.254+0i
6248.438+0i 6384.876+0i 6521.314+0i 6657.752+0i 6794.190+0i
6374.381+0i 6514.317+0i 6654.254+0i 6794.190+0i 6934.127+0i
6500.324+0i 6643.759+0i 6787.194+0i 6930.629+0i 7074.063+0i
6626.267+0i 6773.200+0i 6920.133+0i 7067.067+0i 7214.000+0i
6752.210+0i 6902.641+0i 7053.073+0i 7203.505+0i 7353.937+0i
6878.152+0i 7032.083+0i 7186.013+0i 7339.943+0i 7493.873+0i
7004.095+0i 7161.524+0i 7318.952+0i 7476.381+0i 7633.810+0i
Columns 6 through 10
6500.324+0i 6626.267+0i 6752.210+0i 6878.152+0i 7004.095+0i
6643.759+0i 6773.200+0i 6902.641+0i 7032.083+0i 7161.524+0i
6787.194+0i 6920.133+0i 7053.073+0i 7186.013+0i 7318.952+0i
6930.629+0i 7067.067+0i 7203.505+0i 7339.943+0i 7476.381+0i
7074.063+0i 7214.000+0i 7353.937+0i 7493.873+0i 7633.810+0i
7217.498+0i 7360.933+0i 7504.368+0i 7647.803+0i 7791.238+0i
7360.933+0i 7507.867+0i 7654.800+0i 7801.733+0i 7948.667+0i
7504.368+0i 7654.800+0i 7805.232+0i 7955.663+0i 8106.095+0i
7647.803+0i 7801.733+0i 7955.663+0i 8109.594+0i 8263.524+0i
7791.238+0i 7948.667+0i 8106.095+0i 8263.524+0i 8420.952+0i
Decomp <- eigen(drop(Sigma_X[,,h+1])) #frequency 0
DD <- diag(Decomp$values[1:q])
PP <- Decomp$vectors[,1:q]
PP
[1,] -0.2872322+0i 0.5127886+0i
[2,] -0.2935595+0i 0.4028742+0i
[3,] -0.2998868+0i 0.2929598+0i
[4,] -0.3062141+0i 0.1830454+0i
[5,] -0.3125415+0i 0.0731310+0i
[6,] -0.3188688+0i -0.0367834+0i
[7,] -0.3251961+0i -0.1466978+0i
[8,] -0.3315234+0i -0.2566122+0i
[9,] -0.3378507+0i -0.3665266+0i
[10,] -0.3441780+0i -0.4764410+0i
DD
[1,] 70983.65 0.00000
[2,] 0.00 54.34878
如您所见,当矩阵为实数时,MATLAB 和 R 会返回相同的特征向量和特征值。
让我们尝试使用复杂矩阵的相同代码。
Matlab 中的例子复杂矩阵:
j=1
squeeze(Sigma_X(:,:,j))
ans =
1.0e+02 *
Columns 1 through 5
3.4601+0.0000i 3.5075-0.0304i 3.5548-0.0607i 3.6022-0.0911i 3.6496-0.1215i
3.5075+0.0304i 3.5562+0.0000i 3.6049-0.0304i 3.6535-0.0607i 3.7022-0.0911i
3.5548+0.0607i 3.6049+0.0304i 3.6549+0.0000i 3.7049-0.0304i 3.7549- 0.0607i
3.6022+0.0911i 3.6535+0.0607i 3.7049+0.0304i 3.7562+0.0000i 3.8075- 0.0304i
3.6496+0.1215i 3.7022+0.0911i 3.7549+0.0607i 3.8075+0.0304i 3.8602+ 0.0000i
3.6970+0.1518i 3.7509+0.1215i 3.8049+0.0911i 3.8588+0.0607i 3.9128+ 0.0304i
3.7444+0.1822i 3.7996+0.1518i 3.8549+0.1215i 3.9102+0.0911i 3.9654+ 0.0607i
3.7917+0.2126i 3.8483+0.1822i 3.9049+0.1518i 3.9615+0.1215i 4.0181+ 0.0911i
3.8391+0.2429i 3.8970+0.2126i 3.9549+0.1822i 4.0128+0.1518i 4.0707+ 0.1215i
3.8865+0.2733i 3.9457+0.2429i 4.0049+0.2126i 4.0641+0.1822i 4.1234+ 0.1518i
Columns 6 through 10
3.6970-0.1518i 3.7444-0.1822i 3.7917-0.2126i 3.8391-0.2429i 3.8865- 0.2733i
3.7509-0.1215i 3.7996-0.1518i 3.8483-0.1822i 3.8970-0.2126i 3.9457- 0.2429i
3.8049-0.0911i 3.8549-0.1215i 3.9049-0.1518i 3.9549-0.1822i 4.0049- 0.2126i
3.8588-0.0607i 3.9102-0.0911i 3.9615-0.1215i 4.0128-0.1518i 4.0641- 0.1822i
3.9128-0.0304i 3.9654-0.0607i 4.0181-0.0911i 4.0707-0.1215i 4.1234- 0.1518i
3.9668+0.0000i 4.0207-0.0304i 4.0747-0.0607i 4.1286-0.0911i 4.1826- 0.1215i
4.0207+0.0304i 4.0760+0.0000i 4.1313-0.0304i 4.1865-0.0607i 4.2418- 0.0911i
4.0747+0.0607i 4.1313+0.0304i 4.1878+0.0000i 4.2444-0.0304i 4.3010- 0.0607i
4.1286+0.0911i 4.1865+0.0607i 4.2444+0.0304i 4.3023+0.0000i 4.3602- 0.0304i
4.1826+0.1215i 4.2418+0.0911i 4.3010+0.0607i 4.3602+0.0304i 4.4195+ 0.0000i
[P, D] = eigs(squeeze(Sigma_X(:,:,j)),q,'LM',opt);
P =
-0.1206 - 0.2711i 0.0471 + 0.5052i
-0.1199 - 0.2760i 0.0384 + 0.3955i
-0.1192 - 0.2810i 0.0297 + 0.2859i
-0.1186 - 0.2859i 0.0210 + 0.1762i
-0.1179 - 0.2908i 0.0124 + 0.0666i
-0.1172 - 0.2957i 0.0037 - 0.0430i
-0.1165 - 0.3006i -0.0050 - 0.1527i
-0.1159 - 0.3055i -0.0137 - 0.2623i
-0.1152 - 0.3104i -0.0224 - 0.3720i
-0.1145 - 0.3153i -0.0311 - 0.4816i
D =
1.0e+03 *
3.9211 + 0.0000i 0.0000 + 0.0000i
0.0000 + 0.0000i 0.0029 - 0.0000i
R 中的示例 复杂矩阵:
j=1
drop(Sigma_X[,,j])
Columns 1 through 4
346.0094+0.0000i 350.7470-3.0368i 355.4846-6.0736i 360.2222-9.1104i
350.7470+3.0368i 355.6162+0.0000i 360.4854-3.0368i 365.3546-6.0736i
355.4846+6.0736i 360.4854+3.0368i 365.4862+0.0000i 370.4870-3.0368i
360.2222+9.1104i 365.3546+6.0736i 370.4870+3.0368i 375.6194+0.0000i
364.9598+12.1472i 370.2238+9.1104i 375.4878+6.0736i 380.7518+3.0368i
369.6974+15.1839i 375.0930+12.1472i 380.4886+9.1104i 385.8842+6.0736i
374.4350+18.2207i 379.9622+15.1839i 385.4894+12.1472i 391.0166+9.1104i
379.1726+21.2575i 384.8314+18.2207i 390.4902+15.1839i 396.1490+12.1472i
383.9102+24.2943i 389.7006+21.2575i 395.4910+18.2207i 401.2814+15.1839i
388.6478+27.3311i 394.5698+24.2943i 400.4918+21.2575i 406.4138+18.2207i
Columns 5 through 7
364.9598-12.1472i 369.6974-15.1839i 374.4350-18.2207i
370.2238-9.1104i 375.0930-12.1472i 379.9622-15.1839i
375.4878-6.0736i 380.4886-9.1104i 385.4894-12.1472i
380.7518-3.0368i 385.8842-6.0736i 391.0166-9.1104i
386.0158+ 0.0000i 391.2798- 3.0368i 396.5438- 6.0736i
391.2798+ 3.0368i 396.6754+ 0.0000i 402.0710- 3.0368i
396.5438+ 6.0736i 402.0710+ 3.0368i 407.5982+ 0.0000i
401.8078+ 9.1104i 407.4666+ 6.0736i 413.1254+ 3.0368i
407.0718+12.1472i 412.8622+ 9.1104i 418.6526+ 6.0736i
412.3358+15.1839i 418.2578+12.1472i 424.1798+ 9.1104i
Columns 8 through 10
379.1726-21.2575i 383.9102-24.2943i 388.6478-27.3311i
384.8314-18.2207i 389.7006-21.2575i 394.5698-24.2943i
390.4902-15.1839i 395.4910-18.2207i 400.4918-21.2575i
396.1490-12.1472i 401.2814-15.1839i 406.4138-18.2207i
401.8078- 9.1104i 407.0718-12.1472i 412.3358-15.1839i
407.4666- 6.0736i 412.8622- 9.1104i 418.2578-12.1472i
413.1254- 3.0368i 418.6526- 6.0736i 424.1798- 9.1104i
418.7842+ 0.0000i 424.4430- 3.0368i 430.1018- 6.0736i
424.4430+ 3.0368i 430.2334+ 0.0000i 436.0237- 3.0368i
430.1018+ 6.0736i 436.0237+ 3.0368i 441.9457+ 0.0000i
如你所见,矩阵与之前在Matlab中计算的矩阵相同。
让我们计算特征值和特征向量。
PP
[1,] -0.2967359+0.0000000i 0.50734838+0.00000000i
[2,] -0.3009476-0.0026119i 0.39737421-0.00152766i
[3,] -0.3051593-0.0052239i 0.28740004-0.00305533i
[4,] -0.3093709-0.0078358i 0.17742587-0.00458299i
[5,] -0.3135826-0.0104478i 0.06745170-0.00611065i
[6,] -0.3177943-0.0130597i -0.04252247-0.00763831i
[7,] -0.3220060-0.0156717i -0.15249664-0.00916598i
[8,] -0.3262177-0.0182836i -0.26247080-0.01069364i
[9,] -0.3304294-0.0208955i -0.37244497-0.01222130i
[10,] -0.3346411-0.0235075i -0.48241914-0.01374896i
DD
3921.066 0.000000
0.000 2.917833
如你所见,特征值与MATLAB计算的特征值相同,但特征向量不同。如何获得与 MATLAB 相同的特征向量?
答案很简单但很难看出来,因为向量很复杂。
如果您在 MATLAB 中输入两个矩阵,然后执行此操作
P(:,1)./PP(:,1)
ans =
0.4064 + 0.9136i
0.4063 + 0.9136i
0.4063 + 0.9139i
0.4065 + 0.9138i
0.4064 + 0.9138i
0.4063 + 0.9138i
0.4063 + 0.9138i
0.4065 + 0.9137i
0.4064 + 0.9137i
0.4063 + 0.9137i
你看到它们是线性相关的,另一个也是如此。
恐怕,据我所知,没有任何方法可以保证您在两个程序中获得相同的结果。一般来说,计算特征值和向量并不容易,实现中的细微差异会导致您看到的差异。
要获得相同的结果,您可以尝试使用第一个分量对向量进行归一化,这意味着
P(:,1)/P(1,1) and PP(:,1)/PP(1,1)
这给了我相同的向量,模数很小的差异,因为你为你的例子提供了不同数量的数字。
编辑:另一个测试表明,除了将长度归一化为 1 之外,这确实是 Matlab 所做的。所以
tmp=P(:,1)/P(1,1);
tmp/norm(tmp)
returns 与您的 Matlab 示例相同的向量。
我想计算 R 中复数矩阵的特征值。 比较在 MATLAB 中获得的值,我没有得到在 R 中从完全相同的矩阵计算得到的相同特征值。
在 R 中,我使用了 eigen()
。在 MATLAB 中使用 eig()
或 eigs()
(这两个函数给出相同的特征值但与 R 的特征值不同)。
对于实矩阵,R和MATLAB是一致的。 如何在 R 中获得与 MATLAB 相同的结果?
Matlab 中的例子实矩阵:
squeeze(Sigma_X(:,:,h+1)) %real matrix 10x10
ans =
1.0e+03 *
Columns 1 through 6
5.8706 5.9966 6.1225 6.2484 6.3744 6.5003
5.9966 6.1260 6.2554 6.3849 6.5143 6.6438
6.1225 6.2554 6.3884 6.5213 6.6543 6.7872
6.2484 6.3849 6.5213 6.6578 6.7942 6.9306
6.3744 6.5143 6.6543 6.7942 6.9341 7.0741
6.5003 6.6438 6.7872 6.9306 7.0741 7.2175
6.6263 6.7732 6.9201 7.0671 7.2140 7.3609
6.7522 6.9026 7.0531 7.2035 7.3539 7.5044
6.8782 7.0321 7.1860 7.3399 7.4939 7.6478
7.0041 7.1615 7.3190 7.4764 7.6338 7.7912
Columns 7 through 10
6.6263 6.7522 6.8782 7.0041
6.7732 6.9026 7.0321 7.1615
6.9201 7.0531 7.1860 7.3190
7.0671 7.2035 7.3399 7.4764
7.2140 7.3539 7.4939 7.6338
7.3609 7.5044 7.6478 7.7912
7.5079 7.6548 7.8017 7.9487
7.6548 7.8052 7.9557 8.1061
7.8017 7.9557 8.1096 8.2635
7.9487 8.1061 8.2635 8.4210
opt.disp = 0;
[P, D] = eigs(squeeze(Sigma_X(:,:,h+1)),q,'LM',opt) %compute the eigenvalues and eigenvectors
P =
-0.2872 0.5128
-0.2936 0.4029
-0.2999 0.2930
-0.3062 0.1830
-0.3125 0.0731
-0.3189 -0.0368
-0.3252 -0.1467
-0.3315 -0.2566
-0.3379 -0.3665
-0.3442 -0.4764
D =
1.0e+04 *
7.0984 0
0 0.0054
R 中的例子实数矩阵:
drop(Sigma_X[,,h+1]) #Same real matrix as before, 10x10
Columns 1 through 5
5870.610+0i 5996.552+0i 6122.495+0i 6248.438+0i 6374.381+0i
5996.552+0i 6125.994+0i 6255.435+0i 6384.876+0i 6514.317+0i
6122.495+0i 6255.435+0i 6388.375+0i 6521.314+0i 6654.254+0i
6248.438+0i 6384.876+0i 6521.314+0i 6657.752+0i 6794.190+0i
6374.381+0i 6514.317+0i 6654.254+0i 6794.190+0i 6934.127+0i
6500.324+0i 6643.759+0i 6787.194+0i 6930.629+0i 7074.063+0i
6626.267+0i 6773.200+0i 6920.133+0i 7067.067+0i 7214.000+0i
6752.210+0i 6902.641+0i 7053.073+0i 7203.505+0i 7353.937+0i
6878.152+0i 7032.083+0i 7186.013+0i 7339.943+0i 7493.873+0i
7004.095+0i 7161.524+0i 7318.952+0i 7476.381+0i 7633.810+0i
Columns 6 through 10
6500.324+0i 6626.267+0i 6752.210+0i 6878.152+0i 7004.095+0i
6643.759+0i 6773.200+0i 6902.641+0i 7032.083+0i 7161.524+0i
6787.194+0i 6920.133+0i 7053.073+0i 7186.013+0i 7318.952+0i
6930.629+0i 7067.067+0i 7203.505+0i 7339.943+0i 7476.381+0i
7074.063+0i 7214.000+0i 7353.937+0i 7493.873+0i 7633.810+0i
7217.498+0i 7360.933+0i 7504.368+0i 7647.803+0i 7791.238+0i
7360.933+0i 7507.867+0i 7654.800+0i 7801.733+0i 7948.667+0i
7504.368+0i 7654.800+0i 7805.232+0i 7955.663+0i 8106.095+0i
7647.803+0i 7801.733+0i 7955.663+0i 8109.594+0i 8263.524+0i
7791.238+0i 7948.667+0i 8106.095+0i 8263.524+0i 8420.952+0i
Decomp <- eigen(drop(Sigma_X[,,h+1])) #frequency 0
DD <- diag(Decomp$values[1:q])
PP <- Decomp$vectors[,1:q]
PP
[1,] -0.2872322+0i 0.5127886+0i
[2,] -0.2935595+0i 0.4028742+0i
[3,] -0.2998868+0i 0.2929598+0i
[4,] -0.3062141+0i 0.1830454+0i
[5,] -0.3125415+0i 0.0731310+0i
[6,] -0.3188688+0i -0.0367834+0i
[7,] -0.3251961+0i -0.1466978+0i
[8,] -0.3315234+0i -0.2566122+0i
[9,] -0.3378507+0i -0.3665266+0i
[10,] -0.3441780+0i -0.4764410+0i
DD
[1,] 70983.65 0.00000
[2,] 0.00 54.34878
如您所见,当矩阵为实数时,MATLAB 和 R 会返回相同的特征向量和特征值。
让我们尝试使用复杂矩阵的相同代码。
Matlab 中的例子复杂矩阵:
j=1
squeeze(Sigma_X(:,:,j))
ans =
1.0e+02 *
Columns 1 through 5
3.4601+0.0000i 3.5075-0.0304i 3.5548-0.0607i 3.6022-0.0911i 3.6496-0.1215i
3.5075+0.0304i 3.5562+0.0000i 3.6049-0.0304i 3.6535-0.0607i 3.7022-0.0911i
3.5548+0.0607i 3.6049+0.0304i 3.6549+0.0000i 3.7049-0.0304i 3.7549- 0.0607i
3.6022+0.0911i 3.6535+0.0607i 3.7049+0.0304i 3.7562+0.0000i 3.8075- 0.0304i
3.6496+0.1215i 3.7022+0.0911i 3.7549+0.0607i 3.8075+0.0304i 3.8602+ 0.0000i
3.6970+0.1518i 3.7509+0.1215i 3.8049+0.0911i 3.8588+0.0607i 3.9128+ 0.0304i
3.7444+0.1822i 3.7996+0.1518i 3.8549+0.1215i 3.9102+0.0911i 3.9654+ 0.0607i
3.7917+0.2126i 3.8483+0.1822i 3.9049+0.1518i 3.9615+0.1215i 4.0181+ 0.0911i
3.8391+0.2429i 3.8970+0.2126i 3.9549+0.1822i 4.0128+0.1518i 4.0707+ 0.1215i
3.8865+0.2733i 3.9457+0.2429i 4.0049+0.2126i 4.0641+0.1822i 4.1234+ 0.1518i
Columns 6 through 10
3.6970-0.1518i 3.7444-0.1822i 3.7917-0.2126i 3.8391-0.2429i 3.8865- 0.2733i
3.7509-0.1215i 3.7996-0.1518i 3.8483-0.1822i 3.8970-0.2126i 3.9457- 0.2429i
3.8049-0.0911i 3.8549-0.1215i 3.9049-0.1518i 3.9549-0.1822i 4.0049- 0.2126i
3.8588-0.0607i 3.9102-0.0911i 3.9615-0.1215i 4.0128-0.1518i 4.0641- 0.1822i
3.9128-0.0304i 3.9654-0.0607i 4.0181-0.0911i 4.0707-0.1215i 4.1234- 0.1518i
3.9668+0.0000i 4.0207-0.0304i 4.0747-0.0607i 4.1286-0.0911i 4.1826- 0.1215i
4.0207+0.0304i 4.0760+0.0000i 4.1313-0.0304i 4.1865-0.0607i 4.2418- 0.0911i
4.0747+0.0607i 4.1313+0.0304i 4.1878+0.0000i 4.2444-0.0304i 4.3010- 0.0607i
4.1286+0.0911i 4.1865+0.0607i 4.2444+0.0304i 4.3023+0.0000i 4.3602- 0.0304i
4.1826+0.1215i 4.2418+0.0911i 4.3010+0.0607i 4.3602+0.0304i 4.4195+ 0.0000i
[P, D] = eigs(squeeze(Sigma_X(:,:,j)),q,'LM',opt);
P =
-0.1206 - 0.2711i 0.0471 + 0.5052i
-0.1199 - 0.2760i 0.0384 + 0.3955i
-0.1192 - 0.2810i 0.0297 + 0.2859i
-0.1186 - 0.2859i 0.0210 + 0.1762i
-0.1179 - 0.2908i 0.0124 + 0.0666i
-0.1172 - 0.2957i 0.0037 - 0.0430i
-0.1165 - 0.3006i -0.0050 - 0.1527i
-0.1159 - 0.3055i -0.0137 - 0.2623i
-0.1152 - 0.3104i -0.0224 - 0.3720i
-0.1145 - 0.3153i -0.0311 - 0.4816i
D =
1.0e+03 *
3.9211 + 0.0000i 0.0000 + 0.0000i
0.0000 + 0.0000i 0.0029 - 0.0000i
R 中的示例 复杂矩阵:
j=1
drop(Sigma_X[,,j])
Columns 1 through 4
346.0094+0.0000i 350.7470-3.0368i 355.4846-6.0736i 360.2222-9.1104i
350.7470+3.0368i 355.6162+0.0000i 360.4854-3.0368i 365.3546-6.0736i
355.4846+6.0736i 360.4854+3.0368i 365.4862+0.0000i 370.4870-3.0368i
360.2222+9.1104i 365.3546+6.0736i 370.4870+3.0368i 375.6194+0.0000i
364.9598+12.1472i 370.2238+9.1104i 375.4878+6.0736i 380.7518+3.0368i
369.6974+15.1839i 375.0930+12.1472i 380.4886+9.1104i 385.8842+6.0736i
374.4350+18.2207i 379.9622+15.1839i 385.4894+12.1472i 391.0166+9.1104i
379.1726+21.2575i 384.8314+18.2207i 390.4902+15.1839i 396.1490+12.1472i
383.9102+24.2943i 389.7006+21.2575i 395.4910+18.2207i 401.2814+15.1839i
388.6478+27.3311i 394.5698+24.2943i 400.4918+21.2575i 406.4138+18.2207i
Columns 5 through 7
364.9598-12.1472i 369.6974-15.1839i 374.4350-18.2207i
370.2238-9.1104i 375.0930-12.1472i 379.9622-15.1839i
375.4878-6.0736i 380.4886-9.1104i 385.4894-12.1472i
380.7518-3.0368i 385.8842-6.0736i 391.0166-9.1104i
386.0158+ 0.0000i 391.2798- 3.0368i 396.5438- 6.0736i
391.2798+ 3.0368i 396.6754+ 0.0000i 402.0710- 3.0368i
396.5438+ 6.0736i 402.0710+ 3.0368i 407.5982+ 0.0000i
401.8078+ 9.1104i 407.4666+ 6.0736i 413.1254+ 3.0368i
407.0718+12.1472i 412.8622+ 9.1104i 418.6526+ 6.0736i
412.3358+15.1839i 418.2578+12.1472i 424.1798+ 9.1104i
Columns 8 through 10
379.1726-21.2575i 383.9102-24.2943i 388.6478-27.3311i
384.8314-18.2207i 389.7006-21.2575i 394.5698-24.2943i
390.4902-15.1839i 395.4910-18.2207i 400.4918-21.2575i
396.1490-12.1472i 401.2814-15.1839i 406.4138-18.2207i
401.8078- 9.1104i 407.0718-12.1472i 412.3358-15.1839i
407.4666- 6.0736i 412.8622- 9.1104i 418.2578-12.1472i
413.1254- 3.0368i 418.6526- 6.0736i 424.1798- 9.1104i
418.7842+ 0.0000i 424.4430- 3.0368i 430.1018- 6.0736i
424.4430+ 3.0368i 430.2334+ 0.0000i 436.0237- 3.0368i
430.1018+ 6.0736i 436.0237+ 3.0368i 441.9457+ 0.0000i
如你所见,矩阵与之前在Matlab中计算的矩阵相同。 让我们计算特征值和特征向量。
PP
[1,] -0.2967359+0.0000000i 0.50734838+0.00000000i
[2,] -0.3009476-0.0026119i 0.39737421-0.00152766i
[3,] -0.3051593-0.0052239i 0.28740004-0.00305533i
[4,] -0.3093709-0.0078358i 0.17742587-0.00458299i
[5,] -0.3135826-0.0104478i 0.06745170-0.00611065i
[6,] -0.3177943-0.0130597i -0.04252247-0.00763831i
[7,] -0.3220060-0.0156717i -0.15249664-0.00916598i
[8,] -0.3262177-0.0182836i -0.26247080-0.01069364i
[9,] -0.3304294-0.0208955i -0.37244497-0.01222130i
[10,] -0.3346411-0.0235075i -0.48241914-0.01374896i
DD
3921.066 0.000000
0.000 2.917833
如你所见,特征值与MATLAB计算的特征值相同,但特征向量不同。如何获得与 MATLAB 相同的特征向量?
答案很简单但很难看出来,因为向量很复杂。 如果您在 MATLAB 中输入两个矩阵,然后执行此操作
P(:,1)./PP(:,1)
ans =
0.4064 + 0.9136i
0.4063 + 0.9136i
0.4063 + 0.9139i
0.4065 + 0.9138i
0.4064 + 0.9138i
0.4063 + 0.9138i
0.4063 + 0.9138i
0.4065 + 0.9137i
0.4064 + 0.9137i
0.4063 + 0.9137i
你看到它们是线性相关的,另一个也是如此。
恐怕,据我所知,没有任何方法可以保证您在两个程序中获得相同的结果。一般来说,计算特征值和向量并不容易,实现中的细微差异会导致您看到的差异。
要获得相同的结果,您可以尝试使用第一个分量对向量进行归一化,这意味着
P(:,1)/P(1,1) and PP(:,1)/PP(1,1)
这给了我相同的向量,模数很小的差异,因为你为你的例子提供了不同数量的数字。
编辑:另一个测试表明,除了将长度归一化为 1 之外,这确实是 Matlab 所做的。所以
tmp=P(:,1)/P(1,1);
tmp/norm(tmp)
returns 与您的 Matlab 示例相同的向量。