使用 Python 求解 4 参数(罗德巴德方程)的常数



我是python的新手,我正在尝试编写一种算法来解决Rodbard方程中的4个未知参数,我们将使用ImageJ测量的灰度值与光密度校准盘相关联。 这个方程是非线性的,写成y = c*((x-a(/(d-x((^(1/b(,其中a、b、c和d是未知的。 我有四个点(176.5,0(,(161.333,0.1(,(66.1667,0.9(和(40.833,2.5(的x和y值。 下面,我发布了我解决这 4 个未知数的尝试。 任何帮助为我指出正确的方向将不胜感激!

    import scipy.optimize as opt
    def f(a, b, c, d):
         0 == [c * ((176.5 - a)/(d - 176.5))**(1/b)]
         0.1 == [c * ((161.333 - a)/(d - 161.333))**(1/b)]
         0.9 == [c * ((66.1667 - a)/(d - 66.1667))**(1/b)]
         2.5 == [c * ((40.833 - a)/(d - 40.833))**(1/b)]
    return f
    opt.curve_fit(a, b, c, d)
    print a
    print b
    print c
    print d
如果要

使用curve_fit,则应执行以下操作:

def f(x1, a1, b1, c1, d1):
    return c1 * (((x1 - a1)/(d1 - x1))**1/b1)
x_data = np.array([176.5, 161.333, 66.1667, 40.833])
y_data = np.array([0., 0.1, 0.9, 2.5])
p0 = np.array([168., -0.01, -7.4, 35000.])
popt, pcov = opt.curve_fit(f, x_data, y_data, p0, None, False, True, ftol = 0.00001)

p0 是最初的猜测,如果您不通知它,将假定所有猜测的数组。

使用提供的数据,我尝试使用不同的参数,但无法找到解决方案。

我希望这有所帮助。祝你好运!

这看起来类似于这个问题:如何使用 Python 求解一对非线性方程?

但这似乎并没有给我正确的答案。尝试复制此内容并添加更多积分?

from scipy.optimize import fsolve
def equations(p):
    a,b,c,d = p
    return ((c * ((176.5-a)/(d-176.5))**(1/b)),
            (c * ((161.333-a)/(d-161.333))**(1/b))-0.1,
            (c * ((66.1667-a)/(d-66.1667))**(1/b))-0.9,
            (c * ((40.833-a)/(d-40.833))**(1/b))-2.5)
a,b,c,d = fsolve(equations, (1,1,1,1))
print a,b,c,d

输出:

1.0 1.0 1.0 1.0

最新更新