首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >曲线拟合参数的约束

曲线拟合参数的约束
EN

Stack Overflow用户
提问于 2016-11-25 21:39:00
回答 1查看 827关注 0票数 0

我试图在我的二次曲线拟合过程中施加界限和约束。目的是找出系数a,bc。对b:delta-2*a*x施加限制是我的疑问。如何在约束中添加变量x。可行的代码:

代码语言:javascript
复制
from lmfit import Model, Parameters

#create x and y data to be used for curve fitting
xip=[ 0.02237461, 0.0983837 , 0.25707382, 0.56959641, 1.33419197, 4.95835927]
yip=[0.20085822, 0.23583258, 0.28996988, 0.36350284, 0.47981232, 0.67602165] 

#function to fit data: a,b,c needs to be found
def f(xx, a, b, c):
    # constraints: c <=0,  a>0  and 2*a*x+b >= 0
    return a*xx**2 + b*xx + c

fmodel = Model(f)
params = Parameters()

params.add('a', value=-1e-2, vary=True, min = -1e10, max = 0)
params.add('c', value=-4e-2, vary=True, min = -1e10, max =0)
params.add('delta', value=5e-2, vary=True, min=0, max=1e10)
params.add('xpara', value=5, vary=True)
params.add('b', expr = 'delta-2*a*xpara')

result = fmodel.fit(yip, params, xx=xip)
print(result.fit_report())


import  matplotlib.pyplot as plt
op = plt.subplot(1,1,1)
op.scatter(xip,yip)
plt.plot(xip, result.init_fit, 'k--')
#plt.plot(xip, result.best_fit, 'r-')

谢谢!

编辑:我已经改变了变量,以使这个程序工作。但是不确定这是否是应用约束的正确方式。

编辑2:添加了必要的约束:C <=0、a>0和2*a*x+b >= 0;

EN

回答 1

Stack Overflow用户

发布于 2016-11-26 01:54:01

你得到了什么错误?

在我看来,代码应该可以工作。但是,在您的消息中,您说您希望将c约束为delta+b+2*a*x,而在您的代码中,您使用的是delta-b-2*a*xpara。有标志问题吗?

您也可以将delta初始化为5e-2,但将其最大值设置为0。这似乎是一个错误,可能与令人困惑的迹象有关。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40806362

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档