Error: lsqcurvefit stopped because it exceeded the function evaluation limit,

45 Ansichten (letzte 30 Tage)
Veronika Körber
Veronika Körber am 1 Dez. 2020
Kommentiert: Rayan am 19 Jan. 2025 um 20:58
I got the code below and was trying to run it but this error always occured: lsqcurvefit stopped because it exceeded the function evaluation limit,
It would be nice if someone please could help me. Thank you!
% Daten m1
omega_m1=[5.23598776, 4.48798951, 3.92699082, 3.4906585, 3.14159265, 2.991993, 2.85599332, 2.7925268, 2.7318197, 2.67369588, 2.61799388, 2.58567297, 2.56456543, 2.55414037, 2.54379972, 2.53354246, 2.52336759, 2.51327412, 2.4933275, 2.46399424, 2.41660973, 2.37101332, 2.32710567, 2.24399475, 2.0943951, 1.96349541, 1.7951958, 1.65346982];
amplitude_m1=[0.00375,0.0055,0.0075,0.011,0.0175,0.026,0.0356,0.041,0.0585,0.077,0.129,0.175,0.21,0.219,0.223,0.225,0.224,0.208,0.169,0.116,0.083,0.063,0.055,0.04,0.029,0.022,0.018,0.016];
phase_m1=[0.5];
%Plot Amplitude m1
plot(omega_m1, amplitude_m1, 'o', 'linewidth', 2);
xlabel('Frequenz \omega in 1/s');
ylabel('Amplitude A in m');
title('Resonanzkurve für m=1');
legend('Messdaten m=1');
%Fitting der Amplitude m=1
xdata=omega_m1;
ydata=amplitude_m1;
%options=optimoptions(@lsqcurvefit,'Algorithm','levenberg-marquardt', 'MaxFunctionEvaluations',2000000, 'MaxIterations', 200000, 'StepTolerance',1e-10);
x_0=[1,6]
fun=@(x,xdata) 0.9./((1-xdata.^2./x(1).^2).^2+xdata.^2./(x(2).^2.*x(1).^2)).^(0.5);
x=lsqcurvefit(fun,x_0,xdata,ydata);
times=linspace(xdata(1),xdata(end));
plot(xdata,ydata,'ko',times,fun(x,times),'r-','LineWidth',2)
xlabel('Frequenz \omega in 1/s');
ylabel('Amplitude A in m');
title('Resonanzkurve für m=1');
%Maximum der Amplitude
Max_m1=findpeaks(fun(x,times))
hold off;
%Plot der Phase
plot(omega_m1,phase_m1,'o','LineWidth',2);
xlabel('Frequenz \omega in 1/s');
ylabel('Phase \phi');
title('Relativphase zwischen Motor und Schiffchen für m=1');
legend('Messdaten m=1');
%Fitting der Phase
xdata=omega_m1;
ydata=phase_m1;
x_0=[2.5,6]
fun=@(x,xdata)mod((atanx(1).*xdata./x(2).*(x(1).^2-xdata.^2)),pi);
x=lsqcurvefit(fun,x_0,xdata,ydata);
times=linespace(xdata(1),xdata(end));
plot(xdata,ydata,'ko',times,fun(x,times),'r-','linewidth',2);
xlabel('Frequenz \omega in 1/s');
ylabel('Phase \phi');
title('Relativphase zwischen Motor und Schiffchen m=1');
label('Messdaten','Fittkurve');
  2 Kommentare
Rayan
Rayan am 19 Jan. 2025 um 20:58
jederZweite = eingabe(2:2:end); jederZweiteIdx = 2:2:length(eingabe); jederZweite(end) = NaN
wochen = 1:7:365; anzahlWochen = length(wochen)
——————
jahr = 1:364; wochen = reshape(jahr,7,52)
——————
jederDritte = eingabe(3:3:end)
—————-
t = 0:0.1:10; w = 2*pi*f; s = sin(w*t)
—————
eingabe([2 end]) = eingabe([end 2]); ausgabe=eingabe
—————
minVal = min(eingabe); minPos = find(eingabe==minVal)
—————
a = eingabe/7; b = eingabe(a==round(a)); ausgabe=size(b,1)
Oder
b = eingabe(mod(eingabe, 7) == 0)
ausgabe = numel(b);
—————
ausgabe = eingabe(eingabe(:,1)<20)
Oder
ausgabe = eingabe(eingabe >= 20)
—————
a = (eingabe>20) & (eingabe<=80); ausgabe = mean(eingabe(a))
————

Melden Sie sich an, um zu kommentieren.

Antworten (1)

Alan Moses
Alan Moses am 4 Dez. 2020
Hi,
You may refer to the answer to a similar question posted here. Refer the optimoptions documentation to look up the different options available for the solver.
On reproducing the code there seems to be few errors. On line 41, ‘atanx’ produces an error since it is unrecognized. You may refer atan function. Sine the function ‘fun’ on line 41 produces a vector output of the same size as that of ‘xdata’, the ‘ydata’ also must be of the same size as that produced by ‘fun’. You may refer to ones function to extend the size of the vector with the same values. The variable ‘phase_ml’ on line 4 needs to be extended in this case. In the last line, you may use the legend function instead of ‘label’.
You may refer the below lines of code with the changes:
phase_m1=0.5*ones(1,28); %Line 4
fun=@(x,xdata)mod((atan(1).*xdata./x(2).*(x(1).^2-xdata.^2)),pi); %Line 41
legend('Messdaten','Fittkurve'); %Line 48
Hope this helps!

Produkte


Version

R2020b

Community Treasure Hunt

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

Start Hunting!