MATLAB: Lsqcurvefit – Error using Data_fit>@​(x)thefun2(​x,xdata) Too many input arguments.

lsqcurvefitMATLABtoo many arguments

Hello,
I am having this error in the title running a lsqcurvefit program. I'm not very proficient in MATLAB and I think I'm making some simple mistakes which I just could not figure out. I checked similar questions asked before and consulted documentation but still culd not figure out. Hence this plea for help.
I am trying to do a least sq fit for an implicit function, i.,e, I need to solve an equation with a given set of optimizing parameters x to get the function that is being optimized. I'm doing a fit also with another function that is explicit and that is working fine.
Here is the code.
I would appreciate help anyone can provide.
Thank you.
Sid
P.S. There are some leftover codes left from trying various things like N not being passed in the E_fun and putting a dimension statement for y in the E_fun, etc.
————
div1=5.4/6.4;
N=11;
B_max=10.0;
xdata=zeros(1,N);
x_D=zeros(1,N);
g=zeros(1,N);
beta=zeros(1,N);
x=zeros(1,2);
ydata = [6.4, 6.5, 6.8, 7.1, 7.5, 8.0, 9.0, 10.0, 11.0, 11.7, 12.5]; %in units of inch divs
for i=1:11
B=(i-1)*1.0;
xdata(i)=B;
ydata(i)=div1*ydata(i);
end
fun_DF = @(x,xdata)x(1).*(1+0.25.*((1.73.*xdata./x(1)).^2)).^0.5;
x0=(5.4);
lb=4.0;
ub=6.0;
[x,resnorm,residual,exitflag,output] = lsqcurvefit(fun_DF,x0,xdata,ydata,lb,ub);
fprintf('\nFD eps0= %.3f\t resnorm= %.3f\n',x, resnorm);
times = linspace(xdata(1),xdata(end));
plot(xdata,ydata,'ko',times,fun_DF(x,times),'b-')
%Parabolic potentail
x0=[5.0, 0.1];
lb=[4.0, 0.01];
ub=[6.0, 1.0];
myfun2 = @(x,xdata) E_fn(x,xdata); % parameterized function

fun2 = @(x) myfun2(x,xdata); % function of x alone; x(1)=eps0, x(2)=alpha0
[x,resnorm,residual,exitflag,output] = lsqcurvefit(fun2,x0,xdata,ydata,lb,ub);
fprintf('\nexp eps0= %.3f alpha0= %.3f\t resnorm= %.3f',x, resnorm);
function output = E_fn(x,xdata)
N=11;
y=zeros(1,N);
eps0=x(1);
alpha0=x(2);
beta=11.75*alpha0*alpha0/eps0;
for i=1:N
g=(1.0+0.25*(1.73*xdata(i)/eps0)^2)^0.5;
myfun3 = @(xd, beta, g) x_D_fn(xd, beta, g); % parameterized function
fun3 = @(xd) myfun3(xd, beta, g); % function of x alone
[theroot, fval, exitflag, output] = fzero(fun3, 0.7);
x_D = theroot;
f=(1.0+(g*g-1)/(g*x_D*x_D)^2)*g*x_D*x_D+(0.5/beta)*(1-1/(1+2*beta/(g*x_D*x_D)));
y(i)=0.5*eps0*f;
end
output=y;
end
function y=x_D_fn(x,beta,g)
y=x^4-1/(g*(1+2*beta/(g*x*x)))^2-(g*g-1)/(g*g);
end

Best Answer

The second call to lsqcurvefit should be,
___ = lsqcurvefit(@E_fn,x0,xdata,ydata,lb,ub);
or
___ = lsqcurvefit(myfun2,x0,xdata,ydata,lb,ub);