如何通过逐步逐步减少y轴上的差异来尽可能地匹配两个不同的图

时间:2019-08-22 09:47:39

标签: python minimization

我试图通过在python中将一个图移动到另一个来尽可能匹配下面绘制的两个图。

Figure

两个图在x中具有不同的范围,它们是从两个数组数据集中绘制的。

我现在在想的是,通过将其中之一进行一次迭代移动,并使其移动直到两个数据(或图形)之间的差异最小化。

但是,我不知道如何开始。

1 个答案:

答案 0 :(得分:0)

我要做的是尝试移动一组位置,以使它与另一组之间的均方根差最小。您也可以将标准缩小到数据中感兴趣的区域(我猜是在峰值附近)。要计算RMS误差,您需要将数据插值到相同的x值。这是一个示例:

import numpy as np
import matplotlib.pyplot as plt

from scipy.optimize import minimize

# Create data
x0 = np.linspace(0, 2.*np.pi, 101)
y0 = np.sin(x0)
x1 = np.linspace(0, 2.*np.pi, 201)
y1 = np.sin(x1+0.1*np.pi)

def target(x):
    # Interpolate set 1 onto grid of set 0 while shifting it by x.
    y1interp = np.interp(x0, x1+x, y1)

    # Compute RMS error between the two data with set 1 shifted by x.
    return np.sqrt(np.sum((y0-y1interp)**2.))

result = minimize(target, method="BFGS", x0=[0.])#, bounds=[(-0.2, 0.2)]) # bounds work with some methods only
print(result)

plt.figure()
plt.plot(x0, y0, "r", x1, y1, "b")
plt.plot(x1+result.x, y1, "k", lw=2)
plt.legend(["set 0", "set 1", "set 1 shifted"])

结果: enter image description here

请注意,scipy.optimize.minimize对设置非常敏感,因此您需要使用它们才能使它们更适合解决您的问题: https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html