Maple для студентов физиков. Часть 1. Учебное пособие
.pdf
Глава 1. Принципы устройства Maple. Основы отладки программ
Два апострофа ставятся для создания строк (напр., "expr"), один " – для разграничения строк.
Предыдущие результаты (в данной сессии): на них можно сослаться с помощью символов:
% (последний результат), %% (предпоследний результат),
%%...%, k раз, ( k-й предыдущий),
> a+b; %^2; %%^2;
Последовательность (sequence) получается при помощи символа (оператора) формирования последовательности $.
> $ 2..5;
2, 3, 4, 5
Комментарии вставляются после знака # до конца строки. Текст также можно вставить, воспользовавшись Insert → Text.
Исходный код Maple доступен для большинства функций (package functions).
interface(verboseproc=2); print(factor); print(`plots/arrow`);
Константы
Типы чисел: integer, rational, real, complex, root, и т. д.:
-55, 5/6, 3.4, -2.3e4, Float(23,-45), 3-4*I, Complex(2/3,3); RootOf(_ Z^3-2, index=l);
Заранее определенные константы: символы, определяющие распространенные математические константы: true, false, gamma, Pi, I, infinity, Catalan, FAIL, exp(1) (см. ?ininames, ?constants).
Угол. Maple знает много угловых единиц. По умолчанию – радиа-
ны. (см. ?Units/angle), напр.:
convert(30*degrees,radians);
convert(30,units,degrees,radians);
11
Maple для студентов физиков
Пакеты ScientificConstants (Научные Константы) и Units (Едини-
цы) – научные и инженерные единицы в физике и математике (см. ?ScientificConstants, ?Units).
Функции (команды, процедуры)
Функцииилифункциональныевыражениявидаf(x) илиexpr(args) – это вызов функции или применение функции (или процедуры) к аргументам (args).
Активные функции (начинаются с маленькой буквы) применяют-
ся для расчетов, напр.: diff, int, limit.
Инертные функции (начинаются с большой буквы) применяются для показа шагов при решении задачи; напр.,: Diff, Int, Limit.
Два класса функций: библиотечные (определенные заранее) и функции пользователя.
Заранее определенные функции: большинство известных функций есть в Maple (diff, evalc, evalf, expand, series, simplify и др.). Кроме того,
есть множество специальных функций (см. ?FunctionAdvisor).
Элементарные трансцендентные функции: экспонента, лога-
рифмы (натуральный, общего вида, десятичный, двоичный), тригонометрические и гиперболические функции и обратные им.
exp |
ln |
log |
log[b] |
loglO |
ilog2 |
sin |
cos |
tan |
cot |
sec |
esc |
sinh |
cosh |
tanh |
coth |
sech |
csch |
arcsin |
arccos |
arctan |
arccot |
arcsec |
arccsc |
arcsinh |
arccosh |
arctanh |
arccoth |
arcsech |
arccsch |
|
|
|
|
|
|
>exp(x^2); >evalf(ln(exp(l)^3));
>evalf(tan(3*Pi/4));
>evalf(arccos(1/2));
>evalf(tanh(l));
Другие полезные функции (см. ?inifcn)
max(xl,x2,...); min(xl,x2,...);
round(x); floor(x); ceil(x); trunc(x); frac(x);
12
Глава 1. Принципы устройства Maple. Основы отладки программ
abs(x);
sign(expr);
n!; factorial(n); doublefactorial(n); quo(x); rem(x); gcd(x); lcm(x); ithprime(n); time(expr); with(combinat):fibonacci(n);
type(expr,type); print(exprl,expr2,...); lprint(expr);
–max, min: находят минимум/максимум чисел;
–round, floor, ceil, trunc, frac: преобразуют действительные числа в ближайшее целое и определяет часть числа;
–abs: модуль функции;
–sign, signum: знак числа или полинома и знак функции для действительных и комплексных выражений;
–n!, factorial, doublefactorial: расчет факториала и двойного факториала;
–ithprime, nextprime, prevprime, isprime: определяет i-е простое число, следующее наибольшее и предыдущее наименьшее простые числа и тест простоты;
–fibonacci (пакет combinat): генерирует числа Фибоначчи полиномов;
–quo, rem, gcd, 1cm: определяет частное и остаток полиномов (в алгоритме деления), наибольший общий делитель и наименьший общий множитель полиномов;
–time: полное время ЦП (в секундах) в сессии Maple;
–type (см. ?type): проверяет принадлежность выражения определенному типу (классу), возвращаемая величина true или false;
–print, lprint, printf: печать выражений. Функцию print можно использовать в циклах, строках и др. видах вывода.
Отладка / Debugging
Здесь собраны основные проблемы, которые возникают при отладке Maple – программ и указаны способы их исправления. Если вы ни разу не работали в Maple, то достаточно бегло просмотреть этот текст, чтобы знать, куда обращаться при поиске ошибок.
13
Maple для студентов физиков
А.Неожиданные результаты / Unexpected results
1.Если вы получили неожиданный ответ, то зачастую причина этого в том, что Maple понимает вашу переменную иначе, чем вы хотели бы ее представить. Например, вы думаете, что в действительности х – это только число, а на самом деле х – это переменная. Исправить можно так:
assume(x,real,y,real,...)
Тогда Maple будет представлять себе переменные х и у также, как и вы.
Однако учтите, что если вы, заставляя Maple выдавать вам числа, применили assume к какой-то переменной, то могут возникнуть проблемы.
Пример. Вы полагаете, что а – это переменная и используете ее в выражении с присвоением другой величине (например, b). После этого вы задаете для а значение и пытаетесь вычислить b. В результате получится ерунда.
Причина ошибки: Maple предназначен для работы с символами, а не с числами, и переменные рассматриваются как символы, а не ячейки памяти.
Вот пример:
>restart;
>assume(a,real);
>b:=cos(a);
>a:=2.;
>evalf(b);
Теперь посмотрите, что произойдет без применения assume
>restart;
>b:=cos(a);
>a:=2.;
>evalf(b);
Это означает, что применение assume возможно только в случаях, когда это абсолютно необходимо, причем возникающие при этом проблемы ясны.
2.Еще одна общая проблема, связана с «конкуренцией» знаков =
и:=. Если вы используете =, имея в виду присвоение (:=), то (иногда)
14
Глава 1. Принципы устройства Maple. Основы отладки программ
можете обнаружить, что переменная, которой (как вы думаете) что-то присвоено, на самом деле пуста, в ней ничего нет.
3.Maple говорит, что вы что-то делаете неправильно (неправильный символ – illegal character), но вы не видите в строке ничего неправильного.
(a) Посмотрите, что является первым пробелом в команде, напр., пробелом между знаком > и первым символом команды. Уберите этот пробел.
(b) Если проблема не исчезла, сотрите полностью строку и перенаберите ее заново.
4.Получено сообщение Error, ';' unexpected. Проверьте скобки. Эти ошибки встречаются чаще всего. Бывают и другие, но это –
ваши ошибки. Всегда. Вы их найдете, если будете знать синтаксис команд и руководствоваться правилом:
Машина железная, она не ошибается.
B. Ошибки при построении графиков / Plotting Errors
•empty plot (пустой график)
Синтаксическая ошибка при построении выражений. Например:
>restart;
>g:=sin(x);
>plot(g,0..5);
получаем ошибку empty plot.
Синтаксически правильно рисовать выражение так:
> plot(g,x=0..5);
или иначе
> plot(g(x),x=0..5);
•axes appear, but no function is plotted (есть только оси координат,
но нет графика)
15
Maple для студентов физиков
Так получается, если неправильно заданы параметры осей графика. Например, имеем функцию f, выражение g, и процедуру p:
>restart;
>f:=x->sin(x*t);
>g:=sin(x*t);
>p:=proc(x)
>global t;
>sin(x*t);
>end;
то все три следующие команды графики не дают график (дают нулевой график).
>plot(f(x),x=0..5);
>plot(g,x=0..5);
>plot(p,0..5);
Исправление: присвоить значение t:
> t:=5;
Теперь будут работать все три команды.
Причина: вертикальная ось задана так, что график не появится в окне:
>plot(-1-x^2,x=-1..1,y=0..2);
Исправим это:
>plot(-1-x^2,x=-1..1,y=-2..2);
•Error, (in plot) invalid arguments (Ошибка (в графике), неверные аргументы).
Возможно, вы пытаетесь построить график с переменной, которой было присвоено значение, как ниже:
>restart;
>g:=sin(x);
>x:=5;
>plot(g(x),x=0..5);
16
Глава 1. Принципы устройства Maple. Основы отладки программ
Исправление: отменить присвоение, как написано ниже (важны одиночные кавычки)
> unassign('x');
или
> x:='x';
тогда график заработает.
•Error, (in plot/transform) cannot evaluate boolean: -5.*z < -4 (Ошиб-
ка (в графике/преобразовании), невозможно вычислить логическое выражение: -5.*z < -4)
Такое возможно, если при задании переменной числового значе-
ния вы использовали = вместо :=; в любом случае проблема в том, что в переменной z нет значения.
Часто ошибка возникает при использовании π (у которого нет значения), вместо Pi.
•Parametric plot gives two plots instead (Выдаются два графика вме-
сто параметрического графика)
Это случается, если вы неправильно ставите скобки [ ]. Вот график двух функций
> plot([sin(s),cos(s)],s=0..2*Pi);
и здесь – параметрический график
> plot([sin(s),cos(s),s=0..2*Pi]);
Сравните внимательно расположение ] в этих двух случаях.
•Function plotting fails (График функции не получился)
Определив функцию f(x), вы пытаетесь нарисовать ее с помощью plot(f(x),x=0..5), a это не получается.
Попытайтесь вместо этого применить оператор:
>f:=x->fsolve(t=x/(1+exp(t)),t);
Это ошибочный синтаксис:
>plot(f(x),x=0..2);
Атакой синтаксис работает:
17
Maple для студентов физиков
> plot(f,0..2);
C. Ошибки дифференцирования / Differentiation errors
•Error, wrong number (or type) of parameters in function diff (Ошиб-
ка, неверное количество или тип параметров в функции diff).
То же, что и в проблеме неприсваивания в Plot errors (см выше),
но только для diff.
>restart:x:=5;
>diff(sin(x),x);
Нужно применить unassign x (не забудьте использовать кавычки):
>unassign('x');
>diff(sin(x),x);
D. Ошибки интегрирования / Integration errors
•Error, (in int) wrong number (or type) of arguments (Ошибка (в int)
неправильное число (или тип аргументов )
То же, что и в проблеме неприсваивания в Plot errors (см выше),но только для int.
>restart:x:=5;
>int(sin(x),x);
Нужно применить unassignx (не забудьте использовать кавычки):
>unassign(‘x’);
>int(sin(x),x);
E. Ошибки команды / Solve
•Nothing comes back (нет ответа на обращение)
Иногда Maple может решить систему, если коэффициенты являют-
ся рациональными числами, и не может, если они являются числами с плавающей точкой.
Поэтому не используйте x*0.01 – вместо этого используйте x/100.
18
Глава 1. Принципы устройства Maple. Основы отладки программ
F. Ошибки команды / Dsolve
См. раздел 7.
G. Алгебраические ошибки
•Error, too many levels of recursion or Warning, recursive definition of name (Ошибка, слишком много уровней рекурсии, или Предупреждение: рекурсивное использование имени).
Вы почему-то ввели переменную, равную функции от самой себя.
Простой способ получить такую ошибку:
> x:=1+x;
но вы можете получить ее не напрямую, если есть цепочка присваиваемых переменных и вы замкнули цепочку на нее же саму. Полезно знать, какие переменные чему присваиваются. Это можно найти с помощью команды anames(), даже если система столь запутана, что вы получаете ерунду. Если такое все равно происходит, примените restart.
•You want x to be a variable, but it is a number instead (Вы хотите,
чтобы х был переменной, но на самом деле это число):
Ранее x было присвоено значение, а вам снова нужна переменная. Исправление:
> x:=’x’;
Это – иной путь «расприсваивания» (to unassign) переменной.
H. Разные ошибки
•Error, (in assign) invalid arguments (Ошибка (в присваивании), не-
верные аргументы)
Вероятно, вы пытаетесь применить unassign к переменной, которой было присвоено значение и вы не используете кавычки, см. ниже:
>restart;x:=5;
Плохой способ
>unassign(x);
19
Maple для студентов физиков
Хороший способ
> unassign('x');
Учтите, что помощью этой команды можно сделать расприсваи-
вание (unassign)
> x:=’x’.
20
