Примеры maple. §2.1 Способы задания функций

10. ПРОГРАММИРОВАНИЕ В СРЕДЕ MAPLE

Математический пакет Maple предоставляет возможность пользователям составлять собственные программы, процедуры и библиотеки. Для этого в пакете существует довольно широкий набор команд и конструкций аналогичный алгоритмическим языкам программирования высокого уровня.

10.1. Условный оператор

Условный оператор в Maple начинается с зарезервированного слова if и обязательно должен заканчиваться, словом fi и имеет следующую структуру:

if условие then выражение 1 else выражение 2 fi ;

Данная конструкция дает возможность зависимости от значения логического условия выполнять выражение 1 (в случае если условие истинно) или выражение 2 (в случае если условие ложно). В качестве выражений 1 или 2 могут выступать любые последовательности команд из пакета Maple. Условный оператор может быть записан в сокращенном виде:

if условие then выражение 1 fi ;

[> restart;

[> x:=4;

x:=4

[>if x>4 then print (‘x>4’); else x:=x^2;

print (2*x); fi;

32

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

if условие 1 then выражение 1 elif условие2 then выражение2 … elif условие n then выражение n else выражение n +1 fi ;

Как следует из структуры данного оператора вложенность условий может быть практически неограниченной и реализуется при помощи служебного слова elif . В качестве выражений можно использовать любые последовательности команд Maple.

[> restart;

[>x:=8:

[>if x

x:=c

10. 2 . Операторы цикла

В математическом пакете Maple для реализации циклического вычислительного процесса используются четыре вида операторов цикла. Телом всех операторов цикла является последовательность команд, заключенных между служебными словами do и od . Оператор цикла перечисляемого типа, который содержится практически во всех алгоритмических языках имеет, следующую структуру:

for имя переменной цикла from начальное значение переменной цикла by шаг приращения значения переменной цикла to конечное значение переменной цикла

[>for i from 0 by 4 to 8 do i od;

0

4

8

Оператор цикла типа «пока» в Maple имеет вид

while условие do выражение od ;

В данном случае тело цикла (выражение) выполняется до тех пор, пока значение логического условия истинно и прекращается, если условие - ложно.

[> restart;

[>n:=0:

[>while n

1

2

9

Следующий оператор цикла является симбиозом двух предыдущих и имеет следующую структуру:

for имя переменной цикла from начальное значение переменной цикла by значение приращение шага while условие do выражения od ;

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

[> restart;

[> for y from 0 by 2 while y

0

2

4

6

Четвертый оператор цикла предназначен для работы с аналитическими выражениями и представляется следующей структурой:

for имя переменной цикла in выражение 1 do выражение 2 od ;

Здесь тело цикла выражение 2 выполняется, в случае если символьная переменная заданная своим именем последовательно принимает значение каждого из операндов алгебраического выражения 1. Отметим, что работа данной конструкции зависит от внутреннего представления выражения 1. Так в случае если выражение 1 является суммой, то имя переменной цикла принимает поочередно значение каждого слагаемого, если произведение – то каждого сомножителя.

[> restart;

[> a:=5*x^2+x+6/x;

[> b:=simplify(%);

[> for m in a do m; od;

[> for m in b do m; od;

10.3. Процедуры-функции

Процедуры-функции в Maple можно задавать двумя способами. Для задания процедур-функций первый способ использует символ ( ) и задается следующей структурой:

имя функции:=(список формальных параметров) выражение;

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

[> f1:=(x1,x2)->simplify(x1^2+x2^2);

[> f 1 (cos(x),sin(x));

1

Второй способ задания процедур-функций использует команду unapply и имеет следующую структуру:

имя функции:= unapply (выражение или операция, список переменных);

Этот способ задания процедур-функций полезен при определении новой функции через известную или, когда вычисленное выражение предполагает использовать как функцию.

Пример.

[> f3:=unapply(diff(z(r)^2,r)-2,z);

[ > f3(sin);

[ > combine(%);

10.4. Процедуры

Любая процедура в Maple начинается с заголовка, состоящего из имени процедуры, за которым следует знак присваивания и служебное слово proc , далее в круглых скобках через запятую указываются формальные параметры. Процедура обязательно заканчивается служебным словом end . Все выражения и команды заключенными между служебными словами proc и end составляют тело процедуры.

имя процедуры:= proc (список формальных параметров); команды (или выражения); end ;

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

[> f:=proc(x,y);x^2+y^2;simplify(%);end:

[ > f(sin(x),cos(x));

1

При написании процедур в Maple можно использовать ряд команд и служебных слов, кроме указанного выше обязательного минимального набора, которые позволяют описывать переменные, управлять выходом из процедуры, сообщать об ошибках.

При описании формальных параметров процедуры можно явно задавать их тип через двоеточие. При таком описании Maple автоматически проверяет тип фактического параметра и выдает сообщение об ошибки в случае его несовпадения с типом формального параметра.

После заголовка процедуры может следовать описательная часть процедуры, отделяющаяся от него пробелом. При описании локальных переменных, используемых только внутри данной процедуры можно использовать описатель, который задается служебным словом local , после которого через пробел необходимо указать имена локальных переменных. Использование глобальных переменных в процедуре можно задавать служебным словом global , который должен размещаться в описательной части процедуры.

Для выхода из процедуры в любом месте ее тела и присваивания результату ее работы по выполнению нужной команды можно использовать команду RETURN ( val ), где val – возвращаемое значение, которое может иметь различный тип при выходе из разных мест процедуры.

Для аварийного выхода из процедуры в случае возникновения ошибки и сообщения о случившемся можно использовать команду ERROR (‘ string ’) , здесь string – сообщение, которое выводится на экран монитора в аварийной ситуации. Таким образом, общий вид структуры процедуры можно изобразить следующим образом:

имя процедуры:= proc (список параметров процедуры) local список локальных переменных, приведенных через запятую; global список глобальных переменных, приведенных через запятую; RETURN ( val ); ERROR (‘ error in body of procedure ’);… end ;

[>

[ > examp(-1);

[> examp(0);

[ > examp(2);

11. СПОСОБЫ ВВОДА И ВЫВОДА ИНФОРМАЦИИ

В СРЕДЕ MAPLE

Для сохранения имен (индентификаторов) переменных и их значений во внешнюю память в виде файла с именем name . txt необходимо ввести команду:

save список имен переменных, перечисленных через запятую, “имя файла с расширением txt ”;

Если в качестве расширения указан символ m , то файл будет записан во внутреннем Maple-формате, при всех других расширениях в текстовом формате. Для вывода на экран сохраненной в файле информации используется команда

read имя файла ”;

[> restart;

[> examp:=proc(x) local y,w; global z; if x

[ > examp(-1);

[> examp(0);

Error, (in examp) Variablex = 0

[ > examp(2);

[ > read "nnn.txt";

Для записи всего содержимого экрана в файл можно использовать следующие две команды.

Первая команда

writeto (“имя файла”)

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

Вторая команда

appendto (“имя файла”)

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

[ > f:=12;

[> f1:=factor (y^2-3*y); save f,f1, "n1.txt";

[> appendto ("n1.txt");

[> solve(x^2-3*x+2=0,x);

В результате выполнения команды save f , f 1, " n 1. txt "; будет создан текстовый файл n 1. txt , который будет содержать следующую информацию:

f:= 12;

f1:= y*(y-3);

а в результате выполнения команды appendto (" n 1. txt "); содержимое файла примет вид:

f:= 12;

f1:= y*(y-3);

[ > solve ( x ^2-3* x +2=0, x );

2, 1

В пакете Maple предусмотрен ряд команд вывода информации на экран. Наиболее простыми из них являются команды

print (список Maple

lprint (список Maple -выражений, перечисляемых через запятую);

причем, если переменной ничего не присвоено, то на печать выводиться ее имя, в противном случае выводится ее значение.

[> x:=y^2: print (x, "primer 1", y, factor(x-5*y));

[> x:=y^2: lprint (x, "primer 2", y, factor(x-5*y));

y^2, primer 2, y, y*(y-5)

Из приведенных примеров следует, что команда print выводит выражения через запятую в естественном математическом виде, а команда lprint выводит информацию в стиле строки вывода и выражения отделяются друг от друга запятой и пробелами.

Пакет Maple можно использовать для анализа и графической интерпретации числовой информации, находящейся в текстовом файле, полученной как при помощи самого пакета, так и других программных приложений. Как правило, в текстовом файле числа записаны по строкам. Для считывания числовой информации из текстового файла можно использовать команду:

readdata (“имя файла”, тип переменной( integer / float – последний тип устанавливается по умолчанию),счетчик чисел);

Перед использованием данной команды необходимо ее активизировать при помощи команды:

readlib(readdata):

[> restart;

[> readlib(readdata):

[> ff:=readdata("aa.txt",integer,8);

[ > x:=ff;

[ > y:=x;

[ > y1:=ff;

[ > f:=readline("aa.txt");

Двойная индексация в переменной ff связана с тем, что числа представляются в виде двумерного массива, при этом число строк массива соответствует числу считанных строк, а количество столбцов определяется последним параметром команды readdata . Как следует из приведенного примера команда readline выводит числовые данные в виде переменной типа string .

12. ИСПОЛЬЗОВАНИЕ МАТЕМАТИЧЕСКОГО ПАКЕТА MAPLE ДЛЯ НАУЧНЫХ ИССЛЕДОВАНИЙ

В данном разделе рассмотрим пример исследования средствами Maple решения прикладных инженерных задач. Приведенные примеры показывают возможности пакета Maple при решении инженерных задач, связанных с исследованием режимов работы оборудования, в зависимости от конструктивных и технологических параметров, комплексов и проиллюстрировать возможности программного и командного режимов работы пользователя в среде Maple. Далее приведены фрагменты исследований, сопровождаемые краткими пояснениями.

12.1. Исследование влияния изменяемых параметров плоской помольной камеры мельницы противоточного действия на скорость энергоносителя

12 .1.1. Постановка задачи

Струйные мельницы являются разновидностью ударных измельчителей и состоят из разгонного аппарата (одного или нескольких), в котором струя газа-энергоносителя сообщает, скорость частицам обрабатываемого материала, и камеры, в которой происходит взаимодействие потоков материала между собой и(или) со специальными отбойными поверхностями. В качестве энергоносителя в струйных мельницах чаще всего применяется воздух, реже – инертный газ, водяной пар, продукты сгорания.

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

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

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

При истечении струи из разгонной трубки скорости потока в ее выходном сечении 1-1 во всех точках сечения равны между собой. На протяжении длины– начальном участке, осевая скорость постоянна по величине и равна скорости на срезе разгонной трубки V 0 . В области треугольника АВС (рис. 12.1.) во всех точках струи скорости энергоносителя равны между собой и также равны V 0 - эта область образует так называемое ядро струи. Далее осевая скорость постепенно уменьшается и на основном участке длинной l осн осевая скорость V ОС V 0 .

Рис. 12.1. Схема струи в помольной камере

Известно, что скорость энергоносителя от среза разгонной трубки до плоскости соударения струй изменяется по закону

, (12.1)

где V z – скорость энергоносителя с помольной камере на расстоянии z от среза разгонной трубки, м/с;

V 0 – скорость энергоносителя на срезе разгонной трубки, м/с;

z 0 – расстояние от среза разгонной трубки до плоскости встречи струй, м.

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

, (12.2)

где R – вектор силы динамического воздействия воздуха на частицу, Н;

F m – площадь сечения частицы, м 2 ;

, (12,3)

Обозначим

, (12.8)

где m – масса частицы измельчаемого материала, кг.

, (12.9)

где - плотность частиц измельчаемого материала, кг/м.

Выражение (12.7) примет вид

. (12.10)

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

Система дифференциальных уравнений, описывающих процесс изменения скорости частиц и энергоносителя в помольной камере от среза разгонной трубки до области соударения встречных потоков

. (12.11)

Расстояние l стр – между срезом разгонной трубки и серединной плоскость в помольной камере выбрано из условия

, (12.12)

где d тр = 18 диаметр разгонной трубки, мм.

Основные объекты (определение, ввод, действия с ними)

Числа

Maple V работает с числами следующего типа:

    целыми десятичными (О, 1, 123, -456 и т.д.),

    рациональными в виде отношения целых чисел (7/9, -123/127 и т.д.),

    радикалами,

    вещественными с мантиссой и порядком (1.23E5, 123.456E-10)

    комплексными (2+3*I)

Целые числа задаются в виде последовательности цифр от 0 до 9.

Получить список всех команд для работы с целыми числами можно, набрав команду: ?integer . Приведем некоторые из этих команд:

Обыкновенные дроби задаются с помощью операции деления лвух целых чисел.

Заметим, что Maple автоматически произвадит сокращение дробей. Над обыкновенными дробями можно выполнять все основные арифметические операции. Если при задании дроби ее знаменатель сокращается, то такая "дробь" трактуется программой Maple как целое число. Для преобразования обыкновенной дроби в десятичную служит команда evalf() . Второй параметр этой команды задает число значащих цифр. Заметим, что десятичное представление всего лишь аппроксимация точной величины, представленной обыкновенной дробью, т.е. дробь и ее десятичное представление не являются идентичными объектами Maple.

Радикалы задаются как результат возведения в дробную степень целых или дробных чисел, или вычисления из них же квадратного корня функцией sqrt() , или корня n -ой степени функцией surd(число, n) .

Числа с плавающей точкой задаются в виде целой и дробной частей, разделенных десятичной точкой. Их можно представтить также, используя так называемую экспоненциальную форму записи (для указания порядка применяется символ e или E ).

Константы

Maple содержит целый ряд предопределенных именованных констант - таких, к значениям котрых можно обращаться по имени. Часть этих констант не может быть изменена. К ним относятся:

Число е задается как exp(1) .

Посмотреть все константы, определенные в Maple, можно, исполнив команду: ?ininame

Кроме перечисленных на странице Cправки констант все прерменные, имена которых начинаются с _Env , по умолчанию являются системными константами Maple.

Строки

Строки - любой набор символов, заключенный в ДВОЙНЫЕ кавычки. Длина строки в Maple практически не ограничена и может достигать на 32-битных компьютерах длины 268 435 439 символов.

Переменные, неизвестные и выражения

Каждая переменная Maple имеет имя, представляющее последовательность латинских символов, начинающихся с буквы, причем строчные и прописные буквы считаются различными. Кроме букв в именах переменных могут использоватьсчя цифры и знак подчеркивания, но ПЕРВЫМ символом имени должна быть БУКВА.

Выражение представляет собой комбинацию имен переменных, чисел и, возможно, других объектов Maple, соединенных знаками допустимых операций.

неизвестная величина , а выражение, содержащее неизвестные, называется символьным выражением. Именно для работы с такими выражениями прежде всего и разрабатывался Maple.

Важной операцией в Maple, связанной с выражениями, является операция присваивания (:=) . Она имеет следующий синтаксис: переменная:= выражение; Здесь в левой части задается имя переменной, а в правой - любое выражение, которое может быть числовым, символьным или просто другой переменной.

Переменные позволяют хранить и обрабатывать разнообразные типы данных. При этом по умолчанию переменная Maple имеет тип symbol, предсталяющий символьную переменную, и ее значением является ее собственное имя. При присвоении перемнной какого-нибудь значения, ее тип изменяется на тип присвоенного ей значения.

Внутренняя структура объектов Maple

Каждое алгебраическое выражение хранися системой Maple в виде древовидной структуры, обеспечивая тем самым доступ к любому ее члену или подвыражению, а также позволяя выполнять над ними разнообразные символьные преобразования. В представлении этой структуры каждый объект Maple делится на подобъекты первого уровня, которые, в свою очередь, такде делятся на подобъекты и т.д.

Команды, позволяющие выделять части объектов:

rhs(уравн)

Выделение правой части уравнения (или конца диапазона)

lhs(уравн)

Выделение левой части уравнения (или начала диапазона)

numer(дробь)

Выделение числителя числовой или алгебраической дроби

denum(дробь)

Выделение знаменателя числовой или алгебраической дроби

nops(выр)

Определяет количество операндов в выражении

op(выр) op(n,выр)

Выдает операнды выражения в виде списка, Извлекает n-ый операнд выражения

select(б ф, выр)

true

remove(б ф, выр)

Выделяет в выражении операнды, для которых булева функция дает значение false

indets(выр, тип)

Выделяет в выражении подвыражения заданного типа("*", "+" ...)

Познакомимся с этими командами более подробно.

Уравнение представляется в виде двух выражений, соединенных знаком равенства. Его не следует путать с операцией присваивания (:=). Уравнение является объектом Maple и служит для задания действительных уравнений. Его можно использовать в правой части операции присваивания, именуя тем самым уравнение.

В функции has() можно задать несколько подвыражений в виде списка. Ее результатом будет ИСТИНА тогда и только тогда, когда найдено хотя бы одно из подвыражений в списке.

Подстановка и преобразование типов

При выполнении математических преобразований часто необходимо произвести замену переменных в выражении, функции, уравнении и т.д., то есть вместо какой-то переменной подставить ее представление через некоторые другие переменные. А иногда необходимо выполнить преобразование выражения одного типа в другой. (Такое преобразование типов может потребоваться для выполнения некоторых команд, не работающих с исходным тиом выражения). Для этих целей в Maple существуетy несколько команд:

subs(подстановка, ВЫРАЖЕНИЕ)

Синтаксическая подстановка одного выражения вместо другого в ВЫРАЖЕНИЕ

algsubs(подстановка, ВЫРАЖЕНИЕ)

Алгебраическая подстановка одного выражения вместо другого в ВЫРАЖЕНИЕ

subsop(N=новое значение, ВЫРАЖЕНИЕ)

Подстановка нового значения вместо N-го операнда ВЫРАЖЕНИЯ

convert(ВЫРАЖЕНИЕ, тип)

Преобразует ВЫРАЖЕНИЕ в новый тип данных

whattype(ВЫРАЖЕНИЕ)

Определяет тип выражения.

Для подстановки вместо некоторой переменной (выражения) другого выражения служит команда subs() , синтаксис которой имеет следующий вид: subs(старое выражение=новое выражение, ВЫРАЖЕНИЕ) subs(s1, s2, .. sn, ВЫРАЖЕНИЕ) subs(, ВЫРАЖЕНИЕ) где каждое из s1,..sn является уравнением, определяющим подстановку.

Первая форма команды анализирует ВЫРАЖЕНИЕ , определяет в нем все вхождения старое выражение и подставляет вместо них новое выражение .

Вторая форма команды позволяет выполнить серию подстановок в ВЫРАЖЕНИЕ , причем подстановки выполняются последовательно, начиная с s1 . Это означает, что после выполнения первой подстановки, определенной s1 , Maple отыскивает вхождения левой части уравнения s2 во вновь полученном выражении и заменяет каждое такое вхождение на выражение, заданное в правой части уравнения s2 .

То есть вхождения выражений, заданных в левых частях уравнений s1, s2 , определяются в исходном параметре ВЫРАЖЕНИЕ . (см. примеры)

    Воспользоваться командой simplify() , указав в качестве параметра требуемую замену (см. след раздел).

    Воспользоваться командой algsubs() , которая осуществляет алгебраическую подстановку.

Отметим, что полное исключение "старой" переменной произведено только при использовании первого из указанных способов. В остальных случаях "старая" переменная все-таки остается в преобразованном выражении.

— программный пакет который может быть использован для самых различных целей. Его можно использовать в качестве продвинутого калькулятора, который может не только выполнять арифметические действия, но и брать производные, интегралы, перемножать матрицы и строить графики функций. В тоже время, в эту систему входит современный язык программирования который является процедурным (параллельным), объектно-ориентированнным и прикладным в одном флаконе. Кроме того, он может быть интегрирован с MatLab , а также позволяет вызывать внешнии процедуры-компилляции программ на C и Fortran . В общем то он позволяет даже создать собственный язык программирования при наличии желания. Эта среда позволяет создавать прототипы для различных технических, научных разработок с целью последующего написания кода на других языках.

Такое многообразие способностей этой среды может несколько затруднить его изучение с цель последующего использования. Как правило, начинающий пользователь изучает его методом тыка с использованием отличного встроенного Help . К сожалению достойных упоминания руководств на русском языке я не встречал. Следует отметить три руководства на английском языке, которые стоит прочесть в обязательном порядке:

Все три можно найти в открытом доступе. Я в этой рубрике буду делиться своим опытом работы в Maple и приводить примеры работы и настройки.

Начать естественно следует с установки. Система эта не из дешевых, но для ознакомления можно найти ее на различных торрентах, например на https://rutracker.org/. Как для Linux , так и для Windows .

Установив, запускаем и видим слева колонку с Pallettes|Workbook , справа разделенное на две части окно с большим количеством иконок:

Для начала можно ознакомится с различными готовыми примерами различных областей математики, программирования, естественных наук — перейдя по иконкам в правой части окна и запуская соответствующие документы Maple . Эти документы можно редактировать и сохранять. Самостоятельную работу мы начинаем кликнув в правой части окна на New Document или New Worksheet . Разница между этими двумя типами невелика приведена в таблице. Мы далее будем использовать Worksheet . Исполняемые строки здесь начинаются значком [> . Команды Maple будем отображать жирным шрифтом. После значка [> можно вводить команды, которые заканчиваются или точкой с запятой или двоеточием. Например на арифметическую операцию:

sin(3.)+1;

После команды жмем Enter или мышкой знак! сверху в меню. Заметьте разницу между такой командой и двумя похожими: sin(3)+1; и sin(3)+1: Результат последней не отобразится на экране — т.к. команда завершена знаком:.
Такой знак используется, когда вам не нужен результат, и/или он слишком громоздкий. Например, присвоив переменной a значение: a:=Pi: Мы не нуждаемся в подтверждении того, что a равно 3.1415…. Мы можем далее это a использовать например так:

b:=2*a;

результат отобразится как $b:=2\pi$. Заметьте, что присваиваем мы с помощью := . Обычный знак равенства используется с несколько иной целью. Maple знает, что Pi означает число $\pi$. Чтобы получить его численное значение нужно использовать специальную функцию таким например образом:

b:=evalf(2*a);

В результате мы получим значение числа пи с точностью которая в настоящий момент используется в Maple . И здесь внимание! Maple может использовать много-много значные числа. По умолчанию 10 знаков. Это число можно легко поменять. Я обычно в документе пишу в самом начале так:

restart: Digits:=16:

Таким образом, в документе будут использоваться вычисления с 16 цифрами. Это число можно менять максимальное значение для вашей ОС можно получить командой

kernelopts(maxdigits);

У меня максимальное значение Digits=38654705646. Заметьте, что я также использовал в начале команду restart: Эта команда очень удобна, если вы исправляете документ во время одной сессии, в этом случае вам не надо перезапускать Maple закрывая и открывая его. Вы просто после иправлений нажимете кнопку !!! в верхней панели Maple и все пересчитывается с полным обновлением всех переменных.

На страницу <Методические разработки>

Системы компьютерной алгебры

Maple - специализированный математический пакет, которым пользуются профессиональные математики во всем мире. Подобные пакеты также называются системами компьютерной алгебры. Из множества подобных систем (Maple, Matlab, Mathcad, Mathematica, Macsyma, Derive, Axiom, MuPAD) Maple является признанным лидером в области символьных вычислений (то есть в преобразовании выражений с использованием переменных, многочленов, функций и т.д.). Помимо этого в Maple входят модули, облегчающие работу в таких разделах математики, как высшая алгебра, линейная алгебра, аналитическая геометрия, теория чисел, математический анализ, дифференциальные уравнения, комбинаторный анализ, теория вероятностей, статистика и многих других.

Для получения справки по той или иной команде необходимо в окне Maple ввести?command (заменив command на имя команды).

Maple как суперкалькулятор

В рабочем листе (worksheet) системы Maple можно вводить команды после приглашения " > ". Команда должна завершаться символом " ; ", ее результат немедленно выводится на экран. Если вместо " ; " поставить " : ", то команда будет выполнена, но результат ее работы не будет напечатан. Например:

> 57/179+91/1543;

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

> evalf(%);

> evalf(%%,30);

0.377411774928764613663435880911

Символ % обозначается последнее вычисленное Maple выражение, %% - предпоследнее, %%% — предпредпоследнее (а вот обозначения %%%% уже не существует).

Числа и константы

Если в выражении встречается число, записанное с плавающей точкой (например, 3.14 или 5.6e-17), то все вычисления выполняются приближенно, в противном случае вычисления проводятся точно. В Maple есть следующие константы: Pi Число пи
I Мнимая единица i
exp(1) Основание натуральных логарифмов e
infinity Бесконечность
true Логическая истина
false Логическая ложь

Вычисления с участием констант выполняются точно (если только их значение не будет переведено к действительному значению), например

> sin(Pi/3);

> sin(3.1415926);

0.5358979324 10 -7

Операторы

В Maple существуют следующие операторы:

Арифметические: + , - , * , / , ^ (возведение в степень), ! (факториал).

Логические: < , > , >= , <= , = (равно), <> (не равно).

Оператор присваивания: := .

Переменные

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

> a:=2: b:=3: > (a+b)^2;

Стандартные функции

Знак x (возвращает 1, -1 или 0) - sign(x)

Тригонометрические функции: sin(x) , cos(x) , tan(x) , cot(x)

Обратные тригонометрические: arcsin(x) , arccos(x) , arctan(x) , arccot(x)

Экспонента: exp(x)

Натуральный, десятичный логарифм и логарифм по данному основанию: ln(x) , log10(x) , log[a](x)

Преобразование математических выражений

В выражение могут входить константы, свободные переменные, математические функции. Пример выражения:

> A:=sin(sqrt(Pi)+exp(2));

A:=sin(Pi 1/2 +e 2)

Довольно часто в качестве выражений выступают многочлены от одной или нескольких переменных или рациональные выражения. Maple содержит различные функции для преобразования таких выражений.

Функция factor(eq) разлагает выражение eq на множители.

> P:=x^4+2*x^3+2*x^2+2*x+1: > factor(P);

Функция expand(eq) раскрывает скобки в выражении. Если указать один или несколько дополнительных параметров в виде expand(eq,a,b,c) , то выражения a , b , c раскрываться не будут. Это полезно, если необходимо каждое слагаемое умножить на какое-то выражение.

> expand((x+1)*(x+2));

> expand(sin(x+y));

sin(x)cos(y)+cos(x)sin(y)

> expand((x+1)*(y+z),x+1);

Для приведения дробей к общему знаменателю с последующим сокращением используется функция normal(eq) .

> normal(1/x+1/y);

> (a^4-b^4)/((a^2+b^2)*a*b);

(a 4 -b 4)/((a 2 +b 2)ab)

Функция simplify(eq) упрощает выражение eq . В качестве второго (необязательного) параметра, ей можно указать, какие выражения преобразовывать: trig - тригонометрические, power - степенные, radical - радикалы, exp - экспоненты, ln - логарифмы.

> simplify(sin(x)^2+cos(x)^2);

Решение уравнений

Обыкновенные уравнения

Для решения уравнений используется функция solve(eq,x) , где eq - решаемое уравнение, x - имя переменной, относительно которой разрешается уравнение. Пример:

> solve(x^2+x-1=0,x);

1/2-5 1/2 /2 ,-1/2+5 1/2 /2

> solve(a*x+b=0,x);

> solve(a*x+b=0,b);

Если уравнение имеет несколько решений, то решение уравнения можно присвоить некоторой переменной, например p . Далее можно использовать k -е решение уравнения в виде p[k] :

> p:=solve(x^2+x-1=0,x): p;

> simplify(p*p);

Системы уравнений

Системы уравнений решаются с помощью такой же функции solve({eq1,eq2,...},{x1,x2,...}) , только теперь в параметрах функции следует указывать в первых фигурных скобках через запятую уравнения, а во вторых фигурных скобках перечисляются через запятую переменные, относительно которых требуется решить систему. Если необходимо использовать полученные решения уравнений для дальнейших вычислений, то необходимо результат, возвращаемый функцией solve присвоить какой-нибудь переменной, например, p , а затем выполнить команду assign(p) . Пример:

> p:=solve({x+y=a,x-y=b}, {x,y}): > assign(p); > x;

Численное решение уравнений

Попробуем решить уравнение: x 6 -2x+1=0. Использование функции solve даст нам один корень -1 и еще набор выражений вида RootOf(_Z^5+_Z^4+_Z^3+_Z^2+_Z-1,index = 1). Дело в том, что произвольное уравнение степени выше 4 с рациональными коэффициентами может не иметь корней, выразимых в виде радикалов над рациональными числами. Решения всевозможных таких уравнений называются алгебраическими числами. Данное уравнение также неразрешимо в радикалах, и Maple нашла нам единственный корень, выразимый в радикалах (1) и сообщила, что оставшиеся корни являются алгебраическими числами: корнями многочлена z 5 +z 4 +z 3 +z 2 +z-1=0 (именно этот многочлен указан в аргументе функции RootOf). Maple умеет работать с алгебраическими числами, но можно также найти приближенное численное решение при помощи функции fsolve:

> fsolve(x^6-2*x+1=0,x);

5086603916, 1.000000000

Иногда Maple при решении трансцендентных уравнений не выводит сложные выражения в виде радикалов, а оставляет их в форме RootOf. Чтобы заставить Maple выводить все решения в виде радикалов (естественно, если они представимы в такой форме), необходимо присвоить значение true системной переменной _EnvExplicit (_EnvExplicit:=true).

Решение тригонометрических уравнений

Команда solve , применяемая для решения тригонометрических уравнений, находит только главные решения, то есть выводит только одно решение из серии периодических решений:

> solve(sin(2*x)+cos(2*x)=1,x);

Для того, чтобы Maple находила все решения, необходимо предварительно присвоить значение true системной переменной _EnvAllSolutions . Тогда мы получим результат в другом виде, в котором будут фигурировать переменные Z1~ и Z2~ . Эти переменные обозначают произвольную константу целого типа, в более привычном виде решения можно будет записать, как π/4+πn , πk .

Упражнения

  1. Какая цифра в десятичной записи числа π стоит на сотом месте после запятой?
  2. Сколько цифр в десятичной записи 179! ?
  3. Вычислите значение (6+2×5 1/2) 1/2 -(6-2×5 1/2) 1/2 .
  4. Вычислите sin 4 (π/8)+cos 4 (3π/8)+sin 4 (5π/8)+cos 4 (7π/8).
  5. Упростите выражение (1 + sin(2x ) + cos(2x ))/(1 + sin(2x ) - cos(2x )).
  6. Разложите на множители многочлен x 3 -4x 2 +5x -2.
  7. Найдите численное решение уравнения cos x =x .
  8. Решите уравнение 3x -(18x +1) 1/2 +1=0
  9. Решите уравнение ||2x -3|-1|=x .
  10. Решите уравнение (найдите все решения) sin x - cos x =1/sin x .
  11. Решите систему уравнений:

    10(x y ) 1/2 +3x -3y =58 x -y =6

В Maple имеется несколько способов представления функции.

Способ 1. Определение функции с помощью оператора присваивания (:= ): какому-то выражению присваивается имя, например:

> f:=sin(x)+cos(x);

Если задать конкретное значение переменной х , то получится значение функции f для этого х . Например, если продолжить предыдущий пример и вычислить значение f при , то следует записать:

> x:=Pi/4;

После выполнения этих команд переменная х имеет заданное значение .

Чтобы насовсем не присваивать переменной конкретного значения, удобнее использовать команду подстановки subs({x1=a1, x2=a2,…, },f), где в фигурных скобках указываются переменные хi и их новые значения аi (i =1,2,…), которые следует подставить в функцию f . Например:

> f:=x*exp(-t);

> subs({x=2,t=1},f);

Все вычисления в Maple по умолчанию производятся символьно, то есть результат будет содержать в явном виде иррациональные константы, такие как, и другие. Чтобы получить приближенное значение в виде числа с плавающей запятой, следует использовать команду evalf(expr,t), где expr – выражение, t – точность, выраженная в числах после запятой. Например, в продолжение предыдущего примера, вычислим полученное значение функции приближенно:

> evalf(%);

Здесь использован символ (% ) для вызова предыдущей команды.

Способ 2. Определение функции с помощью функционального оператора, который ставит в соответствие набору переменных (x1,x2,…) одно или несколько выражений (f1,f2,…) . Например, определение функции двух переменных с помощью функционального оператора выглядит следующим образом:

> f:=(x,y)->sin(x+y);

Обращение к этой функции осуществляется наиболее привычным в математике способом, когда в скобках вместо аргументов функции указываются конкретные значения переменных. В продолжение предыдущего примера вычисляется значение функции:

Способ 3. С помощью команды unapply(expr,x1,x2,…) , где expr – выражение, x1,x2,… – набор переменных, от которых оно зависит, можно преобразовать выражение expr в функциональный оператор. Например:

> f:=unapply(x^2+y^2,x,y);

В Maple имеется возможность определения неэлементарных функций вида

посредством команды

> piecewise(cond_1,f1, cond_2, f2, …).

Например, функция

записывается следующим образом.