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

UptoLike

% Проверка на равенство f(x) нулю в center
if feval(fname, center) == 0
break % найден точный корень, дальше делить нет смысла
end
% Выбор нужной половины отрезка, на границах которой
% f(x) принимает значения разных знаков
if feval(fname, left)*feval(fname, center) < 0
right = center;
else
left = center;
end
end
% Приближенное значение корня равно координате любой границы
% последнего полученного отрезка
root = center;
%
% Файл-функция half с переменным числом аргументов
%
function [root, varargout] = half(fname, left, right, varargin)
% Файл-функция
находит корень уравнения f(x)=0
% методом половинного деления
% Использование
% root = half(fname, left, right, epsilon)
% fname - имя файл-функции, вычисляющей f(x)
% left, right - левая и правая границы отрезка, на
% котором находится корень
% epsilon - точность вычислений, если не задана, то
% по умолчанию 1.0e-03
% [root, Fun] = half(fname, left, right, epsilon)
% Fun = f(root)
% Если число входных аргументов равно четырем, то последний
% аргумент содержит точность вычислений, а если трем, то
точность
% устанавливается по умолчанию 1.0e-03
switch nargin
case(4)
epsilon = varargin{1};
case(3)
epsilon = 1.0e-03;
otherwise
error('Может быть три или четыре входных аргумента')
end
  % Проверка на равенство f(x) нулю в center
  if feval(fname, center) == 0
     break % найден точный корень, дальше делить нет смысла
  end
  % Выбор нужной половины отрезка, на границах которой
  % f(x) принимает значения разных знаков
  if feval(fname, left)*feval(fname, center) < 0
     right = center;
  else
     left = center;
  end
end
% Приближенное значение корня равно координате любой границы
% последнего полученного отрезка
root = center;


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

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

% Если число входных аргументов равно четырем, то последний
% аргумент содержит точность вычислений, а если трем, то точность
% устанавливается по умолчанию 1.0e-03
switch nargin
case(4)
  epsilon = varargin{1};
case(3)
  epsilon = 1.0e-03;
otherwise
  error('Может быть три или четыре входных аргумента')
end