插值到密度较小的网格 + Python 中的最小二乘拟合

Interpolation to less denser grid + Least-squares fitting in Python

我是 Python 的新手,对两个 ndarrays 的 插值 最小二乘拟合有点困惑。

我有 2 个 ndarrays:

我的最终目标是将模型光谱(蓝色曲线)与观测光谱(橙色曲线)进行最小二乘拟合。

蓝色曲线ndarray有以下参数:

橙色曲线ndarray有以下参数:

作为第一步也是最简单的一步,我想绘制这两个 ndarray 之间的残差(差异),但问题是因为它们分别具有不同的大小 391 和 256。我尝试使用 numpy.reshapendarray.resphape 函数,但它们会导致错误。

可能正确的解决方案是从将蓝色曲线插值到橙色曲线的密度较低的网格中开始。我尝试使用 numpy.interp 函数,但它也会导致错误。

大致如下:

import numpy as np
import matplotlib.pyplot as plt

n_denser = 33
n_coarser = 7

x_denser = np.linspace(0,1,n_denser)
y_denser = np.power(x_denser, 2) + np.random.randn(n_denser)/10.

x_coarser = np.linspace(0,1,n_coarser)
y_coarser = np.power(x_coarser, 2) + np.random.randn(n_coarser)/10. + 0.5

y_dense_interp = np.interp(x_coarser, x_denser, y_denser)

plt.plot(x_denser, y_denser, 'b+-')
plt.plot(x_coarser, y_coarser, 'ro:')
plt.plot(x_coarser, y_dense_interp, 'go')

plt.legend(['dense data', 'coarse data', 'interp data'])
plt.show()

其中 returns 类似于:

您的困惑似乎源于混淆了您提到的方法。 Least-squares不是插值法,而是最小化曲线拟合法。一个关键区别在于,使用插值法时,绘图始终通过原始数据点。对于 least-squares,这可能会发生,但通常情况并非如此。

如果您需要通过原始数据点,

Cubic-spline 插值将为您提供 'nice' 图。

如果你想使用least-squares,你需要知道你想要拟合的次数多项式。最常见的是线性(一阶)。