python拟合非线性模型_如何在python中拟合非线性数据

一般来说,只要我们知道最适合数据集的等式,scipy.optimize.curve_fit就可以工作了。因为你想要拟合一个遵循高斯、洛伦兹等分布的数据集,你可以通过提供它们的具体方程来实现。在

举个小例子:import numpy as np

import matplotlib.pyplot as plt

from scipy.optimize import curve_fit

import numpy as np

xdata = np.array([-2,-1.64,-1.33,-0.7,0,0.45,1.2,1.64,2.32,2.9])

ydata = np.array([0.69,0.70,0.69,1.0,1.9,2.4,1.9,0.9,-0.7,-1.4])

def func(x, p1,p2):

return p1*np.cos(p2*x) + p2*np.sin(p1*x)

# Here you give the initial parameters for p0 which Python then iterates over

# to find the best fit

popt, pcov = curve_fit(func,xdata,ydata,p0=(1.0,0.3))

print(popt) # This contains your two best fit parameters

# Performing sum of squares

p1 = popt[0]

p2 = popt[1]

residuals = ydata - func(xdata,p1,p2)

fres = sum(residuals**2)

print(fres)

xaxis = np.linspace(-2,3,100) # we can plot with xdata, but fit will not look good

curve_y = func(xaxis,p1,p2)

plt.plot(xdata,ydata,'*')

plt.plot(xaxis,curve_y,'-')

plt.show()

以上是针对我的具体情况,其中我使用了一个Harmonic addition formula,它适合我的数据集。通过在func定义中提供它,您可以相应地更改高斯方程或任何其他方程。在

您的参数将相应地变化。如果它是一个高斯分布,你将有你的sigma(标准差)和mean作为未知参数。在

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值