【问题标题】:Fitting Hyperbolic Cosine curve in Python在 Python 中拟合双曲余弦曲线
【发布时间】:2023-01-25 02:00:04
【问题描述】:

现在我想将双曲余弦曲线的一个凸起拟合到以下 X 和 Y 数据中:

xData = np.array([1.7, 8.8, 15, 25, 35, 45, 54.8, 60, 64.7, 70])
yData = np.array([30, 20, 13.2, 6.2, 3.9, 5.2, 10, 14.8, 20, 27.5])

这是我到目前为止所做的,但我没有得到预期的结果,我也不知道我做错了什么:

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import scipy.interpolate as inp

xData = np.array([1.7, 8.8, 15, 25, 35, 45, 54.8, 60, 64.7, 70])
yData = np.array([30, 20, 13.2, 6.2, 3.9, 5.2, 10, 14.8, 20, 27.5])

def model_hcosine(x, a, b, c):
    return a * np.cosh(x/b) + c

poptcosh, pcovcosh = curve_fit(model_hcosine, xData, yData, p0=[min(yData), max(xData), max(yData)])

aapopt, bbopt, cccopt = poptcosh
xCoshModel = np.linspace(min(xData), max(xData), 100)
yCoshModel = model_hcosine(xCoshModel, aapopt, bbopt, cccopt)

plt.scatter(xData, yData)
plt.plot(xCoshModel, yCoshModel, 'b-')

plt.show()

【问题讨论】:

  • 您的模型中需要一个翻译参数。您的数据最小值出现在 x=35,但您的模型只允许最小值出现在 x=0。

标签: python numpy scipy curve-fitting hyperbolic


【解决方案1】:

@WarrenWeckesser 是正确的,您需要在cosh 函数中考虑翻译。您可以向模型添加一个附加参数d,并在优化器中为其提供初始条件0。然后,您解压缩最佳系数并将它们插入模型,然后再进行绘图。我得到以下

import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
import scipy.interpolate as inp

xData = np.array([1.7, 8.8, 15, 25, 35, 45, 54.8, 60, 64.7, 70])
yData = np.array([30, 20, 13.2, 6.2, 3.9, 5.2, 10, 14.8, 20, 27.5])

def model_hcosine(x, a, b, c, d):
    return a * np.cosh((x-d)/b) + c

poptcosh, pcovcosh = curve_fit(model_hcosine, xData, yData, p0=[min(yData), max(xData), max(yData), 0])

aapopt, bbopt, cccopt, ddopt = poptcosh
xCoshModel = np.linspace(min(xData), max(xData), 100)
yCoshModel = model_hcosine(xCoshModel, aapopt, bbopt, cccopt, ddopt)

plt.scatter(xData, yData)
plt.plot(xCoshModel, yCoshModel, 'b-')

plt.show()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 2014-01-23
    • 2023-03-23
    • 1970-01-01
    • 2013-11-08
    相关资源
    最近更新 更多