【发布时间】:2021-05-30 17:45:54
【问题描述】:
我一直在尝试曲线拟合双破幂律。
def sbpl(x,f0,a1,a2,a3,xb1,xb2):
if x[0] < xb1:
F=f0* x**(-a1)
elif xb1 <= x <= xb2:
F=f0* ((xb1)**(a2-a1)) *(x)**(-a2)
else:
F=f0*((xb1)**(a2-a1))*((xb2)**(a3-a2))*(x**(-a3))
return F
x= 数组([5.5,9.0,17.0,18.0,19.0,43.0,45.0])
y = 数组([1.14e-03,2.08e-03,3.18e-03,2.53e-03,2.81e-03,1.491e03,1.311e-03])
popt,pcov=optimize.curve_fit(sbpl,x,y,sigma=err,p0=[1.,1.,0.,0.,0.,0.])
但它显示一个错误。
line 20, in sbpl
elif xb1 <= x <= xb2:
ValueError:具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()
【问题讨论】:
-
请将您的代码和错误作为文本添加到此问题中。避免上传文字图片。
-
你写
xb1 <= x <= xb2但x似乎是一个数组,并且 Python 不允许你将数组与单个值作为 if 测试的一部分进行比较(这种类型的表达式可以可用于np.where子句)。
标签: python matplotlib curve-fitting model-fitting power-law