Как оптимизировать функцию lsqnonlin, которую я уже пытался оптимизировать, добавляя разные опции, но все же дает тот же результат? - PullRequest
0 голосов
/ 08 июня 2018

У меня есть набор параметров, которые я хочу, чтобы они возвращались в результате нелинейной оптимизации через функцию 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
...