Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Matlab_лек.7_Реш-ие ур-ий_.docx
Скачиваний:
4
Добавлен:
01.03.2025
Размер:
183 Кб
Скачать
☆

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].