【问题标题】:Calculating scaling constants for two curves using lmfit minimize or scipy optimize使用 lmfit 最小化或 scipy 优化计算两条曲线的缩放常数
【发布时间】:2020-05-19 18:28:13
【问题描述】:

我想建模一个相对复杂的情节。该模型由已通过实验测量的两个“相”/组分组成,但是这些组分的比例是未知的。数据显示在图像中:橙色和绿色曲线的某种组合构成了蓝色曲线。

Complex curve and two components

模型定义为:

    Model = A * (z1 * 0.3 * y1 + z2 * 0.7 * y2) + D

其中 A 是整体缩放,z1 和 z2 是 y1 和 y2 的单独缩放,它们是组件。 D 是偏移量。

我尝试通过定义拟合参数和残差来使用 lmfit 最小化函数,如下所示:

import lmfit
from lmfit import Minimizer, Parameters, report_fit

fit_params = Parameters()
fit_params.add('A', value=1.00, min=0, max=1)
fit_params.add('z1', value=1, min=0, max=1)
fit_params.add('z2', value=1, min=0, max=1)
fit_params.add('D', value=0.00, min=-5, max=5)

def residual(pars, x, data = total_scatter_expt):
   Data = total_scatter_expt
   Model = A * (z1 * 0.3 * y1 + z2 * 0.7 * y2) + D
   return model - data

因为 y1 和 y2 也是函数,所以我并不完全清楚我的 x 在残差或最小化线上是什么。为此,我使用了图片中图表上的 x 值。

out = minimize(residual, fit_params, args=(x,))     
print(fit_report(out))

这导致了错误

TypeError: can't multiply sequence by non-int of type 'float'

我不确定这个问题是否最好描述为反卷积或函数的拟合函数。任何帮助,将不胜感激。

【问题讨论】:

  • 我说对了吗...z1z2 是缩放函数吗?所以你需要在整个数据范围内获取值?在这种情况下,您不需要A 并且您的系统仍然完全未确定。如果您可以假设一定的平滑度,您可以尝试使用 n 阶多项式或样条曲线。
  • 是的,没错。 z1 和 z2 是缩放函数。

标签: python data-fitting minimization lmfit deconvolution


【解决方案1】:

您声称您的目标函数是:

def residual(pars, x, data = total_scatter_expt):
   Data = total_scatter_expt
   Model = A * (z1 * 0.3 * y1 + z2 * 0.7 * y2) + D
   return model - data

这里有很多问题:

  1. 'data = total_scatter_expt' 表示data 的默认值将是函数定义total_scatter_expt 的值(就像处理此代码的文本时一样)。不要那样做。无论如何,total_scatter_expt 没有定义。这不可能是你实际运行的代码。

  2. 然后将Data 设置为total_scatter_expt。同样,这不能是有效代码。

  3. 您将DataModel 都大写,然后返回model-data。 Python 区分大小写,因此您的代码无效。

  4. 您访问 Az1y1z2y2D,它们未定义并且永远不会使用 parsx。同样,您的代码无效。

几乎可以肯定,您想从pars 中提取参数AD 等的值,但您不这样做。也许试试

   pvals = pars.valuesdict()
   model = pvals['A'] * (pvals['z1'] ....

您的意思可能是x 包含y1 和/或y2

以后,请提供实际显示您实际遇到的问题的代码。不要对您收到的错误消息撒谎:使用您发布的实际代码显示您收到的实际消息。

【讨论】:

  • true...但是:虽然有人可能会争辩说没有合适的问题...这不是一个答案。
  • 嗯,等等,“有人可能会说”在每种情况下都没有合适的问题。这不仅不是一个答案,“人们可以争辩”没有问题就没有答案,根本就没有问题。没有勺子。这不是评论。 ;)
  • 我没有这么说。我不在这。 :)
猜你喜欢
  • 2021-11-01
  • 2021-04-05
  • 2019-07-20
  • 1970-01-01
  • 1970-01-01
  • 2020-07-12
  • 1970-01-01
  • 2018-08-16
  • 1970-01-01
相关资源
最近更新 更多