- •2. Matlab.
- •2.8. Решение уравнений в Matlab.
- •2.8.1. Решение систем линейных уравнений [3, с.35, 125].
- •2.8.2. Поиск не комплексных корней уравнений (нахождение нулей функций) [1, с. 246; 3, с. 133].
- •2.8.2.1. Задание в функции fzero второго параметра в виде вектора.
- •2.8.2.2. Создание встраиваемой функции.
- •Inline function:
- •Inline function:
- •2.8.2.4. Использование указателя @ при обращении к исследуемой м-функции.
- •2.8.2.5. Обращение к fzero с двумя выходными аргументами.
- •2.8.2.3. Использование анонимной функции.
- •2.8.2.6. Обращение к fzero с тремя выходными аргументами.
- •2.8.3. Вычисление комплексных корней полиномов.
- •2.8.4. Нахождение экстремумов функций.
- •2.8.4.1. Минимизация функции одной переменной.
- •2.8.4.2.Минимизация функции нескольких переменных.
- •1.5000 0.5000 % Координаты искомой точки минимума
- •2.8.5.Обращение к файлам функций при решении и оптимизации уравнений [1, с. 243].
- •2.8.6. Решение систем нелинейных уравнений [1, с. 733].
2.8.2.6. Обращение к fzero с тремя выходными аргументами.
Программирование собственных приложений с использованием вычислительных функций требует получения сведений о варианте завершения вычислительного процесса, чтобы корректно выполнить переход к соответствующему блоку алгоритма. Тогда можно использовать обращение к fzero с тремя выходными аргументами.
Например:
» [xl, f1, flag] = fzero(fun, 0.1);
Такое обращение позволяет выбрать дальнейшие действия в зависимости от содержимого переменной flag. Положительное значение flag свидетельствует об успешном завершении вычислительного процесса. Отрицательное значение - либо не удалось определить интервал со сменой знака функции на границах, либо в процессе вычислений получилось комплексное значение, бесконечность, или выполнена операция с неопределенным результатом, например, деление нуля на ноль.
Функция fzero, так же как и большинство вычислительных функций MATLAB, допускает управление многими параметрами заложенных в ней алгоритмов[1].
2.8.3. Вычисление комплексных корней полиномов.
Функция fzero находит нули только вещественно-значных функций одной вещественной переменной. Однако часто бывает необходимо найти комплексные корни вещественнозначных функций, особенно в случае многочленов.
Для этой цели в системе MATLAB существует специальная функция roots, аргументом которой должен быть массив коэффициентов многочлена. Например, для многочлена х^4- Зх^3 + 3х^2- Зх + 2, имеющего два вещественных (1 и 2) и два комплексных корня (i и -i), нужно сначала сформировать вектор его коэффициентов при неизвестном х и затем вызвать функцию roots:
Функция polyval предназначена для вычисления значения полинома при подстановке в него вместо неизвестного величины корня или вектора корней (см. рисунок слева). Учитывая, что MATLAB вычисляет корни с точностью до 14-15 знаков после запятой в десятичном числе, то чтобы увидеть, с какой погрешностью выполнен расчет, необходимо при подстановке корня в функцию polyval сделать ошибку в 14 или 15 знаке после запятой в его значении и по полученной величине функции оценить точность вычислений.
Второй аргумент функции polyval может быть матрицей; в этом случае производится поэлементное вычисление значений полинома и результат представляет матрицу того же размера, что и аргумент.
2.8.4. Нахождение экстремумов функций.
Вычислительные функции MATLAB позволяют найти точки минимума функции одной или нескольких переменных. Результатом является локальный минимум. Для определения точек локального максимума нет специальной функции, поскольку достаточно искать минимум функции с обратным знаком.
2.8.4.1. Минимизация функции одной переменной.
Поиск
локального минимума функции одной
переменной на некотором отрезке
осуществляется при помощи функции
fminbnd,
использование которой схоже
с fzero.
Например, чтобы найти локальные минимумы
функции
,
необходимо сначала создать файл этой функции или использовать inline для создания ее описания (см. раздел 2.8.2.2), а затем построить график с помощью функции fplot, чтобы определить точки, вокруг которых будут определяться минимумы:
Здесь ff – M-файл следующего содержания:
function r=ff(x)
r=exp(x.^2)+sin(3*pi.*x); . Второй и третий аргументы функции fminbnd задают интервал поиска. Значение переменной xMAX равно максимуму в интервале поиска. Если запрашивать функцию с двумя выходными параметрами, то во втором параметре будет содержаться значение функции в минимуме.
Так же, как и fzero, функция fminbnd может быть вызвана с тремя выходными аргументами:
» [х2, f, flag] = fminbnd(@ftest, -0.5, 0) ;
Аргумент flag может принимать три значения: положительное—- при нахождении локального минимума, нулевое— при достижении максимального количества вызовов исследуемой функции и отрицательное— в случае расходимости вычислительного процесса.
ПРИМЕЧАНИЕ: функция fminbnd заменила функцию fmin, которая использовалась в старых версиях MATLAB.
Искать минимум функции можно также с применением fminsearch, рассматриваемой далее, которая предназначена для минимизации функции одной и нескольких переменных.
