Постигаем интегралы с помощью Maple
Познакомившись с магией систем компьютерной алгебры, я провела несколько вечеров в странных и на первый взгляд бессмысленных занятиях — перерешивая вузовские задачки по алгебре, математическому анализу, дифференциальным уравнениям… Просто потому, что было интересно — найдется ли такое уравнение, которое не смогут решить ни Maple, ни Maxima? В моем арсенале были эти две системы, и со всеми проблемами они справлялись «на ура». Это вовсе не означает, что всё решалось мгновенно и без применения математических знаний. Некоторые задачи требовали особых подходов, многочисленных преобразований и замен переменных. Так что, с противниками компьютерной алгебры можно поспорить — при правильном применении она нисколько не расслабляет мозг, а наоборот — развивает логическое (и прочее) мышление.
Иллюстрируя вышесказанное, в этом посте я расскажу о нескольких различных сценариях использования СКА Maple в борьбе с интегралами. Надеюсь, что персоны, знакомые с тонкостями символьных вычислений, найдут для себя здесь что-нибудь новенькое. А для тех, кому такой способ решения задач в новинку, я постаралась добавить побольше комментариев.
Сценарий №1 — «Для ленивых/уставших»
Всем, кому не повезло с преподавателем матана, и людям, которым просто нравится наблюдать пошаговое решение интегралов, посвящен отдельный модуль пакета student. Некоторые его «фишки» хороши и для «заковыристых» интегралов, но об этом позже.
Итак, сначала подключим модуль и ограничим вывод дополнительной информации. Двоеточие на конце означает, что вывод команды будет скрыт от глаз пользователя.
Для разминки вычислим довольно обычный определенный интеграл, который был позаимствован из задачника по матанализу. Я предпочитаю использовать наиболее простой интерфейс (Classic Worksheet), в нем команды вводятся в символьной форме, а специальный интерфейс для ввода формул отсутствует. Получаем заботливо отрисованный интеграл.
Мы могли бы просто использовать команду value(Res) , и сразу получить результат. Но не зря же пакет student называется именно так! Займемся интегрированием по шагам. Сначала нам нужна подсказка.
Предлагают замену переменных, чтобы избавиться от квадрата в знаменателе. Так и сделаем. Интеграл стал выглядеть гораздо приятней.
Теперь попробуем обойтись без подсказки. Мозг уже немного «прокачался» во время осмысления предыдущего шага. Сделаем еще замену.
Интеграл от константы — что может быть проще? Здесь достаточно применить одно простое правило (полный список правил, разумеется, доступен в мануалах). И упростить.
Сценарий №2 — «Для энтузиастов»
Попробуем теперь разобраться с двойным несобственным интегралом, совсем без подсказок.
Очевидна замена переменных. С ней отлично справляется команда changevar . Для того, чтобы указать условия и избавиться от модулей, добавляем assuming .
Упрощаем подынтегральное выражение ( integrand ) с помощью заветной команды simplify (она хороша для упрощения выражений — и не только внутри интегралов).
Избавляемся поочередно от обоих интегралов, не забывая про границы. Команда int — простая попытка проинтегрировать выражение. Она доступна и вне пакета student.
Ответ радует глаз. Если не радует, можно представить его в виде дроби с заданной точностью.
Заключение
Я затронула лишь малую часть возможностей, которые предоставляют символьные вычисления. Но даже владея небольшим набором команд и правильно комбинируя их, можно решить много интересных примеров и поупражняться в знании математических правил и законов. Предпочтения в выборе программного пакета, по моему мнению, не играют решающей роли, ведь синтаксически все системы достаточно похожи друг на друга.
А вот с литературой по системам компьютерной алгебры дела обстоят плохо. Это касается и Maple: большая часть книг написаны уже давно и не соответствуют возможностям новых версий ПО. Поэтому лучшее, что можно прочесть для ознакомления с возможностями различных пакетов и функций — это неисчерпаемый официальный мануал.
Как посчитать интеграл в maple

прямого исполнения – int(f, x), где f – подынтегральная функция, x – переменная интегрирования;
отложенного исполнения – Int(f, x) – где параметры команды такие же, как и в команде прямого исполнения int. Команда Int выдает на экран интеграл в аналитическом виде математической формулы.
Для вычисления определенного интеграла


Если в команде интегрирования добавить опцию continuous: int(f, x, continuous), то Maple будет игнорировать любые возможные разрывы подынтегральной функции в диапазоне интегрирования. Это позволяет вычислять несобственные интегралы от неограниченных функций. Несобственные интегралы с бесконечными пределами интегрирования вычисляются, если в параметрах команды int указывать, например, x=0..+infinity.
Численное интегрирование выполняется командой evalf(int(f, x=x1..x2), e), где e – точность вычислений (число знаков после запятой).
Интегралы, зависящие от параметра. Ограничения для параметров.
Если требуется вычислить интеграл, зависящий от параметра, то его значение может зависеть от знака этого параметра или каких-либо других ограничений. Рассмотрим в качестве примера интеграл

> Int ( exp (- a * x ), x =0..+ infinity )=
Definite integration: Can’t determine if the integral is convergent.
Need to know the sign of —> a
Will now try indefinite integration and then take limits.

Таким способом интеграл с параметром не вычислить. Для получения явного аналитического результата вычислений следует сделать какие-либо предположения о значении параметров, то есть наложить на них ограничения. Это можно сделать при помощи команды assume(expr1), где expr1 – неравенство. Дополнительные ограничения вводятся с помощью команды additionally(expr2), где expr2 – другое неравенство, ограничивающее значение параметра с другой стороны.
После наложения ограничений на параметр Maple добавляет к его имени символ (
), например параметр a, на который были наложены некоторые ограничения, в сроке вывода будет иметь вид: a
Описание наложенных ограничений параметра a можно вызвать командой about(a). Пример: наложить ограничения на параметр a такие, что a>-1, a £ 3:
Originally a, renamed a
is assumed to be: RealRange(Open(-1),3)
Вернемся к вычислению интеграла с параметром


Обучение основным методам интегрирования.
В Maple имеется пакет student, предназначенный для обучения математике. Он содержит набор подпрограмм, предназначенных для выполнения расчетов шаг за шагом, так, чтобы была понятна последовательность действий, приводящих к результату. К таким командам относятся интегрирование по частям inparts и замена переменной changevar.
Формула интегрирования по частям:

Если обозначить подынтегральную функцию f=u(x)v’(x), то параметры команды интегрирования по частям такие: intparts(Int(f, x), u), где u – именно та функция u(x), производную от которой предстоит вычислить по формуле интегрирования по частям.
Если в интеграле требуется сделать замену переменных x=g(t) или t=h(x), то параметры команды замены переменных такие: changevar(h(x)=t, Int(f, x), t), где t — новая переменная.
Обе команды intparts и changevar не вычисляют окончательно интеграл, а лишь производят промежуточную выкладку. Для того, чтобы получить окончательный ответ, следует, после выполнения этих команд ввести команду value(%); где % — обозначают предыдущую строку.
Не забудьте, перед использованием описанных здесь команд обязательно загрузить пакет student командой with(student).
ЧИТАТЬ КНИГУ ОНЛАЙН: Maple 9.5/10 в математике, физике и образовании
![]()
В последние полтора десятка лет возникло и получило бурное развитие новое фундаментальное научное направление — компьютерная математика [1], которое зародилось на стыке математики и информатики. Первыми серьезными средствами для автоматизированного выполнения массовых научно-технических расчетов стали программируемые микрокалькуляторы [2, 3]. С появлением персональных компьютеров их стали широко применять для численных расчетов, программируемых на языках высокого уровня, например, Фортране, Си, Бейсике или Форте [4–6]. Однако все большее распространение получают аналитические (символьные) вычисления, обладающие гораздо большей общностью, чем численные вычисления.
Предвестником появления систем компьютерной математики стали специализированные программы для математических численных расчетов, работающие в среде Microsoft MS-DOS. Это Eureka [7], Mercury, Mathcad [8] и MATLAB [10] под операционную систему MS-DOS. Казалось бы это было совсем недавно — в начале 90-х годов ушедшего столетия. Вслед за этим, на основе достижений компьютерной математики, были разработаны новейшие программные системы символьной математики или компьютерной алгебры (СКА). Среди них наибольшую известность получили системы Mathcad под Windows [9], Derive [11–13]. Mathematica [14-16] и Maple [17-27] и др.
Хотя множество (и даже большинство) математических задач решается с помощью СКМ без программирования, это не означает отказ от программирования вообще. Напротив, все СКМ, в частности Maple 9.5/10, имеют довольно развитый язык программирования, содержащий типовые средства процедурного программирования, например управляющие структуры, циклы, операторы ввода/вывода и т.д.
В последнее время такие языки включают в себя средства визуально-ориентированного программировании пользовательского интерфейса — в Maple 9.5/10 эти средства названы маплетами (maplets). Есть одно весьма важное обстоятельство в современной реализации этих средств — многие маплеты обеспечивают пошаговое решение математических задач с демонстрацией промежуточных результатов вычислений. Это именно то, что давно требовалось от СКМ в образовании и чего они не давали. Теперь подобное решение задач стало возможным и существенно повышает значение систем Maple 9.5/10 в образовании.
СКМ широко используются для научных расчетов [28–34], в том числе в Интернете [35] и в мобильных вычислениях [36]. Но особенно велика роль систем компьютерной математики в образовании — они становятся не только удобным инструментальным средством для выполнения огромного числа учебных расчетов, но и средством предоставления учащимся, а нередко и педагогам, знаний в области математики, физики и в иных науках, использующих математические методы. Трудно переоценить и их роль в подготовке высококачественных электронных уроков, учебных курсов и книг.
Системы класса Maple были созданы группой ученых, занимающихся символьными вычислениями (The Symbolic Group), организованной Кейтом Геддом (Keith Geddes) и Гастоном Гонэ (Gaston Gonnet) в 1980 году в университете Waterloo, Канада. Вначале система Maple была реализована на больших компьютерах и прошла долгий путь апробации, вобрав в свое ядро и библиотеки большую часть математических функций и правил их преобразований, выработанных математикой за столетия развития. Есть реализации программы на платформах ПК Macintosh, Unix, Sun и др.
Системам класса Maple во всем мире посвящены многие сотни книг. Достаточно полный список книг по системам Maple можно найти на недавно обновленном сайте разработчика этой системы — компании Waterloo Maple Software (www.maplesoft.com). Среди них все предшествующие книги из автора — рис. 0.1. С системой поставляются книги [39—52], которые являются ее фирменным описанием.

Рис. 0.1. Книги по системе Maple на Интернет-странице русскоязычных книг сайта корпорации MapleSoft
Новая книга имеет ряд важных отличий перед прежними книгами автора по системам класса Maple:
• она посвящена новейшим реализациям системы Maple 9.5/10 и является первой книгой по этим новым реализациям;
• книга обобщает многочисленные материалы прежних книг автора (прежде всего [23]), справок, пакетов расширения и материалов, размещенных в Интернете, и добавляет к этому ряд новых и оригинальных примеров применения системы;
• к книге прилагается CD-ROM, на котором записаны программные коды всех примеров, описанных в книге (свыше 340 файлов);
• описаны новые возможности интерфейса пользователя — как в классическом, так и в стандартном (новом) варианте;
• резко расширено описание маплет-средств визуально-ориентированного программирования (Maplets) и ассистентов по различным видам вычислений;
• описан новый пакет оптимизации Optimization, обеспечивающий оптимизацию методами линейного, квадратичного и нелинейного программирования, а также выполнение нелинейной регрессии;
• описан ряд новых пакетов расширения системы (CodeGeneration, Calculus1 и др.);
• описаны консультанты (Advisors) по функциям и дифференциальным уравнениям;
• описаны многочисленные ассистенты (Assistants) по различным видам вычислений;
• существенно расширены разделы по решению дифференциальных уравнений, в частности жестких систем, уравнений с двойными краевыми условиями, уравнений динамики популяций, дифференциальных уравнений в частных производных с заданными граничными условиями и др.;
• расширено описание применения научных констант и возможностей пакетов векторного анализа и функциям теории поля;
• впервые дано описание интеграции системы Maple 9.5/10 с новейшей версией мощной матричной системы MATLAB 7.0 Service Pack 2;
• все примеры книги прошли тестирование в новой реализации системы Maple 9.5;
• книгу могут использовать (за редкими исключениями) и пользователи Maple 8/9;
• книга является справочным руководством по решению математических, физических и научно- технических задач средствами систем Maple 9.5/10.
В тоже время книга никоим образом не подменяет огромную по размеру англоязычную справочную систему Maple 9.5/10 и не является ее переводом.
Книга предполагает, что читатель знаком с высшей математикой в объеме вузовского или университетского курсов и потому содержит минимум учебного и справочного материала по математике. Такой материал можно найти в книгах [37—46] и во многих других. Считается, что читатель знаком и с работой на персональном компьютере хотя бы в среде операционных систем Windows 95/98/NT/2000/ХР. Если это не так, то стоит обратиться к книгам автора [36, 47, 48] или ко многим другим книгам, которые, к счастью, ныне имеются в изобилии в книжных магазинах.
Благодарности и адреса
Особую благодарность автор выражает представителя корпорации Waterloo Maple г-ну Ph. D. Jason Schattman и г-же Donna Watterworth за любезно представленные программные продукты и документацию, а
Дифференцирование, интегрирование, вычисление пределов, сумм, рядов функций и математических выражений в системе Maple
уметь применять указанные команды для решения математических задач.
ТЕОРЕТИЧЕСКИЕ СВЕДЕНИЯ
Дифференцирование выражений
Команды diff ( ) и Diff ( ) предназначены для вычисления обыкновенных и частных производных аналитического выражения по одной или нескольким переменным. Вторая команда является отложенной командой, которая не вычисляет производную от выражения, а просто отображает математическую запись взятия производной. Результат действия отложенной команды можно присвоить переменной Maple, а в дальнейшем при помощи команды value ( ) вычислить результат этой отложенной команды. Отложенная форма команды удобна, когда необходимо видеть, какие операции были сделаны для получе-ния нужного выражения. Кроме этой команды еще целый ряд команд имеют отложенную форму, информацию о которых можно получить в Справке.
Синтаксис команды дифференцирования следующий:
diff (выражение, переменная_1, переменная_2, . переменная_n);
diff (выражение, [переменная_1, переменная_2, . переменная_n]);
В результате выполнения любой из приведенных команд будет вычислена частная производная n-гo порядка от заданного первым параметром выражения по заданным n переменным.
При вычислении производных высокого порядка можно использовать оператор последовательности $, который позволяет проще и нагляднее задать производную. Например, для вычисления третьей производной функции f (х) по переменной х можно использовать команду diff (f (х) , х, х, х), в которой три раза указано дифференцирование по переменной х, или применить в команде дифференцирования оператор последовательности х$3, что упрощает и делает более наглядным задание третьей производной: diff (f (х) , х$3).
Пример 1. Вычисление производных.






Последние три команды показывают использование отложенной формы команды дифференцирования.
2. Интегрирование выражений
Команда int( ) имеет отложенную форму Int( ) и осуществляет интегрирование выражений по заданной переменной. Эта команда вычисляет неопределенный интеграл от выражения (при этом, правда, в ответе не будет никакой постоянной интегрирования) используя следующий синтаксис:
int (выражение, переменная);
Определенный интеграл вычисляется при следующем синтаксисе команды:
int (выражение, переменная = a..b);
где a и b являются пределами интегрирования, причем эти пределы могут быть и аналитическими выражениями.
Пример 2. Интегрирование функций.




Для символьного вычисления определенного интеграла существуют две опции, управляющие обработкой разрывов подынтегральной функции. Эти опции задаются третьим параметром в командах int( ) и Int( ).
По умолчанию команда интегрирования проверяет выражение на не-прерывность в области интегрирования и вычисляет интеграл как сумму от-дельных определенных интегралов на промежутках непрерывности функции. Опция `continuous` отключает этот режим и вычисляет интеграл как разность значений первообразной подынтегральной функции в точке начала и конца промежутка интегрирования. Еще одна опция `CauchyPrincipalValue` вычисляет несобственные интегралы первого и второго рода в смысле главного значения Коши.
Если Maple не находит замкнутую форму выражения для определенно-го интеграла, то команда интегрирования возвращает вызов самой себя (в области вывода печатается математическая запись вычисления интеграла, как при обращении к отложенной команде интегрирования). В таких случаях можно вычислить значение определенного интеграла численным способом с помощью команды evalf ( ). Синтаксис при этом следующий:
evalf( int (f,x=a. .b) ) ;
evalf ( Int (f,x=a. .b) ) ;
evalf (Int (f ,x=a. .b), digits, flag);
Параметр digits позволяет задать число значащих цифр при вычислени-ях приближенного значения интеграла (по умолчанию это число равно числу значащих цифр, определенных значением системной константы Digits).
При численном интегрировании по умолчанию используется квадра-турная формула Кленшо-Куртиса (Clenshaw-Curtis). Если в подынтегральном выражении встречается сингулярность, то применяется специальная методи-ка символьного анализа для ее разрешения. Для задач с неустранимыми сингулярностями используется адаптивный метод двойных экспоненциаль-ных квадратур. Параметр flag позволяет явно задать метод численного интегрирования. Он может принимать значения, представленные в табл. 1.
Таблица 1. Значения параметра flag при численном интегрировании.
Применяется только квадратура Кленшо-Куртиса без вызова процедуры обработки сингулярности
Применяется адаптивный метод двойных экспоненциальных квадратур
Применяется метод квадратурной формулы Ньютона-Котеса, являющийся методом фиксированного порядка, и не эффективен для высоких точностей (Digits > 15)
Пример 3 помогает освоиться с использованием вышеприведенной методики.
Пример 3. Численное интегрирование функций.



Первый интеграл примера 3 вычисляется в аналитическом виде, но представляется через значение специальной функции интегральный косинус. Для получения ответа в виде десятичного числа применяется алгоритм чис-ленного интегрирования. Здесь же показано использование отложенной формы команды интегрирования для более удобного представления ответа.
Численное интегрирование даже функций, внешний вид которых представляется не достаточно сложным, может потребовать значительного времени. Если будет казаться, что Maple завис (а такое случается), то надо следить за изменением времени в правой части строки состояния. Если оно изменяется, то просто следует дождаться завершения интегрирования.
В системе Maple имеется набор команд для полного исследования функций: limit ( ) — для отыскания предела функции, sum ( ) — для нахождения всевозможных конечных сумм, series ( ) — для разложения функций в ряды Тейлора, Маклорена и Лорана, extrema ( ) — для исследования экстремумов функций как одной, так многих переменных, minimize ( ) и maximize ( ) — для поиска минимума и максимума функции на заданном промежутке. Описание всех этих и других команд можно, естественно, найти в Справке Maple.
Для нахождения предела выражения или функции в Maple используется команда limit (параметр 1, параметр 2). Первый параметр — выражение, второй параметр — имя переменной, приравненное значению переменной в точке предела. Необязательный третий параметр — направление предела. Если направление не задано, вычисляется стандартный двусторонний предел. Если предел не существует, в качестве ответа возвращается сообщение «undefined». Если Maple не способен вычислить предел (однако он может существовать), возвращается невыполненная команда.
В большом количестве случаев выражение, которое не имеет двустороннего предела, имеет односторонний предел:
В команде limit ( ) может присутствовать также необязательная опция complex или real в качестве третьего параметра аргумента. Эта опция определяет, в комплексной или действительной области вычисляется предел.
Задачи для самостоятельного решения.
1. Найти производную:













2. Найти интеграл:













3. Найти следующие пределы:














. 1.1; 2.1; 3.1; . 1.9; 2.9; 3.9;
. 1.2; 2.2; 3.2; . 1.10; 2.10; 3.10;
. 1.3; 2.3; 3.3; . 1.11; 2.11; 3.11;
. 1.4; 2.4; 3.4; . 1.12; 2.12; 3.12;
. 1.5; 2.5; 3.5; . 1.13; 2.13; 3.13;
. 1.6; 2.6; 3.6; . 1.1; 2.2; 3.3;
. 1.7; 2.7; 3.7; . 1.13; 2.12; 3.11.
1. Говорухин В.Н., Цибулин В.Г. Введение в Maple. Математический пакет для всех. — М.: Мир, 1997. — 208 с.
2. Дьяконов В.П. Математическая система Maple V. — М.: Издательство “Солон”,1998.
3. Двайт Г.Б. Таблицы интегралов и другие математические формулы. — М.: Наука. Главная редакция физико-математической литературы, 1983. — 176 с.
4. Матросов А.В. Maple 6. Решение задач высшей математики и механики. — СПб.:БХВ — Петербург, 2001.- 528 с.
5. Манзон Б.М. Maple V Power Edition — М.: Информационно-издательский дом “Филинъ”,1998г.