優化後,我使用Python和C++來計算具有最優參數的殘差。結果的差距是巨大的。下面是我如何更精確地進行:Python/C++ - 精度差異
我根據Python中的參數化模型生成數據。我將X和Y存儲在Excel文件中。我在我的C++程序中加載這個文件並運行優化。我想出了最佳參數,這些參數非常接近用於生成系列的參數。然後,我用Python和C++計算殘差(Y和模型輸出之差的平方和)。結果很大,對於參數變化非常敏感的模型,差異可達10^3。這些差異是否可以用不同的方法來處理Python和C++中的精度問題,或者可能會出現其他問題?一旦優化完成,殘差計算就是一個簡單的計算,我不知道問題可能出在哪裏,如果不是精度問題。
非常感謝您的任何建議或參考。
編輯---我可以很容易地顯示生成數據和計算平方殘差總和的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 2012-03-28 08:12:06
是的,與使用finiti-precision浮點器完成的不同計算方法可能會有很大的差異。顯示您的代碼 – 2012-03-28 08:12:25
您將值存儲在_Excel_文件中?那將是我最懷疑造成你的麻煩的原因。如果將它們存儲在二進制IEEE754中會發生什麼? – leftaroundabout 2012-03-28 09:35:37