ランダム化を使用しないスクリプトを実行すると、さまざまな答えが得られます。スクリプトを実行するたびに、答えは同じになると思います。この問題は、特定の (悪条件の) 入力データでのみ発生するようです。
スニペットは、線形システムの特定のタイプのコントローラーを計算するアルゴリズムから来ており、主に線形代数 (逆行列、リカッチ方程式、固有値) を実行することで構成されています。
明らかに、これは私のコードが正しい結果をもたらすとは信じられないため、私にとって大きな懸念事項です。条件の悪いデータでは結果が間違っている可能性があることはわかっていますが、一貫して間違っていると予想しています。Windows マシンで答えが常に同じではないのはなぜですか? Linux マシンと Windows マシンで同じ結果が得られないのはなぜですか?
Python 2.7.9 (default, Dec 10 2014, 12:24:55) [MSC v.1500 32 bit (Intel)] on win 32
Numpy バージョン 1.8.2 および Scipy 0.14.0を使用しています。(Windows 8、64 ビット)。
コードは以下です。また、2 台の Linux マシンでコードを実行してみましたが、スクリプトは常に同じ答えを返します (ただし、マシンの答えは異なります)。1 つは、Numpy 1.8.2 および Scipy 0.14.0 で Python 2.7.8 を実行していました。2 つ目は、Numpy 1.6.1 と Scipy 0.12.0 で Python 2.7.3 を実行していました。
リカッチ方程式を 3 回解き、答えを出力します。毎回同じ答えを期待していますが、代わりにシーケンス '1.75305103767e-09; を取得します。3.25501787302e-07; 3.25501787302e-07'.
import numpy as np
import scipy.linalg
matrix = np.matrix
A = matrix([[ 0.00000000e+00, 2.96156260e+01, 0.00000000e+00,
-1.00000000e+00],
[ -2.96156260e+01, -6.77626358e-21, 1.00000000e+00,
-2.11758237e-22],
[ 0.00000000e+00, 0.00000000e+00, 2.06196064e+00,
5.59422224e+01],
[ 0.00000000e+00, 0.00000000e+00, 2.12407340e+01,
-2.06195974e+00]])
B = matrix([[ 0. , 0. , 0. ],
[ 0. , 0. , 0. ],
[ -342.35401351, -14204.86532216, 31.22469724],
[ 1390.44997337, 342.33745324, -126.81720597]])
Q = matrix([[ 5.00000001, 0. , 0. , 0. ],
[ 0. , 5.00000001, 0. , 0. ],
[ 0. , 0. , 0. , 0. ],
[ 0. , 0. , 0. , 0. ]])
R = matrix([[ -3.75632852e+04, -0.00000000e+00, 0.00000000e+00],
[ -0.00000000e+00, -3.75632852e+04, 0.00000000e+00],
[ 0.00000000e+00, 0.00000000e+00, 4.00000000e+00]])
counter = 0
while counter < 3:
counter +=1
X = scipy.linalg.solve_continuous_are(A, B, Q, R)
print(-3449.15531628 - X[0,0])
私の派手な設定は以下の通りですprint np.show_config()
lapack_opt_info: ライブラリ = ['mkl_blas95'、'mkl_lapack95'、'mkl_intel_c'、'mkl_intel_thread'、'mkl_core'、'libiomp5md'、'mkl_blas95'、'mkl_lapack95'、'mkl_intel_c'、'mkl_intel_thread'、'mkl'corem libiomp'、 ] library_dirs = ['c:/Program Files (x86)/Intel/Composer XE 2013 SP1/mkl/lib/ia32', 'C:/Program Files (x86)/Intel/Composer XE 2013 SP1/compiler/lib/ia32' ] define_macros = [('SCIPY_MKL_H', なし)] include_dirs = ['c:/Program Files (x86)/Intel/Composer XE 2013 SP1/mkl/include'] blas_opt_info: ライブラリ = ['mkl_blas95', 'mkl_lapack95', 'mkl_intel_c', 'mkl_intel_thread', 'mkl_core', 'libiomp5md'] library_dirs = ['c:/Program Files (x86)/Intel/Composer XE 2013 SP1/mkl/lib/ia32', 'C:/Program Files (x86)/Intel/Composer XE 2013 SP1/compiler/lib/ia32' ] define_macros = [('SCIPY_MKL_H', なし)] include_dirs = ['c:/Program Files (x86)/Intel/Composer XE 2013 SP1/mkl/include'] openblas_info: 利用不可 lapack_mkl_info: ライブラリ = ['mkl_blas95'、'mkl_lapack95'、'mkl_intel_c'、'mkl_intel_thread'、'mkl_core'、'libiomp5md'、'mkl_blas95'、'mkl_lapack95'、'mkl_intel_c'、'mkl_intel_thread'、'mkl'corem libiomp'、 ] library_dirs = ['c:/Program Files (x86)/Intel/Composer XE 2013 SP1/mkl/lib/ia32', 'C:/Program Files (x86)/Intel/Composer XE 2013 SP1/compiler/lib/ia32' ] define_macros = [('SCIPY_MKL_H', なし)] include_dirs = ['c:/Program Files (x86)/Intel/Composer XE 2013 SP1/mkl/include'] blas_mkl_info: ライブラリ = ['mkl_blas95', 'mkl_lapack95', 'mkl_intel_c', 'mkl_intel_thread', 'mkl_core', 'libiomp5md'] library_dirs = ['c:/Program Files (x86)/Intel/Composer XE 2013 SP1/mkl/lib/ia32', 'C:/Program Files (x86)/Intel/Composer XE 2013 SP1/compiler/lib/ia32' ] define_macros = [('SCIPY_MKL_H', なし)] include_dirs = ['c:/Program Files (x86)/Intel/Composer XE 2013 SP1/mkl/include'] mkl_info: ライブラリ = ['mkl_blas95', 'mkl_lapack95', 'mkl_intel_c', 'mkl_intel_thread', 'mkl_core', 'libiomp5md'] library_dirs = ['c:/Program Files (x86)/Intel/Composer XE 2013 SP1/mkl/lib/ia32', 'C:/Program Files (x86)/Intel/Composer XE 2013 SP1/compiler/lib/ia32' ] define_macros = [('SCIPY_MKL_H', なし)] include_dirs = ['c:/Program Files (x86)/Intel/Composer XE 2013 SP1/mkl/include'] なし
(質問を削除するために編集)