§ 1. Математическая система Maple: основные принципы работы
Система Maple (разработана канадской компанией Waterloo Maple Software) на сегодняшнее время является одной из ведущих вычислительных систем компьютерной математики (наряду с MathCad, MathLab, Mathematica). По сути, Maple – это не просто математическая программа, а целый комплекс так называемых пакетов (packages), каждый из которых направлен на решение различных задач линейной алгебры, аналитической геометрии, математического анализа, дифференциальных уравнений, математической статистики, линейного и нелинейного программирования и т.д.
Maple традиционно считают системой аналитико-символьных вычислений (в отличие от нее MathCad – в основном программа для численных расчетов). Это означает, что система в большинстве случаев выдает ответ на решение задачи в самом общем – символьном виде. Maple одна из самых надежных идостоверных систем компьютерной математики. Надежных – в смысле высокой достоверности и точности полученных результатов при самых сложных символьных вычислениях.
Особенно эффективно использование Maple при обучении математике. Высочайший «интеллект» этой системы символьной математики объединяется в ней с мощными средствами математического численного моделирования и возможностями графической визуализации решений.
Maple – интегрированная система. Она объединяет в себе:
- мощный язык программирования, основанный на языке С++ (он же язык для интерактивного общения с системой);
- редактор для подготовки и редактирования документов и программ;
- современный многооконный пользовательский интерфейс с возможностью работы в диалоговом режиме;
- мощную справочную систему [меню Help, вкладки Introduction (общая справочная система), Topic Search… (поиск справки по какому-то определенному разделу или команде), Glossary (глоссарий)];
- ядро алгоритмов и правил символьных и аналитических преобразований математических выражений;
- численный и символьный процессоры;
- систему диагностики ошибок при вычислениях и преобразованиях;
- библиотеки встроенных и дополнительных процедур и функций;
- пакеты (packages) внешних функций для решения различного рода задач и поддержи других языков программирования и программ.
Рассмотрим кратко основные принципы работы в Maple. Более подробную информацию можно взять в [1, 9, 12, 13], а также на многочисленных сайтах, посвященных этой системе.
|
Основой для работы с символьными преобразованиями в Maple является ядро системы. Оно содержит сотни базовых функций и алгоритмов численных и символьных преобразований. В ядре имеются также библиотека операторов, команд и специально подключаемые пакеты (packages).
При первоначальном запуске появляется рабочее окно программы Maple (см. рис. 1.1).
Рис. 1.1.
В некоторых новых версиях программы оно может несколько отличаться от этого (в данном пособии речь идет о версии Maple 12, большинство примеров и описаний идут корректно на версиях Maple 10 и Maple 11). Рабочее окно программы состоит из следующих элементов:
1) основного (главного) меню (вкладки File, Edit, View, Insert, Format, Spreadsheet, Window, Help);
2) панели главных инструментов;
3) контекстной панели инструментов;
4) рабочей области (окно ввода и редактирования документов).
Рабочий лист (worksheet) среды является основным документом, в котором вводятся команды пользователя и в который выдаются результаты работы.
|
В рабочем листе Maple выделяются области ввода и области вывода. В области ввода пользователем вводятся команды (более подробное описание видов команд смотри далее), а также комментарии и текстовая информация. В полях вывода отображаются результаты выполнения введенных команд, включая сообщения об ошибках и графика. Комментарии и текстовая информация ядром Maple не обрабатываются и предназначены только для разработчиков и пользователей программ.
Основной режим работы системы Maple – командно-диалоговый режим. Это означает, что пользователь на запрос системы
[ >
должен ввести команды, понятные процессору Maple. Признаком окончания ввода команды служит символ точка с запятой (;) (результат действия процессора и вычисления будет выведен на экран) или символ двоеточие (:) (вычисления не будут выведены на экран, данный символ используется как знак разделителя при записи некоторых команд в одной строке).
Область ввода и соответствующая ей область вывода называются группой вычислений. На рабочем листе она отмечается квадратной скобкой слева. В группе вычислений может содержаться несколько областей ввода и вывода: все команды и операторы в областях ввода одной группы вычислений обрабатываются системой за одно обращение по нажатию клавиши <Enter>.
Maple имеет следующие основные виды команд:
1) оператор присваивания. Имеет следующий синтаксис (правило описания):
[ > имя_переменной:=значение[;\:]
Например,
[ > x:=3; v:=vector([1,2,3]); f(y):=sin(ln(y));
2) вызов процедуры или функции. Имеет следующий синтаксис:
|
[> имя_процедуры(список параметров)[;\:]
или
[> имя_переменной:=имя_функции(список параметров)[;\:]
В следующих строках определены функция , дробно-рациональная функция , процедуры интегрирования функции , дифференцирования и функция упрощения производной от :
[ > restart; f(x):=tan(x); g(x):=int(f(x),x);
[ > h(x):=(x+2)/(x-2); diff(h(x),x); R:=simplify(diff(h(x),x));
Приведем описание некоторых встроенных функций элементарных преобразований, которые нам потребуются в дальнейшем:
restart – “обнуление” значений всех переменных, отмена подключенных пакетов и т.д. (рекомендуется использовать в качестве первой команды рабочего листа);
evalf – преобразования числа в число с плавающей точкой (перевод точного числа в приближенное). Имеет следующий синтаксис:
[> evalf(<выражение>, <кол_цифр>);
[> evalf[<кол_цифр>](<выражение>);
Здесь параметры:
<выражение> – выражение, в котором все числа требуется привести к виду чисел с плавающей точкой;
<кол_цифр> – целое число, указывающее количество значащих цифр для вычислений (необязательный параметр);
Digits – глобальная переменная пакета Maple, значение которой (по умолчанию оно равно 10) показывает количество значащих цифр, выводимых на экран;
% (символ процента) – вывод результата выполнения предыдущей операции;
%% – вывод результата выполнения “предпредыдущей” операции;
# (символ решетка) – использование комментария в программе;
simplify – упростить выражение. Имеет следующий синтаксис:
[> simplify(<выражение>);
С полным списком функций, входящих в ядро Maple, и их обозначениями можно познакомиться, набрав команду inifcn, выделить ее мышкой и нажать кнопку <F1>;
3) подключение специальных пакетов Maple. Подключение пакета осуществляется следующим образом:
[> with(имя_пакета)[;\:]
Например, с помощью следующих команд:
[> restart; with(LinearAlgebra):
[> with(simplex);
в оперативную память загружаются пакет LinearAlgebra, ориентированный на решение задач линейной алгебры, и пакет simplex, предназначенный для решения задач линейного программирования.
Напомним, что при начальном запуске системы в оперативную память загружено только ядро системы. Однако при решении огромного класса задач, требующих сложных расчетов, встроенных процедур и функций ядра не хватает. В состав Maple 12 входит около 80 пакетов. Дадим список наиболее часто используемых пакетов Maple (с полным списком пакетов можно ознакомиться, используя главное меню Help –> вкладка Introduction –> Mathematics… –> Packages…):
· DEtools – решение обыкновенных дифференциальных уравнений и систем в численном и аналитическом видах, представление результатов в виде фазовых портретов, полей направлений, интегральных кривых и т.д.;
· finance – пакет финансовой математики;
· geom3d, geometry – пакеты трехмерной и двумерной евклидовой геометрии;
· LinearAlgebra – линейная алгебра (основной и незаменимый пакет для решения задач линейной и матричной алгебры);
· linalg – линейная алгебра и структуры данных массивов (до версии 6.0 являлся основным пакетом для решения задач линейной алгебры);
· inttrans – интегральные преобразования и их обратные преобразования;
· networks – пакет для работы с графами;
· numapprox – численная аппроксимация;
· Optimization – пакет для решения задач нелинейного программирования;
· plots – пакет для расширения графических возможностей;
· powseries – разложение функций в степенные ряды;
· simplex – пакет для решения задач линейного программирования;
· statistic – пакет для обработки статистических данных;
· sumtools — числовые ряды;
4) вызов справки (или примера) по определенному разделу, процедуре, функции, пакету. Вызов производится следующим образом:
[> help(имя)[;\:]
[> example(имя)[;\:]
§ 2. Применение пакета Maple к решению задач математического анализа
В этом параграфе будет рассмотрено применение Maple к решению часто встречающихся задач математического анализа. В состав ядра Maple входит достаточное количество встроенных процедур и функций [1, 9, 12, 13], ориентированных на решение задач математического анализа. В табл. 2.1 приводится список процедур и функций, которые нам потребуются в дальнейшем.
Таблица 2.1.
Процедура, функция | Назначение процедуры, функции |
plot(f(x),x) | Построение графика функции |
solve(f(x),x) | Решение уравнения , неравенства |
fsolve(f(x),x) | Решение нелинейного уравнения или неравенства |
diff(f(x),x[i]) | Процедура дифференцирования функции по переменной |
int(f(x),x[i]) | Процедура интегрирования функции по переменной |
int(f(x),x=a..b) | Вычисление определенного () или несобственного () интеграла |
piecewise(f1,g1,…,fn,gn) | Определение кусочно-заданной функции в виде |
limit(f(x),x=x0,dir) | Нахождение предела функции в точке , dir - параметр, принимающий значения left (предел слева), right (предел |
Окончание табл.2.1.
справа) | |
discont(f(x),x) | Функция, возвращающая значения , в которых нарушается условие непрерывности функции |
maximized(f(x), x=a..b) minimized(f(x), x=a..b) | Нахождение наибольшего и наименьшего значений функции на отрезке |
ехtrema(f(x),{переменные}) | Нахождение безусловных экстремумов функции нескольких переменных |
ехtrema(f(x),{g(x)}, {переменные}) | Нахождение условных экстремумов функции с условием |
2.1. Дифференциальное исчисление функции одной переменной
Покажем, как применяется аппарат Maple при исследовании функции одной переменной. А график, построенный командой plot, будем использовать в качестве иллюстрации полученных результатов.
Пример 2.1. Провести полное исследование функции . Решение
Рабочий лист в среде Maple имеет следующий вид.
[> restart; f(x):=(3-x)*exp(x); /определяем точки разрыва функции и область значений функции / [> Point_Discont:=discont(f(x),x); E_f:={limit(f(x), x=-infinity), limit(f(x), x=+infinity)}; /проверяем функцию на четность и нечетность с помощью команды evalb/ [> evalb(f(-x)=f(x)); evalb(f(-x)=-f(x)); /функция является функцией общего вида/ /находим уравнение (, ) наклонной или горизонтальной асимптоты с помощью команды limit/ [> k[1]:=limit(f(x)/x, x=-infinity); k[2]:=limit(f(x)/x, x=+infinity); [> b[1]:=limit(f(x)-k[1]*x, x=-infinity); b[2]:=limit(f(x)-k[2]*x, x=+infinity); /график функции имеет горизонтальную асимптоту на / /определяем области знакоположительности (OBlast_ZnakoPol_f) и знакоотрицательности (OBlast_ZnakoOtr_f) функции, а также нули функции/ [> OBlast_ZnakoPol_f:=solve(f(x)>0,x); OBlast_ZnakoOtr_f:=solve(f(x)<0,x); Null_f:=solve(f(x)=0,x); /находим первую производную функции, стационарную точку функции , определяем интервалы возрастания (Interval_Vosrastan) и убывания (Interval_Ubyvan) функции/ [> g(x):=diff(f(x),x); x[0]:=fsolve(g(x)=0,x); [> Interval_Vosrastan:=solve(g(x)>0,x); Interval_Ubyvan:=solve(g(x)<0,x); /находим вторую производную функции, определяем интервалы выпуклости вниз (Interval_Vypuklost_Vnis) и выпуклости вверх (Interval_Vypuklost_Vverh) функции/ [> h(x):=diff(f(x),x$2); x[1]:=fsolve(h(x)=0,x); [> Interval_Vypuklost_Vnis:=solve(h(x)>0,x); Interval_Vypuklost_Vverh:=solve(h(x)<0,x); /строимграфикфункции/ [> plot((3-x)*exp(x),x=-3..4, color=black, thickness=3); |
2.2. Дифференциальное исчисление функции многих переменных
В данном разделе рассмотрим применение аппарата Maple к вычислению частных производных и нахождению экстремумов функции многих переменных. Встроенная в ядро Maple функция дифференцирования diff применима к функции многих переменных . Ее формат для вычисления частной производной () имеет вид:
[> diff(f(x), x1$k1, …, xn$kn);
Пример 2.2. Дана функция . Найти частные производные первого и второго порядков, проверить справедливость равенства смешанных производных второго порядка.
[> z:=cos(x*x+y)-exp(x-y*y); /задаем функцию/ [> dzdx:=diff(z,x); dzdy:=diff(z,y); /вычисляем частные производные первого порядка/ [> d2zdx2:=diff(z,x$2); d2zdy2:=diff(z,y$2); /вычисляем частные производные второго порядка/ [> d2zdxdy:=diff(z,x,y); d2zdydx:=diff(z,y,x); /вычисляем смешанные производные второго порядка/ [> evalb(d2zdxdy=d2zdydx); /проверяем равенство смешанных производных/ |
Безусловные экстремумы функции переменной находятся с помощью встроенной процедуры ехtrema:
[> ехtrema(f(x),{},{переменные});
Однако эта функция, как мы увидим из примера, дает только точки, подозрительные на экстремум. Для точного ответа на вопрос об экстремуме необходимо исследовать функцию с помощью известного критерия Сильвестра.
Пример 2.3. Исследовать на безусловный экстремум функцию
.
Рабочий лист Maple имеет вид:
[> z:=2*x[1]^2-4*x[1]*x[2]+2*x[2]^2-x[1]^4-x[2]^4: [> plot3d(z, x[1]=-2..2, x[2]=-2..2); /строим график целевой функции/ /из графика функции видно, что она имеет две точки максимума/ [> extrema(z,{},{x[1],x[2]}); /вычисляем возможные экстремумы/ [> dzdx1:=diff(z,x[1]); dzdx2:=diff(z,x[2]); /вычисляем частные производные первого порядка/ [> fsolve({dzdx1=0,dzdx2=0},{x[1],x[2]}); /вычисляем точку возможного экстремума, пользуясь необходимым признаком точки экстремума/ [> d2zdx12:=diff(z,x[1]$2); d2zdx22:=diff(z,x[2]$2); d2zdx1dx2:=diff(z,x[1],x[2]); /вычисляем частные производные второго порядка/ [>Gesse:= Matrix(2,2,[[d2zdx12,d2zdx1dx2],[d2zdx1dx2,d2zdx22]]); /строим матрицу Гессе частных производных второго порядка / /Ниже исследуется точка возможного экстремума с помощью критерия Сильвестра/ [> x[1]:=1.414213562: x[2]:=-1.414213562: Gesse; Delta[1]:= Gesse[1,1]; Delta[2]:=Gesse[1,1]*Gesse[2,2]-Gesse[1,2]^2; |
Согласно критерию Сильвестра точка является точкой максимума функции. Вторая точка также является точкой максимума функции (матрица Гессе в ней имеет такой же вид).
Исследуем точку с помощью критерия Сильвестра.
[> x[1]:=0: x[2]:=0: Gesse; Delta[1]:=Gesse[1,1]; Delta[2]:=Gesse[1,1]*Gesse[2,2]-Gesse[1,2]^2; [> restart;z:=2*x[1]^2-4*x[1]*x[2]+2*x[2]^2-x[1]^4-x[2]^4: |
Главный минор матрицы Гессе равен нулю, следовательно, необходимо проводить дополнительные исследования. Ниже показано, что при:
, : ,
: .
В достаточно малой окрестности точки функция меняет свой знак (при этом ), и точка не является точкой экстремума.
[> x[1]:=0: z; solve(z>=0, x[2]); [> x[1]:=x[2]: z; solve(z<0, x[2]); |
Условные экстремумы функции многих переменных находятся с помощью той же процедуры ехtrema, только в фигурных скобках {} указываются ограничения (уравнения связи) на переменные .
Известно, что задача на условный экстремум ставится так: найти точку условного экстремума (максимума или минимума) функции , если на переменные накладываются дополнительные ограничения (уравнения связи): ().
Пример 2.4. Найти точку условного экстремума функции
,
где переменные удовлетворяют уравнениям связи
Решение
Рабочий лист Maple имеет вид:
[> z:=x[1]*x[2]*x[3]; phi[1]:=x[1]+x[2]+x[3]-4; phi[2]:=x[1]*x[2]+x[1]*x[3]+x[2]*x[3]-5; /Находим экстремумы функции с помощью команды ехtrema (заметим, что команда выдает нам только значение экстремума функции)/ [> extrema(z,{phi[1],phi[2]},{x[1],x[2],x[3]}); /С помощью процедуры solve находим точки возможного условного экстремума функции/ [> solve({z=2,phi[1],phi[2]},{x[1],x[2],x[3]}); [> solve({z=50/27,phi[1],phi[2]},{x[1],x[2],x[3]}); /Строим функцию Лагранжа . Применяя необходимый признак условного экстремума для функции Лагранжа, находим ее условно-стационарные точки/ [> L:=z+lambda[1]*phi[1]+lambda[2]*phi[2]; [> dLdx1:=diff(L,x[1]); dLdx2:=diff(L,x[2]); dLdx3:=diff(L,x[3]); dLdlambda1:=diff(L,lambda[1]); dLdlambda2:=diff(L,lambda[2]); [> Uslov_Stat_Point:=solve({dLdx1=0, dLdx2=0, dLdx3=0, dLdlambda1=0, dLdlambda2=0},{x[1],x[2],x[3],lambda[1], lambda[2]}): [> Uslov_Stat_Point[1]; Uslov_Stat_Point[2]; Uslov_Stat_Point[3]; Uslov_Stat_Point[4]; Uslov_Stat_Point[5];Uslov_Stat_Point[6]; |
Далее с помощью достаточного признака условного экстремума выясняем, является ли точкой условного экстремума. Для этого построим квадратичную форму второго дифференциала для функции Лагранжа в точке :
,
где приращения переменных связаны соотношениями
или в обозначениях Maple
(связь между найдем, решив соответствующую систему уравнений).
[> d2Ldx1dx1:=diff(L,x[1]$2); d2Ldx2dx2:=diff(L,x[2]$2); d2Ldx3dx3:=diff(L,x[3]$2); d2Ldx1dx2:=diff(L,x[1],x[2]); d2Ldx1dx3:=diff(L,x[1],x[3]); d2Ldx2dx3:=diff(L,x[2],x[3]); [> a[1,1]:=diff(phi[1],x[1]); a[1,2]:=diff(phi[1],x[2]); a[1,3]:=diff(phi[1],x[3]); [> a[2,1]:=diff(phi[2], x[1]); a[2,2]:=diff(phi[2], x[2]); a[2,3]:=diff(phi[2], x[3]); [> eq1:=a[1,1]*dx[1]+a[1,2]*dx[2]+a[1,3]*dx[3]=0; eq2:=a[2,1]*dx[1]+a[2,2]*dx[2]+a[2,3]*dx[3]=0; [> x[1]:=1: x[2]:=1: x[3]:=2: lambda[1]:=1: lambda[2]:=-1: solve({eq1,eq2},{dx[1],dx[2],dx[3]}); [> Forma_Vtorogo_Porydka:=d2Ldx1dx1*dx[1]*dx[1]+ d2Ldx2dx2*dx[2]*dx[2]+d2Ldx3dx3*dx[3]*dx[3]+ 2*d2Ldx1dx2*dx[1]*dx[2]+2*d2Ldx1dx3*dx[1]*dx[3]+ 2*d2Ldx2dx3*dx[2]*dx[3]; |
Учитывая, что , получаем . Это означает, что есть точка максимума для функции , где переменные удовлетворяют двум уравнениям связи
§ 3. Описание пакета LinearAlgebra
В Maple имеется пакет LinearAlgebra, ориентированный на решение задач линейной (матричной) алгебры. Он загружается соответствующей командой:
[> with(LinearAlgebra);
После выполнения этих команд система выводит на экран список процедур и функций, которыми располагает пакет LinearAlgebra.
Пакет LinearAlgebra является более мощным и совершенным по сравнению с linalg (в ранних версиях программы). Он предназначен для работы с матрицами и векторами больших размеров. Самым простым образом матрицу размером в пакете LinearAlgebra можно сформировать при помощи команды
[> Matrix(m, n, [[a[1,1],…,a[1,n]],…,[a[m,1],…,a[m,n]]]);
Приведем в табл. 3.1 назначение наиболее часто применимых процедур и функций пакета LinearAlgebra. Более полную информацию о каждой процедуре или функции можно узнать в справке, или набрав команду
[> help(имя_процедуры);
Таблица 3.1.
Название процедуры, функции | Назначение процедуры, функции |
Basis | Определяет базис для векторного пространства, заданного системой векторов |
CharacteristicMatrix | Создает для квадратной матрицы ее характеристическую матрицу |
CharacteristicPolynomial | Создает для квадратной матрицы ее характеристический многочлен |
Determinant | Вычисляет для квадратной матрицы ее определитель |
DiagonalMatrix | Создает диагональную матрицу |
Eigenvalues | Вычисляет для квадратной матрицы ее собственные значения (собственные числа) |
Eigenvectors | Вычисляет для квадратной матрицы ее собственные векторы (рекомендуется использовать вместе с процедурой Eigenvalues) |
LinearSolve | Решает систему линейных алгебраических уравнений (СЛАУ) в матричной форме |
MatrixAdd | Процедура сложения двух матриц |
Matrixlnverse | Процедура нахождения обратной матрицы |
MatrixMatrixMultiply | Процедура произведения двух матриц |
MatrixNorm | Функция вычисления нормы матрицы |
MatrixScalarMultiply | Процедура умножения матрицы на скаляр |
MatrixVectorMultiply | Процедура умножения матрицы на вектор |
Minor | Вычисляет минор матрицы |
Normalize | Нормализует вектор |
NullSpace | Возвращает нуль-пространство (ядро) матрицы |
Rank | Вычисляет ранг матрицы |
SylvesterMatrix | Конструирует матрицу Сильвестра из многочленов |
Transpose | Вычисляет матрицу, транспонированную к данной |
Приведем примеры решения наиболее часто встречающихся задач линейной алгебры (исследование систем линейных алгебраических уравнений на совместность, вычисление собственных векторов и чисел матриц).
Пример 3.1. Исследовать СЛАУ с параметром (СЛАУ задана своей расширенной матрицей) и решить в каждом случае:
.
Ниже приведен текст рабочего листа по решению данной задачи (с описаниями по ходу выполнения команд).
[> restart; with(LinearAlgebra): /задаем вектор-столбцы основной матрицы/ [> a1:=Vector([2,1,3]); a2:=Vector([lambda+1,lambda,-3]); a3:=Vector([lambda-2,-3,-7]); /задаем основную матрицу и вектор-столбец свободных коэффициентов системы/ [> A:=Matrix(3,3,[a1,a2,a3]); B:=Vector([3,lambda+2,3]); /выводим определитель основной матрицы системы, решение системы в матричном виде (при значениях, в которых определитель основной матрицы не равен нулю)/ [> Delta:=Determinant(A); X:=LinearSolve(A,B); /вычисляем значения параметра , при котором определитель обращается в нуль/ [> Korni:=solve(Determinant(A)=0); [> lambda:=Korni[1]; X:=LinearSolve(A,B); Error,(in LinearAlgebra:-LA_Main:-LinearSolve) inconsistent system /Maple предупреждает, что СЛАУ при данном значении параметра несовместна/ [> lambda:=Korni[2]; X:=LinearSolve(A,B); /СЛАУ имеет бесконечное множество решений при этом значении параметра / |
Пример 3.2. Найти собственные числа и соответственные собственные векторы матрицы
.
Текст рабочего листа по решению задачи имеет вид:
[> restart; with(LinearAlgebra): [> A:=Matrix(3,3,[[3,-6,9],[1,-2,3],[-3,6,-9]]); /задание исходной матрицы/ [> Add(A,-lambda): p(lambda):=Determinant(Add(A,-lambda)); /составление характеристического многочлена матрицы/ [> solve(p(lambda)=0,{lambda}); /вычисление собственных чисел матрицы/ [> v:=Eigenvalues(A); F:=Eigenvectors(A); /вычисление собственных чисел и собственных векторов матрицы с помощью процедуры Eigenvectors: первый столбец v – собственные числа матрицы, вторая матрица F содержит соответствующие собственные векторы матрицы, они расположены по столбцам!)/ |
§ 4. Описание пакета Optimization
Пакет Optimization, входящий в состав Maple, предназначен для решения оптимизационных задач. Он загружается в память с помощью команды
[> with(Optimization);
Как видно, в состав этого пакета входят 8 процедур и функций. Описание наиболее важных из них приведено в табл. 4.1.
Таблица 4.1.
Название процедуры, функции | Назначение процедуры, функции |
Interactive | Решение оптимизационной задачи с выводом процесса решения в интерактивном виде |
LPSolve | Решение задачи линейного программирования. Процедура равносильна решению задачи с использованием пакета simplex(см. §5) |
Maximize | Процедура вычисления максимума целевой функции |
Minimize | Процедура вычисления минимума целевой функции |
NLPSolve | Решение задачи нелинейного программирования |
QPSolve | Решение задачи квадратичного программирования |
Пусть даны целевая функция переменной ( – управляющие переменные, ) и система из ограничений, выраженных неравенствами (равенствами)
(4.1)
Ниже приведены варианты использования процедуры Maximize при решении различных оптимизационных задач:
[> Maximize(object_function);
процедура нахождения наибольшего значения целевой функции при любых значениях управляющих переменных (решается задача на безусловный экстремум: , );
[> Maximize(object_function, { constr});
процедура нахождения наибольшего значения целевой функции при выполнении системы ограничений {constr} (решается задача на условный экстремум: , , );
[> Maximize(object_function, { constr}, assume=nonnegative);
процедура нахождения наибольшего значения целевой функции при выполнении системы ограничений {constr} (решается задача на условный экстремум: , , ).
Здесь object_function – целевая функция , {constr} – список ограничений вида (4.1), параметр assume=nonnegative означает, что задача решается в области неотрицательных значений управляющих переменных.
Процедура NLPSolve во многих случаях описывается одним из следующих способов:
[> NLPSolve(object_function, initialpoint={x[1]=a1, x[2]=a2,
…, x[n]=an}, maximize );