Fitting data with custom function defined with recursion loop

4 views (last 30 days)
Hi
I am trying to fit data with a function of this form: the function is defined on strictly positive values. In 0, the function is equal to 1-(the sum of the values it takes for x from 1 to 10)
for example, I tried with the function:
function[b]=Function2(x,a,c)
if x>0
b=a*(x+c);
elseif x<0
b=0;
else
y(1)=0;
for i=2:10
y(i)=y(i-1)+Function2(i,a,c);
end
b=1-y(10);
end
And used data defined so that I knew what a and c parameters to expect. The curve fitting tool replys to me that "Function value and YDATA sizes are not egal"
When I suppress the loop for x=0 that uses the function Function2 inside it's own expression, the curve fitting tool works (the function is then just a piecewise function), but then it gives a fitting curve that does not correspond at all to the piecewise function I expect.
How can I fit this function?
Thanks in advance
Bill
  3 Comments
Bill Francois
Bill Francois on 15 May 2015
Hi I've edited my question, it was unclear (mostly for punctuation reasons). What I meant was that the function is defined a certain way for x>0, and for x=0 the function is defined by the sum of some of the values it takes for x>0. c is just a parameter.
Walter Roberson
Walter Roberson on 15 May 2015
As a debugging step, inside the function please display
size(x), size(a), size(c)

Sign in to comment.

Answers (1)

Titus Edelhofer
Titus Edelhofer on 15 May 2015
Hi Bill,
I guess Curve Fitting tool will call your function with x being a vector and not a scalar. In this case your function will not work, since it's written for scalar x only. If length(x)>1 you should loop over the vector x.
Titus

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!