kir*_*off 0 c++ python precision scientific-computing
优化后,我使用 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)
Run Code Online (Sandbox Code Playgroud)
Python和C++都使用机器本机格式;Pythonfloat相当于 C++ 的double. 任何差异都可能是由于算法实现方式的差异,
或者,如果硬件具有用于中间值的扩展格式(英特尔的情况),则语言将值存储回内存的时间和位置 - 值在 Python 中可能比在 C++ 中更频繁地存储到内存中。如果没有看到确切的代码,就不可能说更多(但是大量元素的总和可能会显着偏离,具体取决于元素的顺序和相对大小)。
| 归档时间: |
|
| 查看次数: |
1793 次 |
| 最近记录: |