Scripted general fitting data: Error in fminsearch

2 vues (au cours des 30 derniers jours)
Xin
Xin le 16 Mai 2014
Commenté : Star Strider le 16 Mai 2014
I am very new in Matlab. And I am still going through the text book.
And here is a piece of code I tried to fit the exist data.fil. It is a 5*2 data.
%loading data
load data.fil; x=data (: ,1 ); y = data (: ,2);
%plotting
xmin = min(x); xmax = max(x); npts = 1001;
dx = (xmax - xmin) / (npts -1); xplot = xmin:dx:xmax;
%set ifit to 0 and don't continue on to the fit until the user sets it to 1
ifit = 0;
while (ifit == 0)
disp ('Enter an initial guess for the function')
a = input ('parameters [a1, a2,...] in vector form [...]-');
%plot data and the initial function guess
yplot = funcfit (a, xplot);
plot (x,y, 'b*', xplot, yplot, 'r-');
xlabel ('x');
ylabel ('y');
title ('Initial Guess and Data')
ifit = input ('0: guess again; 1: fit with this guess - ');
end
% Define the option TolX set; look for the best parameters to minimize the leastsq.m function
option = optimset ('TolX', 1e-4);
a = fminsearch (@leastsq, a, option, x, y);
% evaluate the function with the final fit parameters
yplot = funcfit (a, xplot);
% plot
plot (x,y, 'b*', xplot, yplot, 'r-');
xlabel ('x')
ylabel ('y')
title ('Final fit and data')
And here are the functions being called: funcfit.m
% fitting function, find a1, a2 to fit the fuction f represents
function f = funcfit(a,x)
f= a(1).*exp(a(2).*x);
leastsq.m
%the square of minimum between the y in the data:fil and fiting
function s=leastsq(a,x,y)
s = sum ((y - funcfit (a,x).^2);
So when I run the script, I got
Enter an initial guess for the function
parameters [a1, a2,...] in vector form [...]-
I tried [1,1], and it fits.
0: guess again; 1: fit with this guess -
So I input 1. The it shows below:
Attempt to execute SCRIPT fminsearch as a function:
M:\pc\Desktop\Matlab start\fminsearchfitting\fminsearch.m
Error in fminsearch (line 51)
a = fminsearch (@leastsq, a, option, x, y);
I have checked many times, and I do not know where it is wrong. I learnt fminsearch only process scalar. How do I do?
Many thanks.

Réponses (1)

Star Strider
Star Strider le 16 Mai 2014
You may have named your script file (or some other script in your user directory) as ‘fminsearch’.
Type this line in the Command Window:
which fminsearch -all
On my computer (Windows 8 64), I get one result:
C:\Program Files\MATLAB\R2014a\toolbox\matlab\optimfun\fminsearch.m
If you get more than that, especially if one is your script file, rename your script file.
  2 commentaires
Xin
Xin le 16 Mai 2014
Thanks. I got only one fminsearch.m. But I still changed the name for script. It still shows so.
Star Strider
Star Strider le 16 Mai 2014
I see the problem.
Change:
a = fminsearch (@leastsq, a, option, x, y);
to:
a = fminsearch (@(a) @leastsq(a, x, y), a);
I didn’t run your code so I don’t know if that’s the only problem, but it should at least not throw the error now.

Connectez-vous pour commenter.

Community Treasure Hunt

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

Start Hunting!

Translated by