如何将约束应用于幂律模型,使其通过特定数据点 (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
和此表达式的值的值。
我想使用 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
和此表达式的值的值。