Проблема с подгонкой нелинейной кривой в MATLAB (lsqcurvefit и Multistart) - PullRequest
0 голосов
/ 01 мая 2020

На самом деле, я имею дело с проблемой, из-за которой я не могу получить желаемые результаты из своей задачи подбора кривой. Я использовал lsqcurvefit в первую очередь. Затем я добавил MultiStart в свой код, но мой результат не изменился. Я не знаю, почему MATLAB придает неизвестному коэффициенту модели такое же значение, которое я ввел для MATLAB. Я привожу мой код в следующем вместе с результатами. Я был бы очень признателен, если бы вы могли помочь мне решить эту проблему и получить лучшие результаты:

clc
clear all;
close all;
%xdata
T = 294:0.1:361;
T=T';
%ydata
for i=1:size(T,1)
f1(i)=  0.2099*exp(-((T(i)-340.2)/2.439).^2);
end
f1=f1';
%Initial value for unknown coefficient
B0 =[-6.1e+04];
%find the local fit using lsqcurvefit
options = optimoptions('lsqcurvefit','FiniteDifferenceType','central','OptimalityTolerance',1e-12,'FunctionTolerance',1e-12, 'MaxFunctionEvaluations',1500);
 lb = [-Inf];
 ub = [Inf];
 [B,Rsdnrm,Rsd,ExFlg,OptmInfo,Lmda,Jmat] = lsqcurvefit(@firstorderDSC1,B0,T,f1,lb,ub,options);

% Set up the problem for MultiStart
problem = createOptimProblem('lsqcurvefit','x0',B0,'objective',@firstorderDSC1,...
    'lb',lb,'ub',ub,'xdata',T,'ydata',f1);
ms = MultiStart('PlotFcns',@gsplotbestf);
[xmulti,errormulti] = run(ms,problem,50);
%plot the result
figure;
plot(T,f1,T,firstorderDSC1(xmulti,T),'LineWidth',3)
legend('Data','Fitted result')

А вот моя функция @ firstorderDSC1:

function dndt2 = firstorderDSC1(B, T)
%my differential equation
    function denaturate = firstorderDSC(T, n)
          a= (exp(183.8)/1.5); %(1/s)
          dndT=a*exp(B(1)/T)*(1-n);
          denaturate=dndT;
    end 

%solving my differential equation
options = odeset('AbsTol', 1e-8,'RelTol',1e-8);%,'OutputFcn',@odeplot);
[temp,num] = ode23s(@firstorderDSC, T, 0, options);
  for i=1:size(num,1)
     dndt2(i,1) = firstorderDSC(temp(i),num(i));
  end
end

И вот мои результаты: введите описание изображения здесь

...