对于我的学士论文,我正在研究一个项目,我想对一些数据进行拟合。问题有点复杂,但我试图在这里最小化问题:
我们有三个数据点(可用的理论数据很少),但这些点高度相关。
使用 curve_fit 来拟合这些点,我们得到了一个可怕的拟合结果,正如您在这张图中看到的那样。(通过手动更改拟合参数可以轻松改善拟合)。
我们的拟合结果具有相关性(蓝色)和被忽略的相关性(橙色):
当我们使用更多参数时,结果会更好(因为那时拟合的行为本质上就像求解一样)。
我的问题:为什么会出现这种行为?(我们使用自己的最小二乘算法来解决我们的特定问题,但它也遇到了同样的问题)。这是一个数值问题,还是有什么充分的理由让 curve_fit 显示这个解决方案?
我很高兴能有一个很好的解释来说明为什么我们不能使用“仅 2 个”参数来拟合这三个高度相关的数据点。
import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
plt.rcParams['lines.linewidth'] = 1
y = np.array([1.1994, 1.0941, 1.0047])
w = np.array([1, 1.08, 1.16])
cor = np.array([[1, 0.9674, 0.8812],[0.9674, 1, 0.9523], [0.8812, 0.9523, 1]])
s = np.array([0.0095, 0.0104, 0.0072])
def f(x, a, b):
return a + b*x
cov = np.zeros((3,3))
for i in range(3):
for j in range(3):
cov[i,j] = cor[i,j] * s[i] * s[j]
A1, …Run Code Online (Sandbox Code Playgroud)