繁体   English   中英

Scipy curve_fit界限和条件

[英]Scipy curve_fit bounds and conditions

我正在尝试使用curve_fit来拟合一些数据。 它工作得很好,我只想使用其他参数来提高拟合度以匹配假设(例如机械效率不能大于100%等)

y_data = [0.90 0.90 0.90 0.90 0.90 0.90 0.90 1.30 1.30 1.30 1.30 1.20 1.65 1.65 1.65 1.65 1.65 1.65 1.80 1.80 1.80 1.80 1.80 1.80 1.80 1.80 1.80 3.50 6.60 6.60 6.70 6.70 6.70 6.70 6.70 8.50 12.70] # I am aware this does not have commas
x_data = [0.38 0.38 0.38 0.38 0.38 0.38 0.38 0.38 0.38 0.38 0.38 0.46 0.53 0.53 0.53 0.53 0.53 0.53 0.53 0.53 0.53 0.53 0.53 0.53 0.53 0.53 0.53 0.53 1.02 1.02 1.02 1.02 1.02 1.02 1.02 1.02 1.02] # ditto


def poly2(x, a, b, c): return a*x**2+ b*x+c

def poly3(x,a,b,c,d): return a*x**3+b*x**2+c*b*x+d

pars = fit(poly2, x_data, y_data, bounds=bounds)

但是我想另外指定参数之间关系的界限。

B**2 -4*a*c > 0 #for poly2
b**2-3*a*c=0 #for poly3

确保拟合具有水平拐点。 有没有办法做到这一点? 在此处输入图片说明

编辑:我发现了这一点,一旦我进行调查,可能会有所帮助: 如何对SciPy曲线拟合施加约束?

如何按照建议使用lmfit来完成此操作?

所以我相信我已经解决了这个问题,基于使用lmfit的@ 9dogs注释。 相关文档在这里:

https://lmfit.github.io/lmfit-py/constraints.html

和一个有用的教程在这里:

http://blog.danallan.com/projects/2013/model/

对于我的函数poly3此接缝可强制执行水平或正向弯曲。

from lmfit import Parameters, Model
def poly3(x,a,b,c,d): return a*x**3+b*x**2+c*b*x+d

model = Model(poly3, independent_vars=['x'], )
params = Parameters()

不好意思的数学道歉:三次方判母在这里给出, 网址https://brilliant.org/wiki/cubic-discriminant/ b**2*c**2-4*a*c**3-4*b**3*d-27*a**2*d**2+18*a*b*c*d

params = Parameters()

params..add('a', value=1, min=0, vary=True)
params.add('b', value=1, vary=True)

params.add('c', value=1, vary=True)
params.add('d', value=1, vary=True)
params.add('discr', value = 0, vary= False, expr='(b**2*c**2-4*a*c**3-4*b**3*d-27*a**2*d**2+18*a*b*c*d)')

result = model.fit(y_data, x=x_data, params=params) # do the work
pars = []  # list that will contain the optimized parameters for analysis
# create a parameters list for use in the rest of code, this is a stopgap until I refactor the rest of my code
pars.append(result.values['a'])
pars.append(result.values['b'])
pars.append(result.values['c'])
pars.append(result.values['d'])

## rest of code such as plotting

如有疑问,我将进一步扩展示例。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM