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);endfun_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;endfunction 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