Решение задач оптимального управления с использованием математической системы MATLAB и пакета имитационного моделирования SIMULINK. Сивохин А.В - 59 стр.

UptoLike

% Задание ограничений
c(1) = x(1)^2+x(2)^2-1; % ограничения в виде неравенства
% Правая часть ограничений-равенств является пустым массивом,
% поскольку данных ограничений нет
ceq = [];
Файл-функция, вычисляющая левую часть системы уравнений:
function F = mysys(x)
F(1) = x(1)*(2-x(2))-cos(x(1))*exp(x(2));
F(2) = 2+x(1)-x(2)-cos(x(1))-exp(x(2));
Файл-функция, зависящая от вектора параметров и аргумента:
function y = fitfun(a, x)
y = a(1)*exp(x*a(2))+a(3)*sin(a(4)*x);
Файл-программа для решения задачи о подборе параметров:
% Ввод данных
xdat = (0:0.1:1);
ydat = [1.1 2.1 3.5 3.9 4.3 4.6 4.2 4.0 3.3 2.2 2.1];
% Отображение данных на графике
plot(xdat, ydat, 'o');
grid on
% Выбор начального приближения
a0 = [0.0 0.0 4.0 1.0];
% Построение графика функции от начального приближения
x = [0:0.05:1];
ya0 = fitfun(a0, x);
hold on;
plot(x, ya0, '--b')
% Задание границ области параметров
LB = [-10 -10 -10 -10];
UB = [10 10 10 10];
% Подбор параметров, точка с запятой в конце команды не ставится для
% вывода результата в командное окно
a = lsqcurvefit('fitfun',a0, xdat, ydat, LB, UB)
% Визуализация функции с найденными значениями параметров
ya = fitfun(a,x);
Hfit = plot(x, ya);
set(Hfit, 'LineWidth', 2)
legend('данные', 'начальное приближение
', 'результат', 4)
% Задание ограничений
c(1) = x(1)^2+x(2)^2-1; % ограничения в виде неравенства
% Правая часть ограничений-равенств является пустым массивом,
% поскольку данных ограничений нет
ceq = [];

    Файл-функция, вычисляющая левую часть системы уравнений:


function F = mysys(x)
F(1) = x(1)*(2-x(2))-cos(x(1))*exp(x(2));
F(2) = 2+x(1)-x(2)-cos(x(1))-exp(x(2));

    Файл-функция, зависящая от вектора параметров и аргумента:

function y = fitfun(a, x)
y = a(1)*exp(x*a(2))+a(3)*sin(a(4)*x);

    Файл-программа для решения задачи о подборе параметров:

% Ввод данных
xdat = (0:0.1:1);
ydat = [1.1 2.1 3.5 3.9 4.3 4.6 4.2 4.0 3.3 2.2 2.1];
% Отображение данных на графике
plot(xdat, ydat, 'o');
grid on
% Выбор начального приближения
a0 = [0.0 0.0 4.0 1.0];
% Построение графика функции от начального приближения
x = [0:0.05:1];
ya0 = fitfun(a0, x);
hold on;
plot(x, ya0, '--b')
% Задание границ области параметров
LB = [-10 -10 -10 -10];
UB = [10 10 10 10];
% Подбор параметров, точка с запятой в конце команды не ставится для
% вывода результата в командное окно
a = lsqcurvefit('fitfun',a0, xdat, ydat, LB, UB)
% Визуализация функции с найденными значениями параметров
ya = fitfun(a,x);
Hfit = plot(x, ya);
set(Hfit, 'LineWidth', 2)
legend('данные', 'начальное приближение', 'результат', 4)