Чтение онлайн

ЖАНРЫ

Maple 9.5/10 в математике, физике и образовании

Дьяконов Владимир Павлович

Шрифт:

Функция extrema дает неплохие результаты при поиске экстремумов простых аналитических функций, не имеющих особенностей. Однако при анализе сложных функций, содержащих функции со сравнением аргумента (например, abs(x), signum(x) и др.) функция extrema часто отказывается работать и просто повторяет запись обращения к ней.

5.1.6. Поиск минимумов и максимумов аналитических функций

Часто нужно найти минимум или максимум заданной функции. Для поиска минимумов и максимумов выражений (функций) expr служат функции стандартной библиотеки:

minimize(expr, opt1, opt2, ..., optn)

maximize(expr, opt1, opt2, ..., optn)

Эти

функции могут разыскивать максимумы и минимумы для функций как одной, так и нескольких переменных. С помощью опций opt1, opt2, …, optn можно указывать дополнительные данные для поиска. Например, параметр 'infinity' означает, что поиск минимума или максимума выполняется по всей числовой оси, а параметр location (или location=true) дает расширенный вывод результатов поиска — выдается не только значение минимума (или максимума), но и значения переменных в этой точке.

Примеры применения функции minimize приведены ниже (файл minmax):

> minimize(х^2-3*х+y^2+3*y+3);

> minimize(х^2-3*х+y^2+3*y+3, location);

> minimize(х^2-3*х+y^2+3*y+3, х=2..4, y=-4..-2, location);

– 1, {[{х = 1, y = -2}, -1]}

> minimize(х^2+y^2,х=-10..10,y=-10..10);

0

> minimize(х^2 + y^2,х=-10..10,y=-10..10, location);

0, {[y = 0, х = 0},0]}

> minimize(abs(х*ехр(-х^2)-1/2), х=-4..4);

½-½√2 е(-1/2)

> minimize(abs(х*ехр(-х^2)-1/2), х=-4..4, location=true);

Приведем подобные примеры и для функции поиска максимума — maximize:

> maximize(х*ехр(-х));

е(-1)

> maximize(х*ехр(-х),location);

е(-1), {[{х=1}, е(-1)] }

> maximize(sin(х)/х,х=-2..2,location);

1, {[{x=0}, 1]}

> maximize(exp(-х)*sin(y),х=-10..10,y=-10..10, location);

Обратите внимание на то, что в предпоследнем примере Maple 9.5 выдал верный результат, тогда как Maple 8 в этом примере явно «оскандалился» и вместо максимума функции sin(x)/x, равного 1 при x=0, выдал результат в виде бесконечности:

∞, {[{x =0}, ∞]}

Эта ситуация кажется более чем странной, если учесть, что в этом примере еще Maple 6 давал правильный результат. Это еще один пример, показывающий, что в отдельных случаях Maple может давать неверные результаты.

Применим функцию minimize для поиска минимума тестовой функции Розенброка. Рис. 5.2 показывает, что minimize прекрасно справляется с данной задачей. На рис. 5.2 представлено также построение функции Розенброка, хорошо

иллюстрирующее ее особенности.

Рис. 5.2. Поиск минимума функции Розенброка и построение ее графика

Трудность поиска минимума функции Розенброка связана с ее характерными особенностями. Из рис. 5.2 видно, что эта функция представляет собой поверхность типа «глубокого оврага с почти плоским дном», в котором и расположена точка минимума. Такая особенность этой функции существенно затрудняет поиск минимума. То, что система Maple 9.5 справляется с данной тестовой функцией, вовсе не означает, что трудности в поиске минимума или максимума других функций остаются позади.

5.1.7. Поиск минимума функций с ограничениями методом выпуклого программирования

Часто необходимо найти минимум некоторой функции при наличии ограничений на значения независимых переменных. Ниже рассматривается нетривиальная задача такого рода, решаемая методом выпуклого программирования (разновидность нелинейного программирования) — файл minp.

Пусть надо найти минимум функции f:=х1^2+(х2–1)^2 при следующих ограничениях: 2x1+х2>=7, x1+2*х2>=5, x1>=0 и х2>=0. Составим на основе этого функцию Лагранжа:

> F:=x1^2+(х2-1)^2+y1*(7-2*х1-х2)+y2*(5-х1-2*х2);

F:= x1² + (х2-1)² + у1(7-2х1-х2) + у2(5-х1-2х2)

и найдем ее частные производные:

> F1:=diff(F,x1);

F1:=2x1-2y1-y2

> F2:=diff(F,x2);

F2:=2x2 -2-y1-2y2

> F3:=dxff(F,y1);

F3:=7-2x1-x2

> F4:=diff(F,y2);

F4:=5-x1-2x2

Соберем воедино все равенства и неравенства этой задачи:

> eq:={Fl=u1,F2=u2,x1*F1,x2*F2,F3+v1,F4+v2,y1*F3,y2*F4,

x1>=0,x2>=0,y1>=0,y2>=0,u1>=0,u2>=0,v1>=0,v2>=0};

eq := {2x1-2y1-y2=u1, 2x2-2-y1-2y2=u2, 7-2x1-x2+v1, 5-x1-2x2+v2, y1(7-2x1-x2), y2(5-x1-2x2), x1(2x1-2y1-y2), x2(2x2-2-y1-2y2), 0≤x1, 0≤x2, 0≤y1, 0≤y2,0≤u1,0≤v1, 0≤v2, 0≤u2}

Первые шесть равенств соответствуют теореме Куна-Такера о том, что в точке минимума существуют целые неотрицательные числа u1, u2, v1 и v2 для которых выполняются эти шесть равенств (обратите внимание на то, что запись только левой части равенства означает, что она приравнивается к 0). Теперь с помощью функции solve можно найти решение данной задачи:

> solve(eq,{x1,х2,y1,y2,u1,u2,v1,v2});

Таким образом, на указанном множестве функция достигает минимума в точке (12/5, 11/5).

5.1.8. Анализ функций на непрерывность

Для исследования функций на непрерывность (отсутствие разрывов) Maple имеет функцию iscont, записываемую в ряде форм:

iscont(expr, х = а..b)

iscont(expr, х = а..b, 'closed')

Поделиться с друзьями: