I have some data with three columns, x, y, and b. Here, b has associated values for each x value. (N.b. x always increases)
That is, the data looks something like:
x y b
1 4 7
2 5 8
3 6 9
Say this data is fit by some model y = ax + math.log(b). I could compute each value by doing something like:
def findB(x):
for i in range(0, len(xData)):
if xData[i] >= x:
return bData[i]
def f(x, a):
b = findB(x)
result = a*x + math.log(b)
return result
Now say I want to optimise this fit for f(x,a) to find the parameter a using scipy.optimise.curve_fit.
I have attempted to do so like this:
popt, pcov = scipy.optimize.curve_fit(f, xData, yData)
but doing so results in the error:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
This is due to the curve_fit function passing all the x data as one array resulting in the if xData[i] >= x: statement being rendered ambiguous.
I can't figure out a away around this. I have tried creating a paired list of xData and bData and passing this to curve_fit to no avail.
This works if I simply hardcode b to some pre-determined value so I believe I am calling the curve_fit function correctly. Advice welcome.