如何将约束应用于幂律模型,使其通过特定数据点 (Python)

How to apply a constraint to a power law model so that it passes through a specific data point (Python)

我想使用 lmfit(或其他库)开发幂律模型。有什么方法可以对模型应用约束或绑定,使其必须通过特定的数据点(例如点 (1, 2))

plm = models.PowerLawModel()

params = plm.guess(y_data, x=x_data)
result = plm.fit(y_data, params, x=x_data, )
const = round(result.best_values['amplitude'], 3)
exp = round(result.best_values['exponent'], 3)
best = result.best_fit

对于仅 y = Amplitude * x**Exponent 的幂律模型,编写约束以强制模型始终通过点 (x0, y0) 将非常容易。您希望 Amplitude

 y0 = Amplitude*x0**Exponent

对于 Exponent 的任何值。即

 Amplitude = y0*x0**(-Exponent)

您可以在 lmfit 中使用类似

的内容来指定
plm = models.PowerLawModel()
params = plm.guess(y_data, x=x_data)
params['amplitude'].expr = '{0:g}*{1:g}**(-exponent)'.format(y0, x0)

这将使 amplitude 在拟合中不会独立于 exponent 而变化,并且始终采用取决于 exponent 和此表达式的值的值。