scipy 多个曲线拟合会话的相互约束

20jt8wwn  于 6个月前  发布在  其他
关注(0)|答案(1)|浏览(35)

我有N序列的2D数据(x,y),我试图适应逻辑函数y(x)=L/(1+a exp(b*(x-c)))的模型。然而,我想对a,b,c施加约束。通常,如果我想限制它们的值,我使用lmfit中的参数,它就可以完成这项工作。这次,我希望a/b的比率是恒定的(误差为0.01)。有没有办法拟合所有N序列,使比率a_i/b_i之间的差异最小化?

o2gm4chl

o2gm4chl1#

不清楚你是否意味着a_i/b_i应该对所有N个数据集都是相同的常数-让我们假设它应该是。在这种情况下,定义这样的参数可能就足够了:

import numpy as np
from lmfit import Parameters, Model

def logistic(x, amp, a, b, c):
    return amp / (1 + a*np.exp(b*(x-c)))
 
params = Parameters()
params.add('b2a_scale' value=1, vary=True) # ?
N = 5
model = Model(logistic, prefix='p1_')

for i in range(1, N+1):
    params.add('p%d_amp' % i, value=1, min=0)
    params.add('p%d_c' % i, value=1)
    params.add('p%d_b' % i, value=5)
    params.add('p%d_a' % i, expr='p%d_b * b2a_scale' % i)
    if model > 1:
        model += Model(logistic, prefix='p%d_' % i)

字符串

相关问题