最適化の後、私はPythonとC++の両方で最適なパラメータで残差を計算します。結果の差は大きい。ここで私はより正確に進める方法です:Python/C++ - 精度の差
私はPythonでパラメトリックモデルに従ってデータを生成します。 XとYをExcelファイルに保存します。このファイルを私のC++プログラムにロードし、最適化を実行します。私は最適なパラメータを思いつきました。それは、そのシリーズを生成するために使用されたパラメータにかなり近いものです。次に、PythonとC++で残差(Yとモデル出力の最適なパラメータの差の二乗和)を計算します。結果は膨大で、パラメータの変化に非常に敏感なモデルでは最大10^3の差があります。これらの違いは、PythonやC++の精度を扱う異なる方法に帰することができますか、それとも何か間違っている可能性がありますか?最適化が終了すると、残差計算は単純な計算であり、問題がどこにあるのかが問題ではないかと思います。
アドバイスや参考に感謝します。
EDIT ---データを生成し、残差の二乗和を計算するためのPythonコードを簡単に表示できますが、計算はインタープリタを介して実行されるため、C++コードではありません。コメントありがとうございます。
P1 = 5.21
P2 = 0.22
X_= list(range(0,100,1))
X=[float(x)/float(10) for x in X_]
Y = [P1*numpy.exp(-1*P2*x) for x in X]
##plt.plot(X,Y)
##plt.show()
##for j in range(len(Y)):
## Y[j]+=rg.normal(0,0.01)
#build some input files
X1f = open('F:\WORK\SOLVEUR\ALGOCODE\PYTHON_\DataSets\exponential1X.txt', 'w')
for i in range(len(X)):
X1f.write(str(X[i])+'\n')
X1f.close()
Yf = open('F:\WORK\SOLVEUR\ALGOCODE\PYTHON_\DataSets\exponential1Y.txt', 'w')
for i in range(len(Y)):
Yf.write(str(Y[i])+'\n')
Yf.close()
def func_exp_1(param, x1, y):
p1, p2 = param
res = sum((y_i - p1*numpy.exp(-1*p2*x))**2 for x1_i, y_i in zip(x1, y))
return res
print func_exp_1([5.2132,0.2202],x1,y)
いくつかのコードを見ることなく、できることはあまりありません。 – Mysticial
はい、finiti-precision floatで実行される計算方法には大きな違いがあります。コードを表示 –
値を_Excel_ファイルに保存しますか?それが、私があなたのトラブルの原因を最も疑っているところです。それらをバイナリIEEE754に保存するとどうなりますか? – leftaroundabout