多个曲线拟合会话的相互约束
A mutual constraint for multiple curve fit sessions
我有 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
之间的差异最小化?
总是 有一个示例代码来说明您正在尝试做什么是有帮助的。此外,不清楚您的意思是 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)
我不确定这是否正是您要找的,但也许它会帮助您指明正确的方向。
我有 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
之间的差异最小化?
总是 有一个示例代码来说明您正在尝试做什么是有帮助的。此外,不清楚您的意思是 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)
我不确定这是否正是您要找的,但也许它会帮助您指明正确的方向。