Maple для студентов физиков. Часть 1. Учебное пособие
.pdf
Глава 2. Начало работы
Опять появится сообщение об ошибке, в котором говорится, что Maple пытается дать вам число, но не может, так как не знает, что такое . (Это ведь просто греческая буква, а не то, что вы хотите). Нужно было набрать Pi. Как только вы это сделаете, все заработает:
> sin(Pi/2.);
>
Если Maple, пытаясь получить число, дает неожиданный результат, это можно проверить с помощью evalf. При попытке вывести (это) число, вы поймете в чем причина ошибки.
•check := vs =
>
Ошибка повторяется: для уравнений применяют только =; а присвоение – это a:=5.
•plot (создание рисунка)
Чтобы узнать причину ошибки, надо посмотреть, что происходит с числами. Лучший способ – построить график. Например, нужен интеграл
>restart;
>int(sin(x)/(1-cos(x)),x=0..Pi);
Вы надеялись получить число, а Maple дал вам бесконечность. Можно использовать аргументы с плавающей запятой для проверки функций вроде этой:
> sin(1.)/(1-cos(1.));
Чтобы просмотреть все числа, нужен график команда Maple plot
> plot(sin(x)/(1-cos(x)),x=0..Pi);
>
Теперь видно, что подынтегральное выражение сингулярно в точке x = 0, так что ответ Maple был верен.
41
Maple для студентов физиков
•assume
Иногда Maple не может сделать то, что вы хотите потому, что вы
думаете о частной задаче, а Maple думает глобально. Например, надо вычислить интеграл:
>restart;
>int(exp(-a^2*x^2),x=0..infinity);
Вам нужна формула, содержащая a, а вместо этого получаете предельное выражение. При этом Maple дает вам сообщение об ошибке, которое поможет, напомнить, что поскольку Maple может работать с комплексными величинами, то он не может сразу сказать, является ли a2 положительным или отрицательным. Все получится, если вы в команде assume укажите, какой должна быть величина а.
>assume(a,real);
>int(exp(-a^2*x^2),x=0..infinity);
посмотрите help команды assume, там сказано, как получить нужный результат.
Предупреждение: Применив assume к переменной, можно получить проблемы. Они возникнут в следующей цепочке:
пусть нечто задано для a, которую затем вы используете в выражении и присвоите ее другой переменной (например, b), потом дадите а значение, и попытаетесь вычислить b. Посмотрите:
>restart;
>assume(a,real);
>b:=cos(a);
>a:=2.;
>evalf(b);
Теперь посмотрим, что получилось с той же последовательностью без assume
>restart;
>b:=cos(a);
>a:=2.;
>evalf(b);
42
Глава 2. Начало работы
Урок в том, чтобы применять assume только в случае крайней необходимости.
Окончательно вам может понадобится предположить два условия для переменной, например, одновременно c > 0 и c < 1. Maple дает два пути сделать это. Можно поставить оба условия в одну команду assume
> assume(c>0,c<1);
или сделать это в два (или больше) шага, применяя команду additionally
>assume(c>0);
>additionally(c<1);
Причина: нельзя одновременно применять две команды assume, поскольку второе применение команды assume к той же переменной сотрет предыдущие установки, сделанные этой командой для этой переменной.
•restart
Иногда Maple тратит много времени на расчеты из-за того, что за-
громожден результатами вашей предыдущей работы в течение сеанса. Вы об этом забыли, но Maple помнит, и это отражается на скорости расчетов.
Простой пример того, когда проще начинать расчеты с начала. Пусть вы используете функцию Бесселя J0 (x)
>restart;
>x:=1.5;BesselJ(0,x);
изатем после нахождения нескольких значений х, вы решаете построить график
>plot(BesselJ(0,x),x=0..5);
Возникает непонятная ошибка, от которой легче всего избавиться, начав все заново
> restart: plot(BesselJ(0,x),x=0..5);
43
Maple для студентов физиков
Команда restart – это эквивалент перезагрузки, и вы будете пользоваться ею регулярно.
(Примечание: график не получился из-за того, что мы пытались построить график с помощью переменной х, которой до того присвоили значение 1.5. Если применить неприсвоенную заранее переменную, то все получится):
> plot(BesselJ(0,t),t=0..5);
Важные мелочи, которые можно сделать прямо сейчас
Пока вы знаете немного, но, все равно, интересно применить свои знания на практике.
Интегрирование
Интегрирование выполняется с помощью команды int. Неопределенный интеграл e( x) sin(x) dx вычисляется так:
>restart;
>int(exp(-x)*sin(x),x);
Другой способ: запишите функцию в группу, щелкните правой кнопкой на записи и в меню выберите Integrate:
> exp(-x)*sin(x);
При использовании правого щелчка Maple автоматически присваивает результат переменной, начинающейся с буквы R.
При первом использовании это будет R; следующая – R0, затем
R1, R2, и т. д.
Можно выбрать команду интегрирования из палитры Expression (слеваотрабочеголиста). Курсорустанавливаетсявгруппе, авпалитре Expression выбирается символ интегрирования. Появившаяся команда требует небольшого редактирования в соответствии с вашей задачей.
Определенный интеграл 01 e( x) sin(x) dx
44
Глава 2. Начало работы
> s1:=int(exp(-x)*sin(x),x=0..1);
Это правильное выражение, но вам, возможно, нужно число?
> evalf(s1);
Этого Maple сделать не может.
> s2:=int(exp(-x^4)*cos(x),x=0..1);
результат красиво распечатывается и оставляет вас в заботах о том, как же получить число. Это возможно с помощью команды evalf
> evalf(s2);
Задача 1.10
Найдите численное значение интеграла 02 e x dx . Комментарий вставьте в строку Maple с помощь знака #.
Дифференцирование
Возьмите производную с помощью команды diff
>restart;
>f:=sin(x)/sqrt(1+x^2);
>d1:=diff(f,x);
(Или примените правый щелчок мыши)
Возможно, вам не нравится получавшееся, и вы хотите иметь результат в нормальной форме. Как это сделать обсуждено в Главе 10.
> normal(d1);
Можно взять вторую производную
>d2:=diff(exp(-x)*tan(x),x$2);
Результат можно упростить:
>simplify(d2);
изатем представить tan(x) полиномом по степеням x
>sort(%);
45
Maple для студентов физиков
Теперь имеем красивый ответ и присвоим его переменной d2. В этом вычислении впервые применен значок %, означающий
переменную, содержащую результат предыдущего вычисления.
Это полезно, поскольку, если одна из команд примененных для улучшения не сработает, то неизвестно что будет в d2, и придется искать ошибки, то лучше записать так:
> d2:=%;
Эти алгебраические команды обсуждены в Главе 10. Привыкайте использовать Главу 10, чтобы получать результаты вы-
числений Maple – выражения в красивой и устраивающей вас форме.
Возьмите первую производную от функции cos cos cos cos x . Прокомментируйте в пределах группы и над командой diff то, что вы делаете.
Построение последовательности
В расчетах исследуются последовательности чисел, сходящихся к пределу и бесконечные суммы таких последовательностей. В Maple последовательности строятся командой seq. Она работает так:
>restart;
>s:=seq((5+n)/(3+n),n=1..50);
или
> evalf(s);
что дает нам подсказку, что в пределе последовательность сходится к 1.
Или вы можете построить последовательность выражений, вроде членов степенного ряда. Ниже представлены члены ряда для экспоненциальной функции
> seq(x^n/n!,n=1..20);
46
Глава 2. Начало работы
Задача 1.12
Сгенерируйте первые 15 членов последовательности с общим
членом вида |
sn |
dn cos(x) |
. Вставьте комментарий к тому, что вы |
||||
|
|
|
|
|
|||
dx |
n |
1 x |
|||||
|
|
|
|
|
|
||
делаете внутри группы под командой seq.
Суммирование рядов / Sum a series
Найдите формулу для суммы целых чисел до 6-й степени с помощью команды sum
>restart;
>s1:=sum(k^6,k=1..N);
>simplify(s1);
>sort(%);
Найдите результат суммирования обратных величин целых чисел до 6-й степени от 1 до
> s2:=sum(1/n^6,n=1..infinity);
и затем переведите результат в число
> evalf(s2);
Задача 1.13
Найдите сумму обратных квадратов целых нечетных чисел от 1 до. Вставьте комментарий к тому, что вы делаете в строку текста над группой, содержащей команду sum.
Ряды Тейлора / Taylor series
Всложных задачах физики любят строить приближенные решения
спомощью рядов Тейлора.
Напомню, что любая функция f(x), дифференцируемая бесконечное число раз, может быть аппроксимирована в окрестности точки x = a полиномом по (x – a) в виде ряда Тейлора:
f(x) = f(a) + f'(a)(x-a) + f''(a) (x-a)^2/2! + f'''(a)(x-a)^3/3! + ...
47
|
|
|
|
|
|
Maple для студентов физиков |
|
|
Это очень полезно для получения приближений. Например, вели- |
||||
чина |
1 |
, появляющаяся в теории относительности. Иногда, если |
||||
|
||||||
|
|
|
1 |
v2 |
|
|
|
v |
|
c2 |
|||
|
|
|
||||
|
мало, ее удобно представить в приближенном виде. Используйте |
|||||
|
|
|||||
c
для этого команду taylor.
>restart;
>taylor(1/sqrt(1-x^2),x,5);
где число 5 означает, что в разложении требуются члены вплоть до x5. Член (x6) в ответе означает, что погрешность разложения имеет порядок x6.
А если вам надо работать с этим разложением на полиномы? Вы можете конвертировать этот ряд в полином с помощью команды convert(...,polynom):
> convert(%,polynom);
Задача 1.14
Найдите приближенную формулу для функции ecos(x) включая члены вплоть до x10. Покажите коэффициенты этого разложения в виде рациональном и с плавающей точкой. Вставьте в текст комментарий того, что вы делаете, сразу под командой taylor.
Построение функций / Plot functions
Для быстрого построения функции используйте plot
>restart;
>plot(exp(sin(x)),x=0..50);
Задача 1.15
Постройте график функции e x cos(x) от x = 0 до x = 100. По-
25
ставьте комментарий о том, что вы делаете в разделе над командой plot.
48
Глава 2. Начало работы
Задача 1.16
Однородно заряженный диск радиусом a с плотностью заряда σ создает электрическое поле Ez вдоль оси z (ось проходит из центра диска по нормали к поверхности), которое записывается так:
|
|
|
|
z 0a |
r |
|
|
dr |
||
|
2 |
|
||||||||
|
|
Ez (z) |
|
(r2 z2 ) |
3 |
|
|
|
. |
|
|
|
|
2 0 |
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
Найти простое алгебраическое выражение для Ez (z) . Затем задай- |
||||||||||
те значения σ = 10–6 |
C |
, 0 |
8.854 10 12 Nm2 |
, и a = 0.1cm и постройте |
||||||
2 |
|
|||||||||
|
m |
C |
|
|
|
|
|
|||
график Ez от z = –5a до z = 5a. Примечание: применение чисел в виде:
1e-6 и 8.854e-12
ускоряет расчеты численных значений.
Решение трудных уравнений
Пусть требуется решить уравнение e x x . Применим solve к этому уравнению
>restart;
>sol:=solve(exp(-x)=x,x);
Ответ получается в терминах функции, которую вы раньше никогда не знали и не видели, а на самом деле вам нужно число. Нет проблем, применим
> evalf(sol);
Другой способ. Он применяется, если вы достаточно уверены, что вам нужно символьное, а численное решение, и можно указать область, где его искать. Указанием для Maple, что вам нужно только численное решение уравнения, является команда fsolve. В нашем случае укажем, что Maple должен начать искать решение вблизи x = 1:
49
Maple для студентов физиков
> fsolve(exp(-x)=x,x=1);
Если вы не угадали, где искать решение, то поиск займет больше времени, или вы его вообще не получите, если ответ – в бесконечности.
Задача 1.17
Найти решение уравнения cos(x) = x. В группе поместите комментарий к тому, что вы делаете, сразу после команды. В этом тексте используйте математический режим Maple (примените Ctrl-r) чтобы ввести в текст уравнение cos(x) = x.
Maple будет также выдавать символьное решение уравнений (систем уравнений). Например, вот как Maple символьно решает квадратное уравнение:
>Q:=a*x^2+b*x+c=0;
>solve(Q,x);
Авот как выглядит символьное решение общей задачи двух уравнений с двумя неизвестными х и у и коэффициентами от a до f :
>E1:=a*x+b*y=e;E2:=c*x+d*y=f;
>solve({E1,E2},{x,y});
Это проще, чем применять пакет линейной алгебры Maple.
Задача 1.18
При расчете работы трубки Вентури уравнение Бернулли имеет
вид:
P1 v12 P2 v22
2 2
и уравнение непрерывности
A1v1 = A2v2
следует решать совместно, чтобы получить формулу для v2:
v2 A1 |
2(P1 P2 ) |
||
|
|
. |
|
2 |
2 |
||
|
(A1 |
A2 ) |
|
50
