python 曲线拟合curve_fit中参数范围的设置

之前在对一个数据集进行幂函数拟合时,总是有这样的错误出现:

RuntimeWarning: overflow encountered in exp
RuntimeWarning: overflow encountered in power

仔细研究后发现,在curve_fit拟合过程中,其中几步幂参数远远超过了预想的范围[0,1],从而导致计算溢出。虽然最后也能正常运行并拟合出了方程参数,但放到其他程序中运行总是会报错。

其实,只要设定好了幂的参数范围,自然不会出错。然而我在网上查了很多中文帖子,却没有找到在使用curve_fit时设置参数的范围的方法。这里参考了StackoverFlow中的一个帖子:https://stackoverflow.com/questions/16760788/python-curve-fit-library-that-allows-me-to-assign-bounds-to-parameters

数据:x,y

拟合方程:y=B*x^n

import numpy as np
from scipy import optimize

#已知x,y两个np.array数组
def func(x,B,n):
    return B*x**n

param_bounds=([-np.inf,0],[np.inf,1])#设定B和n的下界和上界。其中B为负无穷到正无穷,n为0到1
r2=optimize.curve_fit(func,x,y,bounds=param_bounds)
B,n=r2[0]#输出拟合的参数

注:Scipy的版本至少要0.17以上

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BUGORFEATURE

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值