У меня есть набор параметров, которые я хочу, чтобы они возвращались в результате нелинейной оптимизации через функцию lsqnonlin .Код предназначен для обратной задачи, которая дает набор термомеханических параметров в зависимости от смещения металлического стержня.Проблема в том, что оптимизация возвращает мне приблизительное значение или почти такое же, как начальная точка (X0).Когда он должен давать результат, равный или приблизительный к значениям переменных.Для этого я попытался ввести входной аргумент «options», пытаясь изменить число MaxIter, MaxFunEval и допуск функции.В результате выполнения программы она дает такой же ответ: « Оптимизация завершена, поскольку размер градиента меньше значения по умолчанию для допуска оптимальности. » Что можно сделать, чтобы улучшить оптимизацию?Спасибо за помощь.tf = 20;t = 0: 0,1: tf;
Texcel = xlsread ('Classeur(19_04).xls',1,'L2:L202');
ResSpline = spline (t,Texcel);
plot(t,ppval(mkpp(ResSpline.breaks,ResSpline.coefs),t));
ParamThermMec; %Thermo-mechanical parameters defined by the array X0=[coeff_dilat G Cp lanbda Rho]
nu = 0.3; %Poisson's coefficient
Ucomsol = xlsread ('Classeur(19_04).xls',2,'L2:L202'); %displacement from Classeur(19_04).xls
figure (1)
hold on
yyaxis left
plot (t,Ucomsol)
yyaxis right
plot (t,Texcel)
xlim([0 20])
fun = @(X)(deplacement_lsq(0,ResSpline,X)-Ucomsol); %function to minimize
[temps,Umatlab_bauzin] = DeplacementSpline(0,ResSpline,1);
plot(t,Umatlab_bauzin,'b',t,Ucomsol,'g');
X0 = X/2; %initial value or starting point
options.TolFun=0.0000000000000000000000000000000000000001;
[ParametresTM,resnorm,residual,exitflag,output]=lsqnonlin(fun,X0,[0 0 0 0 0],[10 999999999999 2500 500 4000],options); %nonlinear minimisation
DiffXP=X-ParametresTM;
EX=[DiffXP(1)/X(1) DiffXP(2)/X(2) DiffXP(3)/X(3) DiffXP(4)/X(4) DiffXP(5)/X(5)]*100; %Percentage difference