如何解决双破幂律拟合在python中不起作用
我一直在尝试曲线拟合双破幂律。
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.])
但它显示一个错误。
line 20,in sbpl
elif xb1 <= x <= xb2:
ValueError:包含多个元素的数组的真值不明确。使用 a.any() 或 a.all()
解决方法
与要优化的参数数量相比,点数太少。这不允许确定选择分段函数。线性分段函数可能与分段幂函数或其他分段定律一样方便。
例如,本文第 12 页展示了线性分段函数的回归方法:https://fr.scribd.com/document/380941024/Regression-par-morceaux-Piecewise-Regression-pdf
按照此方法,下面详细介绍了数值演算,并使用参考论文中定义的符号。 H(x) 是阶跃 Heaviside 的函数:
相比之下,使用更简单的模型可以获得同样好的拟合:
为了更方便地回答您的具体问题,您应该编辑更具代表性的数据。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。