Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

Thread Subject:
lsqcurvefit

Subject: lsqcurvefit

From: bo

Date: 24 Mar, 2010 03:59:08

Message: 1 of 3

I wrote below .m file

function fitfunc
angle_degree=[19.883106831000134,15.427573865321031,9.591923791356935,3.274191669811748,-3.141095641238363,-9.545668398763826,-15.786733683310745,-21.39707840054846,-25.45074879011906,-28.2033898252673,-28.139404119889125];
r=[250.63047240908276,277.98655255245717,295.8054985966285,304.4770147318185,306.04980150295796,306.27070542250686,296.62852796047787,277.08848442329753,248.36231698870907,216.01644613315904,181.82071224148257];
x0=[5,5,5,5];
[x,renorm]=lsqcurvefit(@myfun,x0,angle_degree,r);
disp(x);
disp(renorm);
function F=myfun(x,angle_degree)
F=x(1)*exp(x(2)*angle_degree)+x(3)*exp(x(4)*angle_degree)

I got Optimization terminated: norm of the current step is less
 than OPTIONS.TolX.
    0.0000 2.2826 0.0000 2.2826
    7.5120e+005

I found that x(1)&x(3) are both zero.Anyone got idea about this? Thanks

Subject: lsqcurvefit

From: Steven Lord

Date: 24 Mar, 2010 14:32:51

Message: 2 of 3


"bo " <bobpong1979@hotmail.com> wrote in message
news:hoc2mc$1er$1@fred.mathworks.com...
>I wrote below .m file
> function fitfunc
> angle_degree=[19.883106831000134,15.427573865321031,9.591923791356935,3.274191669811748,-3.141095641238363,-9.545668398763826,-15.786733683310745,-21.39707840054846,-25.45074879011906,-28.2033898252673,-28.139404119889125];
> r=[250.63047240908276,277.98655255245717,295.8054985966285,304.4770147318185,306.04980150295796,306.27070542250686,296.62852796047787,277.08848442329753,248.36231698870907,216.01644613315904,181.82071224148257];
> x0=[5,5,5,5];
> [x,renorm]=lsqcurvefit(@myfun,x0,angle_degree,r);
> disp(x);
> disp(renorm); function F=myfun(x,angle_degree)
> F=x(1)*exp(x(2)*angle_degree)+x(3)*exp(x(4)*angle_degree)
>
> I got Optimization terminated: norm of the current step is less
> than OPTIONS.TolX.
> 0.0000 2.2826 0.0000 2.2826
> 7.5120e+005
>
> I found that x(1)&x(3) are both zero.Anyone got idea about this? Thanks

I strongly doubt they're both zero -- they are probably just being displayed
that way. Type the following command then display x again:

    format long g

Those two coefficients are likely to be very, very small though -- for your
first value of angle_degree, which is almost 20, and a value for x(2) around
2.3 the term exp(x(2)*angle_degree) is approximately 5e19 -- to have the
result of your function be on the order of 250, x(1) would have to be around
5e-18. Actually, both x(1) and x(3) are probably around half that value, so
that each of the exponential terms is roughly 125 and their sum is about
250.

Plotting angle_degree versus r, this graph does NOT look like an exponential
curve. I think you should change your model to something more appropriate
to the shape of the curve -- what that model should be, I can't say. You'll
need to choose the model based on your knowledge of the underlying problem.

--
Steve Lord
slord@mathworks.com
comp.soft-sys.matlab (CSSM) FAQ: http://matlabwiki.mathworks.com/MATLAB_FAQ

Subject: lsqcurvefit

From: bo

Date: 30 Mar, 2010 21:28:02

Message: 3 of 3

"Steven Lord" <slord@mathworks.com> wrote in message <hod7q6$hm9$1@fred.mathworks.com>...
>
> "bo " <bobpong1979@hotmail.com> wrote in message
> news:hoc2mc$1er$1@fred.mathworks.com...
> >I wrote below .m file
> > function fitfunc
> > angle_degree=[19.883106831000134,15.427573865321031,9.591923791356935,3.274191669811748,-3.141095641238363,-9.545668398763826,-15.786733683310745,-21.39707840054846,-25.45074879011906,-28.2033898252673,-28.139404119889125];
> > r=[250.63047240908276,277.98655255245717,295.8054985966285,304.4770147318185,306.04980150295796,306.27070542250686,296.62852796047787,277.08848442329753,248.36231698870907,216.01644613315904,181.82071224148257];
> > x0=[5,5,5,5];
> > [x,renorm]=lsqcurvefit(@myfun,x0,angle_degree,r);
> > disp(x);
> > disp(renorm); function F=myfun(x,angle_degree)
> > F=x(1)*exp(x(2)*angle_degree)+x(3)*exp(x(4)*angle_degree)
> >
> > I got Optimization terminated: norm of the current step is less
> > than OPTIONS.TolX.
> > 0.0000 2.2826 0.0000 2.2826
> > 7.5120e+005
> >
> > I found that x(1)&x(3) are both zero.Anyone got idea about this? Thanks
>
> I strongly doubt they're both zero -- they are probably just being displayed
> that way. Type the following command then display x again:
>
> format long g
>
> Those two coefficients are likely to be very, very small though -- for your
> first value of angle_degree, which is almost 20, and a value for x(2) around
> 2.3 the term exp(x(2)*angle_degree) is approximately 5e19 -- to have the
> result of your function be on the order of 250, x(1) would have to be around
> 5e-18. Actually, both x(1) and x(3) are probably around half that value, so
> that each of the exponential terms is roughly 125 and their sum is about
> 250.
>
> Plotting angle_degree versus r, this graph does NOT look like an exponential
> curve. I think you should change your model to something more appropriate
> to the shape of the curve -- what that model should be, I can't say. You'll
> need to choose the model based on your knowledge of the underlying problem.
>
> --
> Steve Lord
> slord@mathworks.com
> comp.soft-sys.matlab (CSSM) FAQ: http://matlabwiki.mathworks.com/MATLAB_FAQ
>
OK.Thanks.I have changed the model

clc;
a0=[100,100,100];
function F = myfun(a,z)
F = a(1)*(z^2)+a(2)*(z)+a3
[a,renorm]=lsqcurvefit(@myfun,a0,z,y);
disp(a);
disp(renorm);

But I got ???

function F = myfun(a,z)
    |
Error: Function definitions are not permitted at the prompt or in scripts.

Can not figure out what happened?Need your advise.Thanks.

Tags for this Thread

What are tags?

A tag is like a keyword or category label associated with each thread. Tags make it easier for you to find threads of interest.

Anyone can tag a thread. Tags are public and visible to everyone.

Contact us