簡體   English   中英

將余弦平方擬合到python中的點

[英]Fitting cosine squared to points in python

我正在嘗試將余弦平方曲線擬合到使用來自scipy優化的curve_fit的數據。 不幸的是,我得到一條直線。 希望有人能夠幫助我。

import pylab as plb
import matplotlib.pyplot as plt
from scipy.optimize import curve_fit
from scipy import asarray as ar,exp
import numpy as np

x = ar(range(10))
y = ar([0,1,2,3,4,5,4,3,2,1])


def cosq(x,a,x0):
    return a*(np.cos(np.pi*x*x0)**2)

popt,pcov = curve_fit(cosq,x,y,p0=[1,1])

plt.plot(x,y,'b+:',label='data')
plt.plot(x,cosq(x,*popt),'ro:',label='fit')
plt.legend()
plt.title('Blu Blah')
plt.xlabel('Blu')
plt.ylabel('Blah')
plt.show()

我得到以下圖表,直線擬合為輸出

我注意到,當使用curve_fit時,起始參數非常重要,並且可能導致非常不同的結果。 因此,如果您嘗試使用p0值,則應該能夠獲得更好的適應性。

另外,您可以使用界限將優化約束到某個區域,例如:

popt, pcov = curve_fit(func, xdata, ydata, bounds=(0, [3., 1.]))

例如,將優化限制在0 <= a <= 3、0 <= x0 <= 1的區域

有關更多詳細信息, 參見https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html

我希望這會有所幫助

暫無
暫無

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

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