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

ЖАНРЫ

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

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

Шрифт:

Последняя функция — standartize(C) — конвертирует список уравнений (неравенств) в неравенства типа «меньше или равно»:

> standardize({2*х+3*у<=5,3*х+5*у=15});

{2 х + 3 y 5, 3х + 5у 15, -3х -5y – 15}

6.6. Новый пакет оптимизации Optimization в Maple 9.5

В систему Maple 9.5 был добавлен новый пакет оптимизации Optimization,

основанный на новейших существенно улучшенных алгоритмах оптимизации. С его помощью можно решать не только задачи линейного, но и квадратичного и нелинейного программирований с повышенной степенью визуализации.

6.6.1. Доступ к пакету Optimization и его назначение

Пакет оптимизации Optimization вызывается как обычно:

> with(Optimization);

[ImportМPS, Interactive, LPSolve, LSSolve, Maximize, Minimize, NLPSolve, QPSolve]

Warning, the name changecoords has been redefined

Для получения справки по пакету надо исполнить команду:

> help(Optimization);

Пакет использует при вычислениях алгоритмы группы NAG, которые считаются наиболее эффективными при реализации численных методов вычислений, в частности реализующих алгоритмы оптимизации. Пакет вводит 8 функций. Две из них это переопределенные функции вычисления максимума Maximize и минимума Minimize. Кроме того, пакет имеет 4 решателя уравнений с заданными ограничениями, реализующих следующие методы:

• LPSolve — линейное программирование;

• LSSolve — улучшенная реализация метода наименьших квадратов;

• QPSolve — квадратичное программирование;

• NLPSolve — нелинейное программирование.

Функция ImportMPC обеспечивает ввод данных для оптимизации из файла, а функций Interactive позволяет работать с интерактивным Maplet-окном для оптимизации.

С пакетом Optimization можно познакомиться по его справке. В ее разделе Examples есть довольно обширный документ с примерами применения пакета — дополнительными к тем, которые даются к функциям пакета в справке. Начало этого документа представлено на рис. 6.3. В нем представлены основные задачи, решаемые пакетом Optimization — линейное, квадратичное и нелинейное программирование, а также приближение данных и функциональных зависимостей методом наименьших квадратов (нелинейная регрессия).

Рис. 6.3. Начало документа с примерами применения пакета Optimization

6.6.2. Работа с функциями Minimize и Maximize

Функции Minimize и Maximize служат для поиска минимумов и максимумов математических выражений с учетом ограничений самыми современными численными методами. Функции записываются в виде:

Minimize(obj [, constr, bd, opts])

Minimize(opfobj [, ineqcon, eqcon, opfbd, opts])

Maximize(obj [, constr, bd, opts])

Maximize(opfobj [, ineqcon, eqcon, opfbd, opts])

Параметры функций следующие:

• obj — алгебраический объект, целевая функция;

• constr — список с ограничивающими условиями;

• bd — последовательность вида name=range, задающая границы для одной или более переменных;

• opts — равенство или равенства вида option=value, где option одна из опции feasibilitytolerance, infinitebound, initialpoint, iterationlimit или optimalitytolerance, специфицированных в команде Minimize или Maximize.

• opfobj — процедура, целевая функция;

• ineqcon — множество или список процедур с ограничениями типа

неравенств;

• eqcon — множество или список процедур с ограничениями типа равенств;

• opfbd — последовательность пределов; границы для всех переменных; Примеры применения этих функций представлены ниже:

> Maximize(sin(х)/х);

[1., [х=2.93847411867272567 10– 11]]

> Minimize(х^2+у^2);

[0., [х=0., у=0.]]

> Minimize(sin(х)/х, initialpoint={x=5});

[-0.217233628211221636 , [х=4.49340945792364720 ]]

> Maximize(sin(x*y*z));

[1., [x=1.16244735150962364, z=1.16244735150962364, y=1.16244735150962364]]

> Minimize(2*х+3*y, {3*х-y<=9, х+y>=2}, assume=nonnegative);

[4., [х=2., y=0.]]

Из этих примеров видно, что результаты вычислений представляются в виде чисел с плавающей точкой с так называемой двойной точностью (правильнее было бы сказать с двойной длиной или разрядностью). При вычислениях используются алгоритмы группы NAG и решатели, описанные ниже.

6.6.3. Линейное программирование — LPSolve

Для решения задач линейного программирования в пакете Optimization введена функция:

LPSolve(obj [, constr, bd, opts])

Она имеет следующие параметры:

• obj — алгебраическое выражений, целевая функция;

• constr — множество или список линейных ограничений;

• bd — последовательность вида name=range, задающая границы одной или многих переменных;

• opts — равенство или равенства в форме option=value, где option одна из опций assume, feasibilitytolerance, infinitebound, initialpoint, iterationlimit или maximize, специализированных для команды LPSolve.

Пример на решение задачи линейного программирования дан на рис. 6.4. Здесь оптимизируется целевая функция -3x-2у, которая линейно зависит от переменных х и у. В этом примере интересна техника графической визуализации решения.

Рис. 6.4. Пример решения задачи линейного программирования

Эта функция может задаваться также в матричной форме:

LPSolve(c [, lc, bd, opts])

Здесь с вектор, задающий целевую функция, остальные параметры были определены выше. Пример применения функции LPSolve в матричном виде представлен ниже:

> с := Vector([-1,4,-2], datatype=float):

bl := Vector([2,3,1], datatype=float):

bu := Vector([5,8,2.5], datatype=float):

LPSolve(с, [], [bl, bu]);

┌ ┌ ┐┐

│ │ 5. ││

│ │ ││

│2.,│ 3. ││

│ │ ││

│ │ ││

└ └2.50000000000000000┘┘

Ряд других подобных примеров применения функции LPSolve можно найти в справке по этой функции.

6.6.4. Квадратичное программирование — QPSolve

Для реализации квадратичного программирования служит функция

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