approach48 2019-12-09 11:10 采纳率: 100%
浏览 1541

Python的optimize.leastsq最小二乘拟合的时候,可以设定拟合参数的范围吗(如果拟合时出现被除数为零的情况)

打算用该工具拟合某条曲线,该曲线主要函数由两个(μa,mμs是待求解的参数)
其余的都是这两个参数的衍生参数,但是拟合时出现这个错误:
RuntimeWarning: invalid value encountered in sqrt
μeff=np.sqrt((3*μa*mμs))
应该是某一次拟合时,导致μeff的值为零,而这个值在拟合公式中又会充当除数
也就是分母为0的情况。optimize.leastsq能否将待拟合的参数限定在某个范围,比如μa,mμs都大于0。

代码:
import numpy as np

from scipy import optimize

def farrell(r,p):
#数据所拟合的函数,Farrell漫反射反演模型
μa,mμs=p
Nrel=1.40
Reff=-1.440*Nrel**-2+0.701*Nrel**-1+0.668+0.0636*Nrel
μt=μa+mμs
ma=mμs/(μa+mμs)
μeff=np.sqrt((3*μa*mμs))
D=μa/(μeff**2)
Zb=2*D*(1+Reff)/(1-Reff)
r1=(r**2+μt**-2)**0.5
r2=((1/μt+2*Zb)**2+r**2)**0.5
return (0.25*ma/np.pi)*((1/μt)*(μeff+1/r1)*np.exp(-μeff*r1)*(r1**-2)+(1/μt+2*Zb)*(μeff+1/r2)*np.exp(-μeff*r2)*(r2**-2))

def residuals(p,y,x):
return y-farrell(x,p)

x=np.linspace(0,1,100)
y0=farrell(x,[0.0020,63.35])
p0=[0.11,20]
plsq=optimize.leastsq(residuals,p0,args=(y0,x))

  • 写回答

1条回答 默认 最新

  • dabocaiqq 2019-12-10 15:09
    关注
    评论

报告相同问题?

悬赏问题

  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!