【问题标题】:How to do weighted curve fitting with constraints under python?如何在python下进行带约束的加权曲线拟合?
【发布时间】:2023-04-28 23:45:01
【问题描述】:

我需要使用约束和权重进行曲线拟合。阅读,主要是在这里,我创建了一个函数

 def residuals_ga(self,p,h,n,err,kkind=None):

        # checking if to use the minimum or maximum value of kappa
        if kkind == "min":
            kappa = self.k0[0] - self.k0[1]
        elif kkind == "max":
            kappa = self.k0[0] + self.k0[1]
        # checking if kappa is in bounds
        elif p[0] > self.k0[0] + self.k0[1]:
            return float("inf")
        elif p[0] < self.k0[0] - self.k0[1]: 
            return float("inf")
        else:
            kappa = p[0]
        ag = float(p[1])
        hq = lambda n,kappa,ag: self.hq_func(n,1,kappa,ag)
        return (hq(n,kappa,ag) - h)/err**2

据我所知,这应该可行。然而,结果非常糟糕。这个方法对吗?我错过了什么吗?

我应该提到我使用 xmgrace 测试了函数本身,它工作正常。

【问题讨论】:

  • 你能告诉我们一些信息告诉我们结果有多糟糕吗?

标签: python scipy curve-fitting least-squares


【解决方案1】:

了解如何调用此例程可能会有所帮助,self.k0 和 self.hq_func 的定义也会有所帮助。

目的是什么

    hq = lambda n,kappa,ag: self.hq_func(n,1,kappa,ag)
    return (hq(n,kappa,ag) - h)/err**2

相对

    return (self.hq_func(n, 1, kappa, ag) - h)/err**2

?

一般来说,p[0] 值的变化会改变残差的情况有很多。这使得很难确定导数,这可能会导致不稳定的结果。返回 Inf 肯定会带来麻烦。

如果想法是为参数可能采用的值设置上限和/或下限,您可能会发现 lmfit 包 (http://lmfit.github.io/lmfit-py/) 很有帮助。

【讨论】:

    最近更新 更多