levenberg-marquardt in lsqcurvefit

조회 수: 12 (최근 30일)
Niels
Niels 2013년 8월 15일
Hello
How do I use the levenberg-marquandt algortime in lsqcurve fit instead of the default trust-region-reflective algorithm?
[parameters,resnorm,residual,exitflag,output] = lsqcurvefit(heightModel,initialValues,filteredData(:,1),filteredData(:,2));
is the formula I use in my function
Can anyone help me out?
Thanks in advance
Niels

채택된 답변

Matt Kindig
Matt Kindig 2013년 8월 15일
Pass in an options structure:
opts = optimset('Algorithm', 'levenberg-marquardt');
[parameters,resnorm,residual,exitflag,output] = lsqcurvefit(heightModel,initialValues,filteredData(:,1),filteredData(:,2),[],[],opts);
You can see the various options in the Help docs for lsqcurvefit, at
doc lsqcurvefit

추가 답변 (1개)

Niels
Niels 2013년 8월 15일
Thanks for answering
I have used this for individual fitting in the following construct:
CODE PART A
validFitPersons = true(nbValidPersons,1);
for i=1:nbValidPersons
personalData = data{validPersons(i),3};
personalData = personalData(personalData(:,1)>=minAge,:);
% Fit a specific model for all valid persons
try
opts = optimset('Algorithm', 'levenberg-marquardt');
[personalParams,personalRes,personalResidual] = lsqcurvefit(heightModel,initialValues,personalData(:,1),personalData(:,2),[],[],opts);
%catch
%x=1;
end
The intial starting values and the formula used to fit is given by:
CODE PART B
strcmpi(model,'jpa2')
% y = a.*(1-1/(1+(b_1(t+e))^c_1+(b_2(t+e))^c_2+(b_3(t+e))^c_3))
heightModel = @(params,ages) abs(params(1).*(1-1./(1+(params(2).* (ages+params(8) )).^params(5) +(params(3).* (ages+params(8) )).^params(6) +(params(4) .*(ages+params(8) )).^params(7) )));
modelStrings = {'a','b1','b2','b3','c1','c2','c3','e'};
% Define initial values
if strcmpi('male',gender)
initialValues = [175 0.35 0.12 0.076 0.43 2.8 20 0.34];
else
initialValues = [162 0.43 0.13 0.089 0.48 2.9 16 0.4];
end
Switching off the catch command in CODE PART A and adding the levenberg-marquandt command also in CODE PART A caused my data to be much closer towards the initial values then otherwise. This is a good thing.
How can I make my curve fitting stay looking much closer around my initial values and not spreading out too much?
Anyhelp?

카테고리

Help CenterFile Exchange에서 Linear and Nonlinear Regression에 대해 자세히 알아보기

Community Treasure Hunt

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

Start Hunting!

Translated by