Решение задачи нелинейной оптимизации
11.02.2022
Добрый день! Подскажите пожалуйста, каким методом можно решить оптимизационную задачу, если целевая функция использует 5 входящих аргументов и должна выдать 5 настроенных аргументов ?У нас есть ф...
Добрый день!
Подскажите пожалуйста, каким методом можно решить оптимизационную задачу, если целевая функция использует 5 входящих аргументов и должна выдать 5 настроенных аргументов ?
У нас есть фактические (исторические) значения q (в коде это q_hist) и значения I1, I2, I3, I4 на каждый временной шаг. Есть зависимость q_hist(t).
Формула ниже позволяет посчитать q.
В ходе решения задачи, нужно найти оптимальные значения tau, f1, f2, f3, f4 (расчетное q должно как можно меньше отличаться от q_hist).
Я использовал метод lsqcurvefit, но MatLab пишет, что должно быть 2 входных аргумента (как я понял).
Может, дело вовсе не в количестве входных данных...?
Код прилагаю:
%%
plot(t,q_hist,'o'), xlabel = (t); ylabel = (q_hist);
N = 50;
%%
for i = 2:N
model = @(tau, f, q_hist, I1, I2, I3, I4) (q_hist(i)*exp(-(1/tau)) + (1-exp(-1/tau))*(f(1) * I1(i) + f(2) * I2(i) + f(3) * I3(i) + f(4) * I4(i)));
problem = createOptimProblem ('lsqcurvefit', ...
'objective', model, ...
'xdata', t, 'ydata', q_hist, ...
'x0', [1 0.25 0.25 0.25 0.1], ...
'lb',[0 0 0 0 0], ...
'ub', [10000000 1 1 1 1], ...
'options', optimset ('OutputFcn', ...
@curvefittingPlotIterates));
end
%% Solve
for i = 2:N
f = lsqcurvefit(problem);
tau = lsqcurvefit(problem);
end
%%
ms = MultiStart;
[b, fval, exitflag, output, solutions] = run(ms, problem, 20);
Комментарии