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

UptoLike

dist = sqrt((Xpoint-Xcircle(i))^2+(Ypoint-Ycircle(i))^2);
% Сравнение расстояния с радиусом круга
if dist <= Rcircle(i)
where = 1; % Требуемый круг найден
% Увеличение числа найденных кругов на единицу
NC = NC + 1;
% Сохранение номера круга в массиве Nums
Nums(NC) = i;
end
end
% Запись полученных результатов в выходной массив ячеек в зависимости
% от числа выходных аргументов, с которыми была вызвана point
switch nargout
case(2)
% Было указано два выходных аргумента, следовательно, надо записать
% только число кругов в первую ячейку varargout
varargout{1} = NC
case(3)
% Было указано три выходных аргумента, следовательно, надо записать
% число кругов и массив с их номерами в первые две ячейки varargout
varargout{1} = NC;
varargout{2} = Nums;
end
%
% Файл-функция half для решения уравнений методом половинного деления
%
function root = half(fname, left, right, epsilon)
% Файл-функция находит корень уравнения f(x)=0
% методом половинного деления
% Использование
% root = half(fname, left, right, epsilon)
% fname -
имя файл-функции, вычисляющей f(x)
% left, right - левая и правая границы отрезка
% epsilon - точность вычислений
% Проверка значений функции на границах отрезка
if feval(fname, left)*feval(fname, right) > 0
error('Одинаковые знаки функции на границах отрезка')
end
% Деление отрезка пополам
while (right - left) > epsilon
center = (right + left)/2; % вычисление середины
  dist = sqrt((Xpoint-Xcircle(i))^2+(Ypoint-Ycircle(i))^2);
  % Сравнение расстояния с радиусом круга
  if dist <= Rcircle(i)
    where = 1; % Требуемый круг найден
    % Увеличение числа найденных кругов на единицу
    NC = NC + 1;
    % Сохранение номера круга в массиве Nums
    Nums(NC) = i;
  end
end
% Запись полученных результатов в выходной массив ячеек в зависимости
% от числа выходных аргументов, с которыми была вызвана point
switch nargout
case(2)
  % Было указано два выходных аргумента, следовательно, надо записать
  % только число кругов в первую ячейку varargout
  varargout{1} = NC
case(3)
  % Было указано три выходных аргумента, следовательно, надо записать
  % число кругов и массив с их номерами в первые две ячейки varargout
  varargout{1} = NC;
  varargout{2} = Nums;
end


%
% Файл-функция half для решения уравнений методом половинного деления
%

function root = half(fname, left, right, epsilon)
% Файл-функция находит корень уравнения f(x)=0
% методом половинного деления
% Использование
% root = half(fname, left, right, epsilon)
% fname - имя файл-функции, вычисляющей f(x)
%     left, right - левая и правая границы отрезка
%     epsilon - точность вычислений

% Проверка значений функции на границах отрезка
if feval(fname, left)*feval(fname, right) > 0
   error('Одинаковые знаки функции на границах отрезка')
end
% Деление отрезка пополам
while (right - left) > epsilon
   center = (right + left)/2; % вычисление середины