如果我有一个函数,那么自变量是数学模型的定积分的上限。这个数学模型有我想要回归的参数。 这个数学模型是非线性的,可能很复杂。
我该如何解决这个问题?
如果我的函数输出被处理,可以是curve_fit吗?
有一个简化的案例
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。
答案 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]