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

на главную - закладки

Жанры

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

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

Шрифт:

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

> print(2*sin(1.)):

1.682941970

> 2*sin(1.):

> %;

1.682941970

Обратите внимание и на то,

что знак «двоеточия» в первом случае не сработал. Это связано с тем, что сам оператор print выполнил свою функцию — вывода.

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

> int(х^2,х=0..1);

> Int(х^2,х=0..1);

> evalf(%);

0.3333333333

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

1.11.4. Обработка и индикация ошибок

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

Алгоритмические, но синтаксически корректные, ошибки часто могут не распознаваться системой. Например, если в выражении a*sin(x) вы вместо аргумента х взяли аргумент b, то есть записали a*sin(b), то такую ошибку Maple распознать не может, ибо синтаксически как a*sin(x), так и a*sin(b) абсолютно корректны. Если вы перепутаете синус с косинусом и запишете a*cos(x), то такая ошибка также не будет распознана.

Ошибки в записи выражений, описывающих те или иные алгоритмы вычислений, не нарушающие синтаксическую корректность, системой Maple не распознаются. Контроль за такими ошибками целиком лежит на пользователе. Приведем еще один характерный пример ошибки, которую Maple не может распознать. Вводя выражение X/Y*Z, мы можем предположить, что это означает X/(Y*Z). Однако в Maple приоритет операций деления и умножения одинаков. Поэтому Maple вначале делит X на Y, а затем полученный результат умножает на Z:

> X/Y*Z:

> %;

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

Используйте блокировку вычислений с помощью знака двоеточия только в том случае, когда вы абсолютно уверены в правильности записи выражения — например, когда она очевидна и без повторения в строке вывода. Иначе вы можете не заметить вкравшейся в вычисления серьезной ошибки. В нашем примере мы получили бы верный результат, заключив выражение Y*X в круглые скобки. Как обычно, они предназначены для задания явного приоритета выполнения операций — в нашем случае вначале будет вычислено выражение в скобках (Y*Z), а затем уже X будет поделено на это выражение:

> X/(Y*Z);

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

> son(1.0);

son(1.0)

В этом примере вместо имени функции sin введено ошибочное имя son. Maple воспринимает его как некую, введенную пользователем, функциональную зависимость, и потому просто повторяет запись и не выводит сообщение об ошибке. А вот другая ситуация — имя функции sin введено верно, но вместо десятичной точки при задании вещественного числа 1.0 использована запятая:

> sin(1,0);

Error, (in sin) expecting 1 argument, got 2

В данном случае Maple «знает», что работа идет с его встроенной функцией синуса, которая должна иметь единственный аргумент. Задание (1,0) означает, что пользователь ввел вместо вещественного числа два целочисленных числа, разделенных запятой. На это Maple отреагировал выдачей сообщения об ошибке (на экране дисплея оно имеет малиновый цвет). Исправьте ошибку, и синус единицы будет благополучно вычислен:

> sin(1.0);

.8414709848

А вот еще одна типичная ситуация — в последовательности выражений опущен знак-разделитель (двоеточие или точка с запятой):

> X:=2: Y:=3| Z:=4:

Error, missing operator or ';'

Тут Maple не только реагирует на ошибку, но и пытается подсказать, что именно пропущено. Более того, маркер ввода в виде мигающей вертикальной черточки будет помешен на место ошибки, и вы сможете тут же устранить ошибку. Правда, подсказки не всегда точны — в нашем случае явно пропущен разделитель в виде двоеточия, a Maple сообщает о пропуске точки с запятой. Впрочем, откуда системе знать, хотим мы вывести результат операции Y:=4 сразу (для этого нужен разделитель в виде точки с запятой) или откладываем на потом (с помощью символа двоеточия).

Вот еще один пример характерной ошибки — три знака * подряд:

> 2**|*3*sin(1.);

Error, `*` unexpected

Здесь Maple подсказывает, что один оператор * надо убрать — два знака * подряд означают вполне законный вариант оператора — возведение в степень. При этом маркер ввода вновь указывает место ошибки. Проанализируйте следующие простые примеры:

> 2**3*sin(1.);

6.731767878

> 2^3*sin(1.0);

Поделиться:
Популярные книги

Совок 4

Агарев Вадим
4. Совок
Фантастика:
попаданцы
альтернативная история
6.29
рейтинг книги
Совок 4

Усадьба леди Анны

Ром Полина
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Усадьба леди Анны

Береги честь смолоду

Вяч Павел
1. Порог Хирург
Фантастика:
фэнтези
попаданцы
рпг
5.00
рейтинг книги
Береги честь смолоду

Ваше Сиятельство 8

Моури Эрли
8. Ваше Сиятельство
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Ваше Сиятельство 8

Пожиратель душ. Том 1, Том 2

Дорничев Дмитрий
1. Демон
Фантастика:
боевая фантастика
юмористическая фантастика
альтернативная история
5.90
рейтинг книги
Пожиратель душ. Том 1, Том 2

Газлайтер. Том 8

Володин Григорий
8. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Газлайтер. Том 8

Мама для дракончика или Жена к вылуплению

Максонова Мария
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Мама для дракончика или Жена к вылуплению

Кодекс Охотника. Книга XXII

Винокуров Юрий
22. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
5.00
рейтинг книги
Кодекс Охотника. Книга XXII

"Фантастика 2023-123". Компиляция. Книги 1-25

Харников Александр Петрович
Фантастика 2023. Компиляция
Фантастика:
боевая фантастика
альтернативная история
5.00
рейтинг книги
Фантастика 2023-123. Компиляция. Книги 1-25

Измена. Он все еще любит!

Скай Рин
Любовные романы:
современные любовные романы
6.00
рейтинг книги
Измена. Он все еще любит!

Ох уж этот Мин Джин Хо 1

Кронос Александр
1. Мин Джин Хо
Фантастика:
попаданцы
5.00
рейтинг книги
Ох уж этот Мин Джин Хо 1

Я — Легион

Злобин Михаил
3. О чем молчат могилы
Фантастика:
боевая фантастика
7.88
рейтинг книги
Я — Легион

Магия чистых душ 3

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Магия чистых душ 3

Бальмануг. Невеста

Лашина Полина
5. Мир Десяти
Фантастика:
юмористическое фэнтези
5.00
рейтинг книги
Бальмануг. Невеста