我正在研究数值导数的稳定性,作为计算这些导数所采取的步骤的函数。使用具有 15 个点的导数(通过有限差分法获得),我得到以下图(每个多极点“ l
”对应于一个参数,该参数取决于导数但无关紧要):
现在,我想将这个 15 点的导数与用 3、5 和 7 点计算的导数进行比较。为此,我刚刚绘制了相对差异(具有绝对差异):
abs(f'_15_pts - f'_3_pts)/f'_3_pts for comparison between 15 and 3 points
abs(f'_15_pts - f'_5_pts)/f'_5_pts for comparison between 15 and 5 points
abs(f'_15_pts - f'_7_pts)/f'_7_pts for comparison between 15 and 7 points
当我想用多极 l=366.42 对上述相对变化进行多项式回归时,就会出现我的问题(对于其他多极,问题仍然存在)。
例如,当我进行三次回归(3 度)时,我得到以下图:
我不确切知道如何解释这些结果:也许这意味着我在 3 点和 15 点导数之间有一个相对误差最大值,而在 5 和 15 之间有一个较小的相对误差,比如在 7 到 15 点之间。
然后,如果我想做例如 10 次多项式回归,我会得到以下图:
如您所见,这与上面的三次回归完全不同。
所以我不知道多项式回归要采用哪个度数,我的意思是哪个度数与获得有效的物理结果相关:3、4、6 或者可能是 10。如果我的度数太大,结果无效,因为我有狄拉克峰和直线。
我猜要保留的正确多项式次数取决于插值曲线的初始点数(第一个图为 140 个点)以及其他参数。
作为结论,谁能告诉我是否有标准来确定应用哪个多项式次数?我的意思是从相对误差的角度来看最相关的次数。
如果我不做回归,我有以下情节难以解释:
这就是为什么我想对这些数据进行插值,以更清楚地看到不同相对演化之间的差异。
PS:这里是多项式回归的代码片段:
stepForFit = np.logspace(-8.0,-1.0,10000)
coefs_3_15 = poly.polyfit(np.log10(stepNewArray), np.log10(errorRelative_3_15), 10)
ffit_3_15 = poly.polyval(np.log10(stepForFit), coefs_3_15)
coefs_5_15 = poly.polyfit(np.log10(stepNewArray), np.log10(errorRelative_5_15), 10)
ffit_5_15 = poly.polyval(np.log10(stepForFit), coefs_5_15)
coefs_7_15 = poly.polyfit(np.log10(stepNewArray), np.log10(errorRelative_7_15), 10)
ffit_7_15 = poly.polyval(np.log10(stepForFit), coefs_7_15)
# Plot interpolation curves
plt.plot(stepForFit[stepArrayId], np.power(10,ffit_3_15[stepArrayId]), colorDerPlot[0])
plt.plot(stepForFit[stepArrayId], np.power(10,ffit_5_15[stepArrayId]), colorDerPlot[1])
plt.plot(stepForFit[stepArrayId], np.power(10,ffit_7_15[stepArrayId]), colorDerPlot[2])v
更新1:鉴于我没有关于相对误差值的假设(或模型),我不能对必须最适合数据的多项式程度施加先验约束。
但也许我有一个线索,因为我计算的导数是 3、5、7 和 15 个点。所以我分别有O(h ^ 2),O(h ^ 4),O(h ^ 6)和O(h ^ 14)的水平不确定性。
例如,对于 3 点导数,我有:
所以导数的最终表达式:
顺便说一句,我不明白为什么我们在表达式之间从 $O(h^4)$ 传递到 $O(h^2)$ 。
但主要问题是我没有立即假设我必须应用的多项式次数。
也许,我应该测试一系列多项式次数并在每次 chi2 时计算,所以最小的 chi2 会给我正确的次数来考虑。
你怎么看待这件事 ?Numpy 或 Python 是否已经对特定功能进行了这种研究?
更新 2:我试图确定最适合数据的 1-15 次多项式范围。我的标准是适合每个度数的多项式,然后计算“插值计算数据”和“实验数据”之间的 chi2。如果新的 chi2 低于之前的 chi2,我会更新度数以选择进行多项式回归。
不幸的是,对于 3,5 和 7 点导数中的每一个,我总是通过“理想度数”的这项研究得到,最大度数对应于所探索的度数间隔的最大值。
好的,chi2 对于最高程度来说是最小的,但这与物理结果不对应。不要忘记,在 10^-4 以下,Cl' 的行为是混乱的,所以我不期望将导数收敛的物理解释为导数点数的增加。
但有趣的区域在 10^-4 以上,我有更多的稳定性。
鉴于我选择最佳度数作为 chi2 函数的方法不起作用(它总是给出探索范围的最大度数),是否有另一种方法可以很好地拟合?我知道这很困难,因为小步骤的混乱区域。
最后一件事,三次回归(3 度)给出了很好的曲线,但我不明白为什么这只发生在 3 度而不是更高的度数。
正如有人在评论中所说,对于更高程度的回归,过度拟合:如何解决这个问题?