Maple для студентов физиков. Часть 1. Учебное пособие
.pdf
Глава 4. Расчеты
Рассмотрим пример из физики.
Дисперсионные соотношения для электромагнитных волн в плазме = wp2 + k2c2, где wp – частота, называемая плазменной частотой.
Фазовая скорость этих волн задается как , тогда как групповая ско- k
рость задается как d . Сначала примените Maple для решения от- dk
носительно (k) и дифференцирования, чтобы найти формулы для фазовой скорости как функций от wp, k, c. Затем примените неявное дифференцирование для получения групповой скорости в зависимости от k, c и .
И, наконец, Maple также знает, как брать частные производные.
Рассмотрим следующие функции от x и y: f (x,y) cos(xy) . Вот первые y
производные по x и y, и затем вторые смешанные производные по обеим переменным x и y.
>restart;f:=cos(x*y)/y;
>diff(f,x);diff(f,y);diff(f,x,y);
Аздесь то же самое в представлении функций Maple:
>restart;f:=(x,y)->cos(x*y)/y;
>D[1](f);D[2](f);D[1,2](f);
В первом примере [1] означает дифференцирование относительно первой переменной в списке аргументов (x,y), что есть x; [2] означает дифференцирование по второму аргументу, т. е. y; и [1,2] означает дифференцирование относительно обеих переменных.
Задача 3.7
Найдите две первые производные и три вторые производные (дважды x, дважды y, и смешанное xy) следующей функции
|
4xy |
|
|
K |
|
, |
|
2 |
|||
|
|
||
|
(x y) |
|
91
Maple для студентов физиков
где K – полный эллиптический интеграл EllipticK. Используйте представление для выражений с diff. Попытайтесь применить expand и simplify, чтобы вычистить то, что смешивает результат.
Интегрирование
Чаще всего вы будете применять Maple для интегрирования. Обычно вы помните только простейшие правила, а, кроме того,
у вас есть таблицы интегралов, поэтому Maple бывает очень нужен. Но Maple не знает абсолютно всего, есть что-то и неизвестное ему. Поэтому следует знать, что делать, если Maple не сработал. Лучше всего иметь под рукой таблицы интегралов (вроде Градштейна-Рыжика, или Двайта).
Элементарные интегралы / Elementary integrals
Все интегралы, встречавшиеся на 1 курсе, Maple умеет брать. Для этого применяется команда int:
>restart;
>int(sin(x),x);
или
> f:=sin(x)*x;int(f,x);
Учтите: если f является выражением, то f(x) не надо использовать как аргумент.
Работа команды интегрирования с функциями:
>g:=(x,y)->sin(x*y)*x;
>int(g(x,y),x);
Имеется также инертная форма int, называется она Int, которая применяется для показа интегралов. Вы используете эту форму для документирования рабочего листа. Попробуйте:
> s1:=Int(exp(x),x);
Но будьте осторожны: Int только показывает, но не выполняет математические действия. Вы спросите: «Ежели она ничего не делает,
92
Глава 4. Расчеты
почему я должен захотеть ее применять?» Потому, что она показывает, правильно ли вы ввели интеграл, и это делает Int очень важным средством отладки.
После того как вы убедились, что выражение записано правильно, примените value, чтобы получить ответ.
Поэтому правильный путь получения упомянутого выше простого интеграла и получения ответа таков:
>s1:=Int(exp(x),x);
>s1:=value(s1);
Хорошо, чтобы вы всегда использовали такую форму интегрирования, комбинируя команды Int и value. Это будет одной из привычек, которая сэкономит вам многие часы, затрачиваемые на поиск глупых ошибок (а других, кстати, и не бывает).
Вы также можете вычислить определенный интеграл:
>s2:=Int(tan(x),x=0..1);
>s2:=value(s2);
A если вам нужно число, всегда есть команда
> evalf(s2);
Если вы хотите получить число, не используя evalf, просто задайте в int пределы с плавающей точкой, и вы сразу получите ответ:
>s2:=Int(tan(x),x=0..1.);
>value(s2);
Вы также должны знать, что Maple может вычислять интегралы с бесконечными пределами, но при этом вам надо дать ему указания с помощью команды assume (но это в том случае, если Maple может взять интеграл). Задайте вопрос ?int, чтобы посмотреть дополнительную информацию по опциям интегрирования.
Задача 3.8
Выполните интегрирование в представлении Maple для выражений в (a)-(d) и для функций в (e)-(g). Получите численные значения для (e) и (f). У вас будут затруднения с (g), и даже если вы заставите
93
Maple для студентов физиков
его работать и дать ответ, то результат будет выглядеть громоздко. Попытайтесь упростить его с помощью simplify.
(a) ln(x) dx
(b) |
1 x2 dx |
xdx
(c)1 x
(d)cosh(x) dx
1 |
1 x |
|
|
(e) 1 |
dx |
||
|
|||
|
1 x |
||
1x
(f)02 x3 1 dx (в верхнем пределе попробуйте оба варианта за-
писи числа: 1/2 и 0.5)
|
|
|
(g) 0 |
e ax cos(x)dx |
(Не знаете как действовать с ? Посмотрите |
на палитру слева.)
Интегрирование специальных функций
Maple может вычислять интегралы от специальных функций, таких как функции Бесселя, Лежандра и т. п. Иногда он выдаст вам красивый ответ, иногда выдаст назад интеграл без ответа (что означает, что он не может его взять), а иногда даст такой ответ, что волосы дыбом встанут. В последних случаях – не сдавайтесь. Иногда с интегралом надо немного поиграть, чтобы Maple дал приемлемый ответ. А если вам нужно только число, то примените evalf.
Например, пусть вам надо вычислить интеграл от функции Бесселя:
1
0 J0 (x)dx.
Попытайтесь так:
>restart;
>s1:=Int(BesselJ(0,x),x=0..1);
>value(s1);
94
Глава 4. Расчеты
и будете ворчать, потому что вы никогда раньше не видели функцию Струве.
Вам в действительности нужно число, которое получается с помощью evalf (Maple знает все о функциях Струве, даже если вы не знаете) или путем маленькой замены в записи команды (ищите, где записана десятичная точка).
>s1:=Int(BesselJ(0,x),x=0..1.);
>value(s1);
Запись десятичной точки рядом с единицей – вот и вся разница.
Задача 3.12
Попытайтесь проинтегрировать следующие функции Бесселя как неопределенные интегралы и как определенные интегралы в интер-
вале [1.0..2.0].
(a) J0 (x)dx (b) J0 (x)xdx (c) K0 (x)dx (d) I1 (x)dx
Учтите, что вы получаете эти функции с помощью BesselJ(0,x),
BesselK(0,x), и BesselI(1,x).
Задача 3.13
Попытайтесь проинтегрировать следующие полиномы Лежандра как неопределенные интегралы и как определенные интегралы в ин-
тервале [–1.0..1.0].
(a) P2 (x)x2 dx (b) P3 (x)P5 (x)dx
Учтите, что вы получаете эти функции, начав с команды with(orthopoly), а затем пишите P(3,x), и т. д.
Задача 3.14
Возможно, для вас будет сюрпризом ответ в части (b) предыдущей задачи (для определенного интеграла). Это не сюрприз, а чудо, и происходит оно из свойства, называемого ортогональностью. Это более детально рассматривается в курсе математической физики. Идея понятна, но полезно с ней познакомиться пораньше.
95
Maple для студентов физиков
На вопрос об ортогональности векторов вы ответите, взяв скалярное их произведение, и если оно = 0, то вы ответите, что векторы ортогональны. А как вы предпочитаете брать скалярное произведение? Вам надо умножить соответственные компоненты двух векторов и затем сложить результаты:
[1,2,3] · [4,5,6] = 4 + 10 + 18 = 32.
1
С интегралом вроде 1P3 (x)P5 (x)dx – такая же процедура. Для каждого значения x перемножаются значения двух функций и добавляются в интеграл. Поэтому имеет смысл говорить об ортогональности двух функций. Многие функции обладают свойством ортогональности
ив этом упражнении вы используете Maple для исследования некоторых из этих функций.
(a)С помощью Maple покажите, что функции sin(m x) и cos(m x) ортогональны друг другу при интегрировании в интервале [0, 2 ] – путем нахождения значений следующих интегралов для неравных m и n
ипри m = n.
02 cos(mx)cos(nx)dx |
02 sin(mx)sin(nx)dx |
02 cos(mx)sin(nx)dx |
(Подсказка: вы внесете путаницу, если не используете assume, чтобы сказать, что m и n – целые. Очевидно, что Maple подразумевает больше, чем только то, что это целые; он также подразумевает, что это разные целые, так что вариант с m = n реализуется с командой m:=n.)
(b) (Эта задача – расширение Задачи 3.13, см. выше.)
С помощью Maple покажите, что функции Лежандра Pn(x) ортогональныдругдругу, еслидвефункциисразнымизначениямиn интегри-
1
руются по интервалу [–1.0..1.0]. Также найдите значение 1Pn (x)2 dx.
Чтобы сказать Maple, что вы собираетесь работать с этими функциями, понадобится команда with(orthopoly). Когда вы попробуете найти значения интеграла от Pn(x)2, вам, вероятно, понадобится несколько различных значений n и, возможно, вы сможете найти общую формулу эмпирически. Это будет легче сделать, если вы не станете использовать десятичную точку в пределах, т. е. 1 и –1 вместо
–1. и 1. .
96
Глава 4. Расчеты
(c) С помощью Maple покажите, что функции Бесселя J0(αnx) орто-
гональны друг другу – с помощью интеграла 01 J0 ( p x)J0 ( q x)xdx , где
числа αp и αq – это нули J0(x). Эти нули можно получить из функции Maple BesselJZeros(n,m), где n – порядок функции Бесселя, т. е. n = 0 для J0, n = 1 для J1 и т. д., а m – число нулей (p и q – это значения m)? начиная с первого. (Например, BesselJZeros(0.,1) дает 2.404825558; учтите, что в списке аргументов важна десятичная точка в 0.)
Затем посмотрите, можете ли вы найти формулу для интеграла при p = q. (Подсказка: когда вы поставите p = q, вы сразу получите бессмысленные числа, поскольку BesselJZeros выдает вам обратно числа с плавающей запятой. Вы можете улучшить ситуацию.)
Замените BesselJZeros(0.,n) на BesselJZeros(0,n) (без десятичной точки), и пусть Maple пытается проинтегрировать символьно. Получите простой ответ.
Задача 3.15
Вернемся к присоединенным полиномам Лежандра и построим их так, чтобы они имели одинаковый масштаб. Мы можем масштабировать максимальные значения, но затем придется искать нули больших полиномов, что сложно. На деле легче рассчитать амплитуды в том же самом смысле скалярного произведения функций, как примененное в Задаче 3.14. Чтобы найти модуль вектора, мы берем квадраты компонент, суммируем их и вычисляем квадратный корень из этой суммы. Соответствующие операции для функций: квадрат функции, интегрирование ее по соответствующему интервалу, а затем корень квадратный.
Определение присоединенных полиномов Лежандра – как в Задаче 3.4
>restart;
>Pnm:=(n,m,x)-> (-1)^m*sqrt(1-x^2)^m*diff(P(n,x),x$m);
1
«Амплитуда» этой функции получена из Pnm 1Pnm (x)2 dx . Сде-
лайте заново графики в Задаче 3.4, но каждую функцию разделите на эту амплитуду и проверьте, что в новом графике у всех функций примерно одинаковый размер.
97
Maple для студентов физиков
Задача 3.16
Окончательно, посмотрим, что Maple делает с интегралами нескольких разных функций. Для заданий (a-c) вычислите неопределенный и определенный интегралы (последние – между .5 и 1.) Для (d) вычислите только определенный интеграл.
(a)(x)dx
(b)erf(x)dx
(c)K(x)dx (EllipticK)
(d)01e( x2.3 ) dx (Подсказка: этот интеграл попробуйте вычислить с
верхним пределом = 1 (целое число) и 1. (с плавающей точкой).)
Maple понадобится много времени чтобы что-то сделать с целым верхним пределом, но при плавающей запятой ответ получится сразу. Для получения ответа придется покрутиться, пробуя разные приближения.
Кратные интегралы
В физических задачах постоянно встречаются кратные интегралы вроде 01 01erf(xsin(y))dxdy . Такой интеграл можно вычислить с помо-
щью вложенной команды int, как показано ниже
>restart;
>s1:=Int(Int(erf(x*sin(y)),x=0..1),y=0..1);
>s1:=value(s1);
Как обычно, если Maple выдает интеграл обратно в виде формулы, это означает, что он не может его взять, но если вам нужно число, то можете применить команду evalf
> evalf(s1);
Или, если вам прежде всего нужно число, можете сказать Maple взять интеграл численно, с помощью команды
98
Глава 4. Расчеты
> evalf(Int(Int(erf(x*sin(y)),x=0..1.),y=0..1.));
Варианты этой команды говорят Maple вычислять численно с точностью до шести значащих цифр (или любого другого их числа), что указывается цифрой 6 после пределов интегрирования. Чем меньше цифр, тем быстрее вычисления
> evalf(Int(Int(erf(x*sin(y)),x=0..1.,6),y=0..1.,6));
Возможно, вам понадобится это применять, чтобы всегда иметь от Maple хоть какой-то ответ.
Задача 3.17
Найдите численный ответ для двойного интеграла.
12 12 J0 ( xy)dxdy.
Тройные интегралы
Бывает, нужны тройные интегралы, вроде
01 01 01 erf xsin(yz) dxdydz .
Прямая команда Maple для них
>restart;
>s1:=Int(Int(Int(cos(x)*erf(x*sin(y*z)),x=0..1),y=0..1),z=0..1);
>value(s1);
Если Maple возвращает их назад без вычислений, вы можете получить численный ответ с помощью evalf.
> evalf(s1);
Задача 3.18
Методом, показанным в предыдущей задаче, возьмите тройной интеграл в сферических координатах
2 2 r6 sin( )3 cos(r ) 1 sin( )2 drd d .
0 0 0
99
Maple для студентов физиков
Удостоверьтесь, что ваш ответ точен до четырех значащих цифр. Даже этот уровень точности потребует затрат времени. Попробуйте найти один из этих интегралов аналитически, чтобы вам затем пришлось вычислять только двойной интеграл, а не тройной.
Другой метод вычисления тройных и двойных интегралов – процедурами пакета student. Доступ к нему:
> with(student);
Чтобы узнать, что дает пакет – см.:
> ?student
Разложения в ряд
Одна из наиболее важных математических идей во всей физике – это идея о разложении в ряд. Она полезна, поскольку мы зачастую интересуемся не точным решением задачи, а наиболее существенным ее решением.
Рассмотрим, к примеру, функцию sech(x). Вы ее знаете, но, возможно, подзабыли. Однако, если вы даже вспомните, что это обратный гиперболический косинус, то это не поможет вам хорошо его визуализировать. А если эта функция вблизи нуля аппроксимируется
простой функцией 1 x2 ? Тогда вы увидите, что она равна единице
2
при x = 0 и что она спадает как парабола в обоих направлениях от x = 0. И, наконец, при очень больших x эта функция – приблизительно 2e( x ) . Теперь вы увидите, что она спадает к нулю экспоненциально от x = 0, так что в целом функция выглядит как стог сена.
Для большинства функций Maple знает, как найти приближение функции: команды этих приближений taylor, series, и asympt; далее увидим как они работают.
Теорема Тейлора: если функция f(x) имеет все производные в точке x = a, то для x вблизи a эту функцию можно приближенно представить в виде ряда
100
