【问题标题】:Determining relative contribution of two components to a measured spectrum确定两个分量对测量光谱的相对贡献
【发布时间】:2020-07-20 21:06:53
【问题描述】:

我想提前为这个问题的冗长道歉:我有使用 MATLAB 的经验,但对 Python 比较陌生,因此我无法用比描述使用更合适的代码来表达这个问题单词。

我有一个测量光谱,它由两个分量的贡献组成:A 和 B。

因此,在给定 x 值处的吸光度为:

Abs(x) ~ c*[(f*A(x))+((1-f)*B(x)],

其中f是混合物中A的分数,c与A和B的总浓度成正比。吸光度只是近似值,因为在混合物中存在噪音测得的光谱。

Absorbance of individual components

Absorbance of mixture with noise

我的问题是如何通过确定每个组分的相对贡献来最好地对测量的光谱(在整个 x 值范围内)进行反卷积,并计算 A + B 的浓度 - 即, 确定上述等式中 cf 的值的组合,以获得最佳拟合。

作为一个新手,一个应该有效但效率低下的方法是选择不同间隔的 f 值(例如,0.1 间隔中的 0 到 1)并找到 的值>c 给出每个 f 的最小残差平方和 R^2。然后可以将给出最佳拟合的组合用作初始猜测,以将 f 优化为选定数量的有效数字。然而,我想,当一次运行具有>数千个光谱的循环时,这种方法会很耗时。

Python 是否包含任何可以比上述过程更有效地完成反卷积的功能,无论是部分还是全部?

提前致谢。

【问题讨论】:

  • 我自己不认识SciPy,但在那里你会找到你需要的东西(例如,scipy.optimize.least_squares
  • 谢谢,这正是我所需要的。我的部分问题是我看到的所有内容都需要一个函数作为输入,而不是两个数据集进行优化,但是现在我意识到我可以简单地根据两个数据集定义函数。
  • 您可以不将解决方案添加到帖子顶部,而是将问题正确陈述,然后写下您自己的答案。这对 StackOverflow 用户来说会更有用,我会赞成问题和答案。另请注意,标题中的“in Python”是多余的,因为您有标签。
  • 谢谢,我已按照您的建议添加了答案并编辑了我的问题。

标签: python data-fitting deconvolution


【解决方案1】:

也许不是解决问题的最佳方法,尽管结果令人满意并且现在知道了我将来可以调整代码的一般方法。

# Determine concentration and fraction of A in mixture by minimising the sum 
# of the square residuals for measured spectrum - sum of spectra A + B
from scipy.optimize import minimize
def objective(x)
    return sum(spec-(x1*((x2*spec_A)+((1-x2)*spec_B))))**2

# Initial guess for parameters
x0=[max(spec)/(0.5*max(spec_A+spec_B)),0.5]

sol=minimize(objective,x0,method='SLSQP')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-16
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 2017-06-24
    • 2015-01-30
    • 2022-01-01
    相关资源
    最近更新 更多