簡體   English   中英

在 Python 中擬合雙曲余弦曲線

[英]Fitting Hyperbolic Cosine curve in Python

現在我想將雙曲余弦曲線的一個凸起擬合到以下 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()

@WarrenWeckesser 是正確的,您需要考慮cosh function 中的翻譯。您可以將附加參數d添加到 model,並在優化器中將其初始條件設為0 然后解壓縮最佳系數並將它們插入 model,然后再繪圖。 我得到以下

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()

結果

這篇文章不是答案,而是評論太長,無法在評論部分進行編輯。

信息:

通常的擬合方法(例如在 Python 中)涉及從參數的“猜測”值開始的迭代過程,這些值必須與未知的精確值相差不遠。

存在一種不尋常的方法,它不是迭代的,也不需要初始值來開始微積分。 在雙曲余弦 function 的情況下的應用如下所示。

在此處輸入圖像描述

在此處輸入圖像描述

上述方法包括對解為雙曲余弦的積分方程的線性擬合。 有關一般說明,請參閱https://fr.scribd.com/doc/14674814/Regressions-et-equations-integrales 雙曲余弦的情況在本文中沒有明確處理。 這就是上面給出詳細信息的原因。

注意:如果指定了某些特定的擬合標准(MLSE、MLSAE、MLSRE 或其他),則無法避免非線性回歸。 那么上面找到的參數的近似值是非常好的值,可以開始迭代過程以期望更好的可靠性。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM