- •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.5.Обращение к файлам функций при решении и оптимизации уравнений [1, с. 243].
2.8.6. Решение систем нелинейных уравнений [1, с. 733].
Выполняется с использованием функции fsolve, входящей в “инструмент” Optimization Toolbox. Используется метод “наименьших квадратов” (least squares method). Общий вид системы уравнений задается нелинейной вектор-функцией: F(x) = 0, в которой и F и х могут быть, как векторами, так и матрицами:
F1 (x1, x2, ... , xn) = 0;
F2 (x1, x2, ... , xn) = 0;
…
Fm (x1, x2, ... , xn) = 0; .
Первым аргументом fsolve является указатель на файл-функцию (или ее имя), вычисляющую F(x). Данная файл-функция принимает на входе вектор аргументов и возвращает вектор значений F(x). Начальное приближение х0 указывается во втором аргументе fsolve.
В достаточно общем случае вызов fsolve выглядит следующим образом:
х = fsolve(fun, x0, options, P1, Р2, ...) ,
где options - управляющая структура, а необязательные аргументы P1, P2 ... есть значения параметров, от которых может зависеть левая часть системы уравнений. Если в списке входных аргументов fsolve всего два входных аргумента, то в командное окно выводится предупреждение, связанное с тем, что в версии 2.0 Optimization Toolbox алгоритм fsolve был модифицирован. Для подавления этого предупреждения следует вызывать fsolve с управляющей структурой, которую можно сформировать, например, со всеми принятыми по умолчанию настройками при помощи optimset [1, глава 8]:
х = fsolve(fun, x0, optimset('fsolve'))
Функция fsolve может быть вызвана с несколькими выходными аргументами. Второй выходной аргумент содержит значения вектор-функции для найденного решения, а третий — сведения о работе алгоритма. Отрицательное значение третьего аргумента говорит о том, что решение не найдено из-за расходимости вычислительного процесса. Ноль означает досрочное прерывание вычислений при достижении максимально допустимого числа итераций или обращений к вектор-функции системы. Нахождение решения с заданной точностью подтверждается положительным значением третьего выходного аргумента fsolve.
Пример программирования (составления М-функции) левых частей двух нелинейных уравнений с двумя неизвестными (без приравнивания их нулю) :
function F = mysys(x)
F(l) = х(1)*(2 - х(2)) - cos(x(1))*exp(x(2));
F(2) = 2 + х(1) - х(2) - cos(x(1)) - ехр(х(2));
Указание начальной точки (0, 0) в функции fsolve приводит к следующему результату:
» [х, f] = fsolve(@mysys, [0 0], optimset('fsolve'))
Optimization terminated successfully:
Relative function value changing by less than OPTIONS.TolFun
x =
0.7391 0.4429
f =
1.0е-011 *
-0.4702 -0.6404
В этом примере число неизвестных совпадает с числом уравнений в системе, но алгоритмы, заложенные в функцию fsolve, допускают несовпадение числа неизвестных и уравнений [1, с. 735].
(Информация “к сведению” (не входит в программу курса):
Алгоритмы, реализованные в функции fsolve, основаны на минимизации некоторых критериев, связанных с исходной системой нелинейных уравнений, в частности, суммы квадратов компонент вектор-функции. Решением считается та точка, в которой значение критерия мало, что не гарантирует существования корней системы в окрестности найденной точки. В этом легко убедиться на простом примере : если применить функцию fsolve для системы, состоящей из одного уравнения х2 + 10-6 =0 и не имеющего вещественных корней. Так, если для сравнения использовать функцию fzero с некоторым начальным приближением к корню, то она будет пытаться отделить интервал, на границах которого непрерывная функция х2 + 10-6 имеет разные знаки (для обеспечения гарантии существования корня). Но здесь такого интервала не существует и работа fzero прерывается.
Одним из алгоритмов функции fsolve является метод наименьших квадратов [1, с. 735], который также используется для решения ряда оптимизационных задач, в частности, подбора параметров. )
Оглавление
2. MATLAB. 1
2.8. Решение уравнений в Matlab. 1
2.8.1. Решение систем линейных уравнений [3, с.35, 125]. 1
2.8.2. Поиск не комплексных корней уравнений 1
(нахождение нулей функций) [1, с. 246; 3, с. 133]. 1
2.8.2.1. Задание в функции fzero второго параметра в виде вектора. 4
2.8.2.2. Создание встраиваемой функции. 4
2.8.2.3. Использование анонимной функции. 5
2.8.2.4. Использование указателя @ при обращении к исследуемой М-функции. 6
2.8.2.5. Обращение к fzero с двумя выходными аргументами. 7
2.8.2.6. Обращение к fzero с тремя выходными аргументами. 7
2.8.3. Вычисление комплексных корней полиномов. 7
2.8.4. Нахождение экстремумов функций. 8
2.8.4.1. Минимизация функции одной переменной. 8
2.8.4.2.Минимизация функции нескольких переменных. 9
2.8.5.Обращение к файлам функций при решении и оптимизации уравнений [1, с. 243]. 11
2.8.6. Решение систем нелинейных уравнений [1, с. 733]. 11
Литература.
Ануфриев И. Е., Смирнов А. Б., Смирнова Е. Н. MATLAB 7. Наиболее полное руководство.- СПб.: БХВ-Петербург, 2005. - 1104 с: ил.
Matlab7NaiboleePolnoeRukovodstvo.djvu, глава2, с. 86; глава 6, с. 286.
Иллюстрированный самоучитель по MatLab 6 (23 урока). Урок 16.
http://www.radiomaster.ru/cad/matlab/glava5/index1.php
Н.Н.Мартынов, А.П.Иванов. MATLAB 5.x. Вычисления, визуализация, программирование.- М.: КУДИЦ-ОБРАЗ, 2002.-336с. (См. с.35, с.125)
Гаспарян О.Н. MATLAB: Учебное пособие. - Баку: ГИУ Армении, 2005. 143 с. (PDF формат)
(См. с. 28)
