На самом деле, я имею дело с проблемой, из-за которой я не могу получить желаемые результаты из своей задачи подбора кривой. Я использовал 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
И вот мои результаты: введите описание изображения здесь