scipy.optimize.curve_fit与scipy.integrate.quad的一个明确的积分函数

时间:2018-03-28 05:37:42

标签: python numpy math scipy curve-fitting

如果我有一个函数,那么自变量是数学模型的定积分的上限。这个数学模型有我想要回归的参数。 这个数学模型是非线性的,可能很复杂。

  1. 我该如何解决这个问题?

  2. 如果我的函数输出被处理,可以是curve_fit吗?

  3. 有一个简化的案例

    import scipy.optimize as sp
    from scipy.integrate import quad
    import numpy as np
    number = 100
    
    def f(x,a,b,c):
        return 500*a*x+b*c
    
    def curvefit(d,a,b,c):
        return quad(f,0,d,args=(a,b,c))[0]
    
    x_linear = np.linspace(0.001,0.006,number)
    y_linear = 23.33*x_linear + 0.02*(np.random.random(number)-0.5)
    parameter = sp.curve_fit(curvefit,x_linear,y_linear)
    

    x和y _linear是我编号的数字。

    在curvefit()中的

    现在是x_linear,它是一个列表,并且是quad()的上限。

    错误显示ValueError:具有多个元素的数组的真值是不明确的。使用a.any()或a.all()

    我知道quad()要求上限为float。

1 个答案:

答案 0 :(得分:0)

错误在函数scipy.integrate.quad内引发,因为d是numpy.array而不是标量。赋给scipy.optimize.curve_fit的函数将自变量(在您的情况下为x_linear)作为第一个参数。

快速而肮脏的解决方法是修改curvefit以计算d:

中每个值的定积分
def curvefit(xs,a,b,c):
    return [quad(f,0,x,args=(a,b,c))[0] for x in xs]