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

UptoLike

Файл-функция, вычисляющая левую часть системы:
function F = largesys(x)
n = length(x);
F = rand(n,1);
F(1) = 2*x(1)^2-x(2)-1;
for i = 2:n-1
F(i) = -x(i-1)+2*x(i)^2-x(i+1)-1;
end
F(n) = -x(n-1)+2*x(n)^2-1;
Файл-функция, вычисляющая левую часть системы и возвращающая
якобиан:
function [F, J] = largesys(x)
n = length(x);
F = rand(n,1);
F(1) = 2*x(1)^2-x(2)-1;
for i = 2:n-1
F(i) = -x(i-1)+2*x(i)^2-x(i+1)-1;
end
F(n) = -x(n-1)+2*x(n)^2-1;
% Если число выходных аргументов более единицы, то требуется найти
% разреженное представление якобиана
if nargout>1
% якобиан является суммой трех матриц J = D+D1+D1'
% Формирование диагонали матрицы D
d = 4*x;
% Инициализация разреженного представления для матрицы D
Diag = sparse(1:n, 1:n, d, n, n);
% Формирование вектора побочной диагонали
d2 = -ones(1,n-1);
% Инициализация разреженного представления для матрицы D1
D1 = sparse(2:n, 1:n-1, d2, n, n);
% Вычисление разреженного якобиана
J = Diag+D1+D1';
end
Файл-программа для решения большой системы нелинейных уравнений:
n = 1000; % число переменных
x0 = ones(1,n); % начальное приближение
% Формирование структуры options
options = optimset('Display', 'iter', 'Jacobian', 'on',...
                  Файл-функция, вычисляющая левую часть системы:

function F = largesys(x)
n = length(x);
F = rand(n,1);
F(1) = 2*x(1)^2-x(2)-1;
for i = 2:n-1
  F(i) = -x(i-1)+2*x(i)^2-x(i+1)-1;
end
F(n) = -x(n-1)+2*x(n)^2-1;

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

function [F, J] = largesys(x)
n = length(x);
F = rand(n,1);
F(1) = 2*x(1)^2-x(2)-1;
for i = 2:n-1
   F(i) = -x(i-1)+2*x(i)^2-x(i+1)-1;
end
F(n) = -x(n-1)+2*x(n)^2-1;
% Если число выходных аргументов более единицы, то требуется найти
% разреженное представление якобиана
if nargout>1
   % якобиан является суммой трех матриц J = D+D1+D1'
   % Формирование диагонали матрицы D
   d = 4*x;
   % Инициализация разреженного представления для матрицы D
   Diag = sparse(1:n, 1:n, d, n, n);
   % Формирование вектора побочной диагонали
   d2 = -ones(1,n-1);
   % Инициализация разреженного представления для матрицы D1
   D1 = sparse(2:n, 1:n-1, d2, n, n);
   % Вычисление разреженного якобиана
   J = Diag+D1+D1';
end

     Файл-программа для решения большой системы нелинейных уравнений:

n = 1000; % число переменных
x0 = ones(1,n); % начальное приближение
% Формирование структуры options
options = optimset('Display', 'iter', 'Jacobian', 'on',...