5.0 | 4 ratings Rate this file 39 Downloads (last 30 days) File Size: 210 KB File ID: #39564
image thumbnail




21 Dec 2012 (Updated )

Solution of one or more nonlinear equations in the least squares sense.

| Watch this File

File Information

The function is an improved version of the function LMFnlsq widely tested on the nonlinear regression, curve fitting and identification problems. Better description is in the complementing file LMFnlsq2test.pdf.

Warning: The option 'Display' is changed for better control of intermediate results output. See help LMFnlsq2.

Required Products MATLAB
MATLAB release MATLAB 7.3 (R2006b)
Other requirements The demo program LMFnlsq2test needs functions inp, fig, separator and LMFnlsq2 from File Exchange
Tags for This File   Please login to tag files.
Please login to add a comment or rating.
Comments and Ratings (11)
22 Oct 2013 James

Worked flawless for my application, cheers.

28 Aug 2013 xinxing  
26 Aug 2013 Miroslav Balda

Build M-function, say resid.m, for evaluation of problem residuals:

function res = resid(p)
global t Y Wp % Wp = penalty weight
% If you wish to work with the native names of variables (not with the elements of the sought parameters p(i), use the following command:
[A,B,C1,C2,m,w,Tc] = deal2('_elm_',p); % deal2 is the function from the File Exchange
% http://www.mathworks.com/matlabcentral/fileexchange/32547
Tct = Tc - t;
lTt = log(Tct);
res = [A + B*Tct.^m + C1*cos(w*lTt) + C2*sin(w*lTt) - Y

The user should choose propper weight(s) of penalties expressing constraints put on parameters.

21 Aug 2013 xinxing

Hi, Balda
Thanks for your reply. My curve fitting prblem is to calibrate the model like this:
Y(i)=A+B*(Tc-t(i))^m+C1*cos(w*ln(Tc-t(i))) +C2*sin(w*ln(Tc-t(i)))
The parameters to be estimate is A,B,C1,C2,m,w,Tc,
and the Constraints is:
B<0, |C1|<1, |C2|<1, Tc>max(t(i)), 0.1<m<0.9, 6<w<13, So how to write the L-M expression using the LMFnlsq2.m ?

21 Aug 2013 Miroslav Balda

Yes, you may make curve-fitting with constraints, if you introduce convenient penalty functions, which generate additional elements in the vector of residuals. It has been used in the solution of the Problem 3, Constrained Rosenbrock valey, described in the file LMFnlsq2test.m.

21 Aug 2013 xinxing

Can the function do Curve fiting with constraints?

02 Apr 2013 Jose

what is the use of Basdx if it is not used
plus it takes the value 0.25*xf.Xtol so Xtol should be enough
and in the comments it should be 25e-9 ???

02 Apr 2013 Jose

actually LMFnlsqtest.m should have all the LMFnlsq replaced with LMFnlsq2

line 191 xf.Basdx = 0.25*xf.Xtol;
should be xf.Basdx = 0.25*xf.XTol;

02 Apr 2013 Jose

LMFnlsqtest.m on line 29 should be:
if ~exist('LMFnlsq2.m','file'), Id = [Id 'LMFnlsq2 (Id=39564 )']; end

01 Apr 2013 Jose

Line 286, it should be elseif lb~=n

elseif le~=n
error(['Dimensions of vector dx ',num2str(lb),'~=',num2str(lx)]);

01 Apr 2013 Jose

Lines 301 and 311 do the same, one should be enough:

SS = r'*r;

feval(printf,ipr,-1); % Table header
dx = zeros(n,1);
res= 1;
feval(printf,ipr,cnt,res,SS,x,dx,l,lc) % Initial state

[A,v] = getAv(FUN,JAC,x,r,bdx);
SS = r'*r;

15 Apr 2013

Display of intermediate results has been improved to fulfill better users' requirements.

Thanks Jose's detailed study of the code, small bugs were repaired and the code made more clear.

16 Apr 2013

Repaired several bugs found by Jose. Improved description of the function and of the demo program LMFnlsq2test.

22 Apr 2013

The new version of the function is a slight modification of the recent update. One statement, dated 2012-12-01, has been commented out because of its erroneous function under certain circumstances. The function is now fast and much more stable.

23 Apr 2013

Improved the printout of results. The previous versions did not display the final solution if the iteration count were not integer multiple of required step of printing.

Contact us