Maple для студентов физиков. Часть 1. Учебное пособие
.pdf
Глава 3. Графика
Здесь L1, L2 и S1,S2 – соответственно листы и наборы функций и выражений.
Объединение разных графических объектов в массив графических объектов.
with(plots): |
L1:=[Gl,...,Gn]: |
L2:=[H1,...,Hn]: |
S1:={G1,...,Gn}: |
S2:={H1,...,Hn}: |
display(Ll,x=a..b); |
display(S1,x=a..b); |
display3d(L2,x=a..b); |
display(S2,x=a..b); |
G:=array(l..n): |
G[i]:=plot(fun[i],x=a..b): |
display(G); |
Здесь L1, L2 и S1, S2 – это листы и наборы lists и sets сохраняемых 2D и 3D графиков.
with(plots); f:=x->abs(sin(x)); g:=x->-cos(x); G1:=plot(f(x),x=-Pi..Pi): G2:=plot(g(x),x=-Pi..Pi): display({G1,G2},title="f(x) and g(x)"); G:=array(1..2); G[1]:=plot(sin(x),x=-Pi..Pi): G[2]:=plot(cos(x),x=0..Pi): display(G);
Текст в графике
textplot([[xl,yl,strl],..,[xn,yn,strn]],ops); textplot3d([[xl,yl,zl,strl],..,[xn,yn,zn,strn]],ops);
81
Глава 4. РАСЧЕТЫ
В Maple можно вычислять пределы, производные, интегралы, суммы, разложения в ряд, аппроксимировать функции и др.
Рассматриваемые в главе вопросы/задачи
Асимптотические ряды |
Asymptotic series |
Интегралы от функций Бесселя |
Bessel function integrals |
Производные |
Derivatives |
Неявное дифференцирование |
Implicit differentiation |
Табличные интегралы |
|
Неопределенные интегралы |
definite Integrals, |
Определенные интегралы |
indefinite Integrals |
Двойные интегралы |
double Integrals, |
Тройные интегралы |
triple Integrals |
Интегралы от полиномов Лежандра |
|
Пределы |
Limits |
Ортогональность |
Orthogonality |
Частные производные |
Partial derivatives |
Общая аппроксимация рядами |
Series approximation, general |
Пакет Student |
|
Суммы, конечные и бесконечные |
Sums, finite and infinite |
Теорема Тейлора о рядах |
Taylor's theorem (series) |
Интеграл напряжения |
Voltage integral |
Период маятника |
Pendulum period |
Электрический диполь |
Electric dipole |
Момент инерции |
Moment of inertia |
82
Глава 4. Расчеты
Упоминаемые в главе команды Maple
Alias |
fsolve |
Diff |
subs |
D |
csgn |
evalf |
expand |
evalhf |
simplify |
Digits |
assume |
Simplify |
series |
Limit |
asympt |
BesselJ |
convert |
BesselI |
asympt |
BesselK |
sum |
Gamma |
одинарные кавычки |
EllipticK |
значок ~ |
Pnm |
|
P(n,x) |
|
BesselJZeros |
|
taylor |
|
Краткое замечание о численных расчетах
Одно из преимуществ системы аналитических вычислений – это возможность точных расчетов или расчетов с заданной пользователем точностью.
Maple дает точный ответ на арифметические выражения с целыми и дробями:
135+638; -13*77; 467/31; (3+8*4+9)/2; (-5)^(22); -5^(1/3);
Большинство компьютеров имеет внутренне двоичное представление чисел с плавающей и фиксированной запятой.
Maple представляет числа в десятичной системе с помощью функций пользователя.
Численные аппроксимации:
evalf(expr) – численное представление expr (до десяти значащих цифр);
83
Maple для студентов физиков
Digits:=value – глобальное изменение определенной пользователем точности через переменную окружения Digits, где value Z (см. ?Digits, ?environment);
evalf(expr,n) – локальное изменение определенной пользователем точности;
evalhf(expr) – численное приближение для expr с помощью встроенного в комп двоичного представления чисел с плавающей точкой; UseHardwareFloats:=value – для представления численных результатов с помощью встроенной в софт или железо двоичного представления чисел с плавающей запятой (переменная окружения
UseHardwareFloats); а value может принимать значение true, false, или deduced (см. ?UseHardwareFloats, ?environment). Предустановленная величина value – это deduced, т. е. если Digits ≤ evalhf(Digits), то вы-
числения выполняются в представлении чисел с плавающей запятой для железа.
>evalf((-5)^(1/3)); evalf(sqrt(122)); evalf((1+sqrt(5))/2);
>evalf(exp(1),50); Digits:=50; evalf(exp(1)); 0.9;
>evalf(0.9); evalhf(0.9); restart: evalhf(Digits);
>UseHardwareFloats:=true;
>evalf(Pi); Digits;
Примечание. В приложениях (простых расчетах и графиках функций) быстрее выполняются расчеты на основе внутреннего представления чисел с плавающей запятой.
Пределы
sin(3x)
Пример: чтобы найти значение предела lim , просто при- x 0 x
мените limit в следующей последовательности операторов
>restart;
>limit(sin(3*x)/x,x=0);
Можно также воспользоваться функцией Maple
> y:=x->sin(3*x)/x;limit(y(x),x=0);
84
Глава 4. Расчеты
Чтобы узнать детали применения и работы команды, наберите ?limit но учтите, что справка содержит все о команде.
Задача 3.1
|
cos(x) 1 |
|||
Найдите lim |
|
|
|
. |
x |
2 |
|||
x 0 |
|
|
|
|
Дифференцирование
Дифференцирование – относительно простая операция, и поэтому достаточно ограничиться двумя примерами применения команд дифференцирования: один для выражений и один для функций.
Вначале для выражений.
Для 1-й, 2-й и 3-й производных предлагается применять формы, использованные в примере ниже для тангенса.
Можно либо использовать diff, которая непосредственно дает производную, или Diff и value, в которых производная вначале берется, а затем вычисляется.
Более применима Diff, потому что она дает вам возможность посмотреть, является ли получаемая вами производная именно тем, что вам нужно получить. Учтите, что в примерах ниже обратные кавычки применяются для обозначения производных: f', f'', и f'''.
>restart;
>f:=tan(x);
>`f'`:=diff(f,x);
>`f"`:=diff(tan(x),x$2);
>`f'''`:=Diff(f,x$3);
>`f'''`:=value(`f'''`);
>`f'''`:=simplify(`f'''`);
Теперь посмотрим, как работать с функциями.
> f:=x->tan(x)/x;
Diff не работает с функциями, кроме случая, когда нам надо использовать команду Maple D. Это очень мощная команда, несмотря
85
Maple для студентов физиков
на свой малый размер. Она может брать кратные производные от кратных функций (подробно ее возможности – см. справку ?D), но мы будем брать только первые производные от одной функции. Первая производная легкая (иногда кавычек нет и вместо них пишется обозначение fp вместо f', fpp вместо f'', и т. д.).
> fp:=D(f);
Напоминаю, что в результате исполнения D(f) получается функция fp(x). Есть много способов взять более высокие производные, но есть более общий.
>fpp:=D[1$2](f);
Вкоманде D внутри квадратных скобок цифра 1 означает число дифференцирований (в нашем случае – единственное) по первой переменной в списке аргументов, $2 означает, что это делается дважды, как в diff.
Несколько практических заданий, чтобы потренироваться.
Задача 3.2
Возьмите производные от перечисленных ниже функций. Для большинства из них используйте форму выражения, а для (a) и (d) – форму функции. (Учтите, что D разработано для работы с функциями, удостоверьтесь, что задаваемая вами конструкция есть функция, созданная, например, с помощью f:=x->sqrt(1+x^3)). Если запутаетесь, попытайтесь применить simplify для очистки. Обнаружите, что simplify не работает с функциями.
Чтобы сделать результат красивым, скопируйте то, что нужно упростить и присвойте новой переменной, отрежьте все ненужное, выполните команду, а затем заново постройте производную с помощью копирования/вставки. Эта комбинация Maple и редактирования – хороший способ свободной от ошибок алгебры.
Учтите, что J0(x) и I0(x) – это функции Бесселя; Maple называет их BesselJ и BesselI, соответственно. Функция Γ(x) – это Gamma в Maple.
См. также help чтобы узнать, как ими пользоваться.
(a) |
d3 |
1 x3 |
(b) |
d |
J0 |
(x) |
(c) |
d |
I1 |
(x) |
|
dx3 |
dx |
dx |
|||||||||
|
|
|
|
|
|
|
|
86
|
|
|
|
|
|
|
|
Глава 4. Расчеты |
(d) |
|
d2 |
etan(x) |
|
(e) |
d |
(x) |
|
|
dx2 |
|
dx |
|||||
|
|
|
|
|
|
|||
(f) |
|
d |
erf(x) (g) |
d |
K(k) |
|
|
|
|
|
|
|
|
||||
|
dx |
|
dk |
|
|
|||
(Это полный эллиптический интеграл первого рода; в Maple – это
EllipticK.)
Задача 3.3
Задача о нахождении трех минимумов. Рассмотрим функцию ln(x)J0(x). (Учтите: запись не мепловская, а математическая. Вам будет нужно записать задачу в мепловских обозначениях.)
(a)Вначале нарисуем функцию на отрезке [0,10].
(b)Посмотрите на график и найдите, где приблизительно находятся интервалы максимумов и минимумов. Затем возьмите производную функции и используйте команду fsolve для точного нахождения этих значений x. Назовите ваше выражение для производной fp, еcли хотите найти ее ноль вблизи 1.1, применив: fsolve(fp,x=1.1).
Задача 3.4
В квантовой механике вы встретитесь с функциями Лежандра, Pn(x) которые уже рассматривались выше. Новые функции называют присоединенными полиномами Лежандра Pnm . Для каждого целого n эти функции определены для значений m, принадлежащих интервалу [0..n], причем функция с m = 0 – это просто Pn(x); остальные функции определяются через производные функций Лежандра:
|
|
|
m |
|
dm |
|
|||
m |
m |
2 |
|
|
|
||||
|
|||||||||
|
|
|
|
2 |
|
|
|
|
|
Pn ( 1) |
(1 x ) |
|
|
|
|
m |
Pn (x) . |
||
|
|
|
|
|
|
dx |
|
|
|
Для большинства компьютерных языков это определение слишком громоздко, но Maple с ним легко работает, потому что думает символами, а не численно.
Вот функции для вычисления
>restart;
>with(orthopoly);
87
Maple для студентов физиков
> Pnm:=(n,m,x)-> (-1)^m*(1-x^2)^(m/2)*diff(P(n,x),x$m);
Прежде чем что-либо делать, представьте себе, что нам надо их проверить, поэтому давайте поставим нумерацию для n, m, и x.
> fsolve EllipticK Pnm(3,1,.5);
Возникает затруднение, связанное с тем, что именно возвращает вам fsolve EllipticK Pnm P(n,x).
Как мы видели в Главе 3 (в разделе для этой функции), она возвращает не число, а полином. Если задать х = 0.5, это число перейдет в функцию Pmn вместо х, а затем diff попытается взять производную (половинную), что конечно, бессмысленно и не даст результата. Посмотрите, что случится, если поставить на место х переменную вместо числа:
> Pnm(3,1,t);
Если вам нужен численный результат, вы можете использовать команду subs (подстановка):
> subs(t=.5,%);
или можете просто задать для t значение (которое сделает ее недоступной как символьную переменную):
> a:=Pnm(3,1,t);t:=0.5;a;
Это несколько раздражает, но, с другой стороны, об этом следует думать, да и почему в Maple вам все время нужны числа? Вы можете построить функцию, продифференцировать ее, проинтегрировать, использовать в дифференциальных уравнениях и т. п. Что может быть лучше явного выражения, полученного в результате этого действия? Поэтому для Maple это не проблема, а случай, деталь работы. Правда, такое получается, для всех ортогональных функций, которые вы подключаете с помощью команды with(orthopoly).
Вот еще одна трудность с функцией Pnm. Посмотрите, что произойдет, когда попытаемя вычислить для m = 0.
> Pnm(5,0,x);
88
Глава 4. Расчеты
При m = 0 предполагается, что в результате возвратится Pn(x), а это не получается. Причина в том, что мы попросили только 0-ю производную функции, что не может сделать команда diff. Позже, при изучении процедур мы вернемся к этой проблеме и исправим ее так, что она будет работать с m = 0.
>
Задание: сделайте график для пяти присоединенных функций Лежандра, которые получаются с P(5, x), т. е. примените n = 5 и m = 1,2,3,4,5 в Pnm. Постройте их в интервале x = -1..1 и поместите на один график в разных цветах, чтобы посмотреть, что получается при изменении m от 1 до 5 (n = 5). Возможно, что после взгляда на график вы захотите перенормировать функции так, чтобы они были одного размера. Сделайте это. В разделе интегрирования мы снова сделаем этот график и изучим естественный способ делать функции приблизительно одинакового размера.
Задача 3.5
Это задача из электричества, позаимствованная из следующего раздела про интегрирование.
Потенциал заряженной полусферы радиуса R с поверхностной плотностью заряда σ как функция z (z – ось симметрии полусферы) задается выражением:
> V:=-1/2*sigma*R*(-sqrt(R^2+z^2)+sqrt((z-R)^2))/(z*e0);
где e0 – обозначение диэлектрической постоянной ε0.
Компоненту электрического поля Ez можно получить из потенциа-
ла V дифференцированием: Ez V .
z
Примените Maple, чтобы взять эту производную и получить сложное выражение для Ez. Упростите его. Вы увидите незнакомую функцию csgn; проверьте что она значит ?csgn и удостоверьтесь в этом.
Положите σ = 1, R = 1, e0 = 1 и постройте V и Ez от z = –4 до z = 4. В электромагнетизме есть теорема, что если вы пересекаете плот-
ность поверхностного заряда, то скачок поля равен 0 . (Учтите, что в
89
Maple для студентов физиков
выражениях вместо 0 стоит e0, но лучше избегать индексированных переменных, которые Maple воспринимает как ссылки на элементы массивов.) Проверьте на вашем графике правильность скачка.
На вашем графике отрицательные z – для того, что находится ниже границы полусферы, положительные от 0 до R – внутри сферы и от R до бесконечности – над куполом сферы.
Дайте физическую интерпретацию графику.
Задача 3.6
Здесь представлен вариант дифференцирования, называемый неявным дифференцированием.
Пусть у вас есть уравнение, содержащее обе переменные x и y,
вроде x2 + y3 = 3. Вам надо найти dy , не решая для y(x). Это мож- dx
но сделать, неявно дифференцируя это уравнение, чтобы получить
2x dy 3y2 0 , затем решить относительно dx
сделать, предлагая вам сказать, что y зависит от x так:
>restart;
>eq:=x^2 + y(x)^3 = 3;
>deq:=diff(eq,x);
>dydx:=solve(deq,diff(y(x),x));
Если не хотите каждый раз печатать y(x), примените команду alias, чтобы сказать, об этом Maple, чтобы превращать y в y(x) (внутренние действия только в Maple), где бы она не встречалось
> restart;
разрешает нам использовать y вместо y(x)
>alias(y=y(x));
>eq:=x^2 + y^3 = 3;
>deq:=diff(eq,x);
>dydx:=solve(deq,diff(y,x));
90
