- •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.4.2.Минимизация функции нескольких переменных.
Минимизация функции нескольких переменных является более сложной задачей по сравнению с минимизацией функции одной переменной, однако комбинированный адаптивный алгоритм функции fminsearch позволяет во многих случаях успешно решить эту задачу. Функция fminsearch требует указания начального приближения для искомой точки минимума, которое в случае функции одной переменной должно быть числом, а для функции нескольких переменных — вектором.
Так, например, для функции ff из предыдущего примера можно найти первый и второй минимумы :
Если переменных несколько, то также графически находятся начальные значения (например, с помощью графиков, отображающих линии уровня: meshgrid), а затем создается файл-функция, вычисляющая значения искомой функции, причем аргументом файл-функции должен быть вектор, первый элемент которого соответствует переменной х, а второй — у. Так, например, для минимизации функции двух переменных f(x, y) = sin(x) sin(y) файл будет иметь вид:
function f = ftest2(v)
x = v(1) ;
y = v(2);
f = sin(pi*x).*sin(pi*y);
Для нахождения локального минимума вызывается fminsearch с двумя входными аргументами - именем файл-функции и начальным приближением и выходным аргументом - вектором с координатами искомой точки минимума:
»М= fminsearch('ftest2', [1.4, 0.6])
М =
1.5000 0.5000 % Координаты искомой точки минимума
Для получения не только вектора с координатами точки минимума, но и значения функции следует вызвать fminsearch с двумя выходными аргументами:
>> [М, f] = fminsearch(@ftest2, [1.4, 0.6])
М=
1.5000 0.5000
f =
-1.0000
Обращение к fminsearch с третьим дополнительным выходным аргументом
flag :
» [М, f, flag] = fminsearch(@ftest2, [1.4, 0.6]);
Такое обращение позволяет записать в третий выходной параметр информацию о причине останова вычислительного алгоритма. Смысл его значений тот же, что и для функции fminbnd, рассмотренной в предыдущем разделе 2.8.4.1.
Исследуемая функция может зависеть от произвольного числа переменных n. В этом случае входной аргумент argvect соответствующей файл-функции и начальное приближение должны быть векторами длины n.
Вместо программирования файл-функции в М-файле можно использовать анонимную функцию поскольку входным аргументом может быть вектор; поэтому следующие команды приведут к поиску минимума:
» fun = @(v)sin(pi*v(l)).*sin(pi*v(2));
» [М, f] = fminsearch(fun, [1.4, 0.6])
М =
1.5000 0.5000
f =
-1.0000
Примечания: 1. Если использовать Optimization Toolbox [1, глава 16], то есть возможность использовать дополнительные средства минимизации функций. Например, fminunc можно использовать для поиска минимума функции нескольких переменных.
2. Функции fzero, fminbnd и fminsearch допускают определение дополнительных параметров для управления вычислительным процессом и контроля за ним, воспользовавшись функцией optimset. Это новый тип данных (не числовой массив, а структура options) [1, глава 8].
3. Более подробно о функции fplot см.[1, с. 262]. В функции fplot может быть третий входной аргумент для задания в апострофах типа линии, маркера, цвета также, как это было в функции plot [1, с. 225].
