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
    关注
    评论

报告相同问题?

悬赏问题

  • ¥15 matlab(相关搜索:紧聚焦)
  • ¥15 基于51单片机的厨房煤气泄露检测报警系统设计
  • ¥15 路易威登官网 里边的参数逆向
  • ¥15 Arduino无法同时连接多个hx711模块,如何解决?
  • ¥50 需求一个up主付费课程
  • ¥20 模型在y分布之外的数据上预测能力不好如何解决
  • ¥15 processing提取音乐节奏
  • ¥15 gg加速器加速游戏时,提示不是x86架构
  • ¥15 python按要求编写程序
  • ¥15 Python输入字符串转化为列表排序具体见图,严格按照输入