Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
OPT_LAB1.doc
Скачиваний:
2
Добавлен:
19.09.2019
Размер:
206.85 Кб
Скачать

Лабораторная работа № 1

Метод ферма. Введение в пакет Maple.

Цель работы: ознакомиться с пакетом символьных вычислений Maple на примере решения простых оптимизационных задач.

1. Теоретические сведения

Единственным теоретическим фактом, нужным для выполнения данной лабораторной работы является равенство нулю производной (или градиента) функции в точке экстремума.

  1. ОПИСАНИЕ ОСНОВНЫХ КОМАНД ПАКЕТА Maple

Введение

При выполнении аналитических выкладок становится ясно, что многие операции являются рутинными и вполне допускают автоматизацию. Для решения задач такого рода призваны так называемые пакеты «символьных вычислений». В иностранной литературе этот класс пакетов обозначается аббревиатурой CAS – Computer Algebra Systems. Среди них можно назвать такие пакеты, как Maple, Mathematica, Macsyma, Derive, Axiom. В настоящем цикле лабораторных работ используется первый из них. Maple является динамично развивающимся программным продуктом с широким спектром возможностей. Для выполнения лабораторных работ вполне достаточно Maple V Release 4.

Для языков Maple, Mathematica и Derive встроенные справочники являются, по-видимому, наиболее доступными учебниками как по синтаксису, так и по использованию команд. Всю необходимую информацию можно получить в Maple используя команды:

? (help) - помощь, ?? (usage) - проверка синтаксиса,

??? (example ) - пример для данной команды,

или меню в оболочке Maple для Windows.

Тем не менее, ниже будут рассмотрены основные конструкции, которые потребуются для выполнения работ.

Выражения

Maple является интерпретатором. Команды вводятся после приглашения > и выполнятся при нажатии Enter. Для написания команд, состоящих из нескольких строк, пользуйтесь Shift+Enter. Каждая команда завершается точкой с запятой или двоеточием (для подавления вывода результатов выполнения). Maple чувствителен к регистру. Целые числа имеют "бесконечную" точность, а числа, не являющиеся целыми, представляются в виде отношения двух целых чисел. В самом деле, количество десятичных знаков (не точность результата, а точность вычислений!) задается переменной Digits. По умолчанию она равна 10. Обнаружив ошибку, Maple выводит сообщение о ней в следующей строке. Присваивание выполняется при помощи оператора :=. Строки заключаются в обратные кавычки `. Двойные кавычки обозначают результат выполнения предыдущей команды. Например:

> sin(t);

sin(t)

> ";

sin(t)

Жирным шрифтом здесь отмечен ввод пользователя. Кстати, функции tg и ctg обозначаются так, как это принято в зарубежной литературе – tan и cot, соответственно. Операция возведения в степень обозначается как ^, а функция взятия корня – sqrt. Экспонента и прочие гиперболические функции обозначаются exp, sinh и cosh, соответственно, а мнимая единица – I (разумеется, если этот символ не используется в качестве обычной переменной).

Одинарные кавычки используются для того, чтобы «очистить» переменную. Заметим, что при этом значения выражений, в которые входила эта переменная, не поменяются:

> u:=x^2+9;

2

u := x + 9

> w:=u-3;

2

w := x + 6

> u:='u';

u := u

> u;

u

> w;

2

x + 6

В Maple широко используются такие конструкции, как упорядоченные списки, которые пишутся в квадратных скобках, и неупорядоченные множества, для записи которых используются фигурные скобки. Элемент списка или множества, а также операнд, можно извлечь при помощи команды op. Например:

> q:=sin((x+7)^2)+a;

2

q := sin((x + 7) ) + a

> op(1,q);

2

sin((x + 7) )

> op([1,1,1],q);

x + 7

> m:=[1,2,b,c+6];

m := [1, 2, b, c + 6]

> m[4];

c + 6

> op(4,m); op([4,1],m);

c + 6

c

> n:={1,2,3}; n[1]; op(2,n); n[2];

n := {1, 3, 2}

1

3

3

Для индексации списков и множеств можно воспользоваться квадратными скобками, как это показано в примере. Обратите внимание на «неправильный» результат команды op(2,n) и n[2]: n является неупорядоченным множеством, поэтому понятие порядкового номера к нему не применимо – выдается некий внутренний номер, часто не имеющий смысла.

Стоит отметить еще несколько полезных фактов. Результаты работы можно сохранить в файле с расширением mws. Чтобы очистить рабочее пространство можно воспользоваться командой restart. Удобно также пользоваться клавишами F3 и F4 для разбиения группы команд на секции и склеивания, соответственно.

Преобразование выражений

Рассмотрим несколько простых команд. Наиболее тривиальная из них – simplify (упростить), хотя ее результаты для сложных выражений могут быть довольно бесполезными. Дело в том, что само понятие простоты применительно к алгебраическим выражениям невозможно даже формализовать, не говоря о большем. Как правило, требуется пользоваться более специализированными командами, такими как factor (разложить на множители), expand (раскрыть скобки или раскрыть тригонометрические функции кратных аргументов), combine (обратная функция к expand для тригонометрических выражений). Полезными могут оказаться также функции numer и denom, выделяющие числитель и знаменатель дроби, соответственно. Для вынесения за скобки переменной используется функция collect. Для простой подстановки используется функция subs, а для более сложных случаев – так называемая «алгебраическая подстановка» – algsubs. С примерами применения всех упомянутых и описываемых ниже функций очень желательно познакомиться в справочной системе.

Решение алгебраических уравнений

Для решения обыкновенных уравнений используется функция solve (решить). Первый параметр при вызове этой функции – уравнение или неравенство, или их множество, соответствующее системе. Второй параметр – переменная или множество переменных, относительно которых требуется решить задачу. Если в уравнении участвует лишь одна неопределенная величина, то второй параметр можно опустить. Если вместо уравнения на вход функции подается выражение expr, то подразумевается expr=0. Поскольку корни полиномов можно найти аналитически лишь до 4-го порядка включительно, в случае, если этот порядок больше или равен 4, решение выдается в виде RootOf, и его можно вычислить численными методами. Для получения аналитического решения (в форме радикалов) для полиномов 3-4-го порядков следует присвоить значение true глобальной переменной _EnvExplicit. Для получения всех решений уравнений, содержащих периодические трансцендентные функции, следует присвоить истинное значение переменной _EnvAllSolutions. Например:

> _EnvAllSolutions:=true;

_EnvAllSolutions := true

> solve(sin(x));

Pi _Z1~

Часто при решении уравнений и преобразовании выражений целесообразно пользоваться допущениями при помощи команды assume. Например,

> q:=sqrt((1-x)^2);

2 1/2

q := ((1 - x) )

> simplify(q);

csgn(x - 1) (x - 1)

> assume(x<1);

> simplify(q);

1 - x~

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

> about(x);

Originally x, renamed x~:

is assumed to be: RealRange(-infinity,Open(1))

Для получения численного решения можно воспользоваться командой fsolve, или же вычислить значение решения в виде RootOf при помощи команды evalf, преобразующей выражение к формату с плавающей точкой1. Работу последней можно пояснить при помощи следующего примера:

> sqrt(2);

1/2

2

> evalf(sqrt(2));

1.4142135623730951

> Digits:=30;

Digits := 30

> evalf(sqrt(2));

1.41421356237309504880168872421

Дифференцирование и построение графиков

Для решения задачи потребуется операция дифференцирования, которая осуществляется командой diff. Для построения простейших графиков используется команда plot, применение которой иллюстрируется четырьмя строками ниже. Ясно, что первая и вторая строки рисуют график синусоиды на интервале от до , а третья и четвертая – графики синусоиды и экспоненты.

> plot(sin,-Pi..Pi);

> plot(sin(x),x=-Pi..Pi);

> plot([sin,exp],-Pi..Pi);

> plot([sin(t),exp(t)],t=-Pi..Pi);

Более подробно с этой командой, а также с модулем plots для создания более сложных графиков можно ознакомиться в документации.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]