我正在移植一个在Matlab中工作的算法,以便numpy并观察到一个奇怪的行为.相关的代码段是
P = eye(4)*1e20;
A = [1 -0.015 -0.025 -0.035; 0.015 1 0.035 -0.025; 0.025 -0.035 1 0.015; 0.035 0.025 -0.015 1];
V1 = A*(P*A')
V2 = (A*P)*A'
Run Code Online (Sandbox Code Playgroud)
当我使用Matlab运行时,此代码提供以下矩阵:
V1 = 1.0021e+20 0 -8.0000e+00 0
0 1.0021e+20 0 0
-8.0000e+00 0 1.0021e+20 0
0 0 0 1.0021e+20
V2 = 1.0021e+20 0 -8.0000e+00 0
0 1.0021e+20 0 0
-8.0000e+00 0 1.0021e+20 0
0 0 0 1.0021e+20
Run Code Online (Sandbox Code Playgroud)
请注意,V1和V2与预期相同.
当相同的代码在Octave中运行时,它提供:
V1 = 1.0021e+20 4.6172e+01 -1.3800e+02 1.8250e+02
-4.6172e+01 1.0021e+20 -1.8258e+02 -1.3800e+02
1.3801e+02 1.8239e+02 1.0021e+20 …Run Code Online (Sandbox Code Playgroud)