• Регистрация
Н/Д
Н/Д 0.00
н/д

Решение задачи нелинейной оптимизации

11.02.2022

Добрый день! 

Подскажите пожалуйста, каким методом можно решить оптимизационную задачу, если целевая функция использует 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);

Теги

    11.02.2022

    Ответы