优化曲线移动参数
Optimizing curve shifting parameters
我想将主曲线沿 Y 轴向上(或向下)移动以最好地拟合一系列数据点。我想仅通过主曲线的向上(或向下)移动来最小化主曲线数据点和测量数据点之间的误差总和(sum_error),并获得移动系数(假设为 K)。
master_curve = np.array([3.920443406036651, 2.7639821779105542,
2.254338877722025, 1.9513837218071342, 1.7450166671832754,
1.5928839897758424, 1.4747653105080576, 1.3796281282142924,
1.3008753435392029, 1.234288351142671, 1.1770273049744642,
1.1271011783216718, 1.0830672127478984, 1.0438509579431305,
1.0086336030441687, 0.9767787536056324, 0.9477833091755259,
0.9212435957417907, 0.8968314534272098, 0.8742769964680429])
data = np.array([12.82398603780653, 8.708265346706627,
6.943916634340093, 5.913441041271008, 5.220678298445037,
4.7153411130496306, 4.326441800656878, 4.015585602454473,
3.7599836807770317, 3.5451576271700658, 3.3614170020938596,
3.2020029881204284, 3.0620410438719667, 2.9379167363509975,
2.8268866460269106, 2.72682649883558, 2.6360628206802112,
2.5532572707864203, 2.477325238639876, 2.4073773335594093])
for i in range(len(data)):
error[i] = np.abs(master_curve[i]-data[i])
sum_error = error.sum()
我想用scipy.optimize.minimize
,但我不知道如何在sum_error最小化时获取K参数值。
我还必须为一条主曲线的多个数据集执行此操作,我有 70 条主曲线和 270 个数据集!我只能想到两个 "for" 循环。
感谢您的帮助。
看这张图,K是对最小化函数的一种限制:
曲线移动
不需要使用 scipy 最小化。这比那容易得多。您对 k
的实际答案只是:np.mean(master_curve-data)
即 -2.9244855211176906
。这是因为您设置均值计算的方式。
k = np.linspace(-5, 5, 100)
errors = np.array([np.mean((master_curve - data + m)) for m in k])
plt.plot(k, errors)
您应该会看到如下内容:
现在这个错误在哪里最小化了??拟合折线并找到 y 截距:
>>> np.polyfit(k, errors, 2)
array([ -5.67339604e-16, 1.00000000e+00, -2.92448552e+00])
如您所见,y 轴截距为 -2.92448552e+00。通过取差异的平均值,正是您首先想要的...
我想将主曲线沿 Y 轴向上(或向下)移动以最好地拟合一系列数据点。我想仅通过主曲线的向上(或向下)移动来最小化主曲线数据点和测量数据点之间的误差总和(sum_error),并获得移动系数(假设为 K)。
master_curve = np.array([3.920443406036651, 2.7639821779105542,
2.254338877722025, 1.9513837218071342, 1.7450166671832754,
1.5928839897758424, 1.4747653105080576, 1.3796281282142924,
1.3008753435392029, 1.234288351142671, 1.1770273049744642,
1.1271011783216718, 1.0830672127478984, 1.0438509579431305,
1.0086336030441687, 0.9767787536056324, 0.9477833091755259,
0.9212435957417907, 0.8968314534272098, 0.8742769964680429])
data = np.array([12.82398603780653, 8.708265346706627,
6.943916634340093, 5.913441041271008, 5.220678298445037,
4.7153411130496306, 4.326441800656878, 4.015585602454473,
3.7599836807770317, 3.5451576271700658, 3.3614170020938596,
3.2020029881204284, 3.0620410438719667, 2.9379167363509975,
2.8268866460269106, 2.72682649883558, 2.6360628206802112,
2.5532572707864203, 2.477325238639876, 2.4073773335594093])
for i in range(len(data)):
error[i] = np.abs(master_curve[i]-data[i])
sum_error = error.sum()
我想用scipy.optimize.minimize
,但我不知道如何在sum_error最小化时获取K参数值。
我还必须为一条主曲线的多个数据集执行此操作,我有 70 条主曲线和 270 个数据集!我只能想到两个 "for" 循环。
感谢您的帮助。
看这张图,K是对最小化函数的一种限制:
曲线移动
不需要使用 scipy 最小化。这比那容易得多。您对 k
的实际答案只是:np.mean(master_curve-data)
即 -2.9244855211176906
。这是因为您设置均值计算的方式。
k = np.linspace(-5, 5, 100)
errors = np.array([np.mean((master_curve - data + m)) for m in k])
plt.plot(k, errors)
您应该会看到如下内容:
现在这个错误在哪里最小化了??拟合折线并找到 y 截距:
>>> np.polyfit(k, errors, 2)
array([ -5.67339604e-16, 1.00000000e+00, -2.92448552e+00])
如您所见,y 轴截距为 -2.92448552e+00。通过取差异的平均值,正是您首先想要的...