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

Python 多个曲线拟合会话的相互约束,python,python-3.x,optimization,scipy,curve-fitting,Python,Python 3.x,Optimization,Scipy,Curve Fitting,我有N二维数据序列(x,y)我正试图适应逻辑函数的模型y(x)=L/(1+a exp(b*(x-c))。不过,我想对a、b、c进行限制。通常,如果我想限制它们的值,我会使用lmfit中的参数,它会完成这项工作。这次我希望a/b的比率是恒定的(误差为0.01)。是否有任何方法适合所有N序列,以便将比率a_i/b_i之间的差异降至最低?有一个示例代码来显示您正在尝试的操作总是很有帮助的。此外,还不清楚是否意味着a_i/b_i对于所有N个数据集都应该是相同的常数——假设应该是。 在这种情况下,定义如下

我有
N
二维数据序列
(x,y)
我正试图适应逻辑函数的模型
y(x)=L/(1+a exp(b*(x-c))
。不过,我想对
a、b、c
进行限制。通常,如果我想限制它们的值,我会使用
lmfit
中的参数,它会完成这项工作。这次我希望
a/b
的比率是恒定的(误差为0.01)。是否有任何方法适合所有
N
序列,以便将比率
a_i/b_i
之间的差异降至最低?

有一个示例代码来显示您正在尝试的操作总是很有帮助的。此外,还不清楚是否意味着
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)

我不确定这是否正是你想要的,但也许它会帮助你指出正确的方向。

b*alpha*(1+0.01*2/pi*arctan(delta))替换
a
其中,
alpha
是你想要的常数,
delta
适合允许的误差。我已经尝试过这种方法,但是计算机不能那么容易地找到这样的
alpha
。嗯,使用
a
b
进行单一拟合健全性检查是否表明首先存在合理的
alpha
alpha1=10^-4,alpha2=10^-8,alpha3=5
@mikuszefskiHmm,看起来这个模型不是真的有效。