Maple для студентов физиков. Часть 1. Учебное пособие
.pdf
Глава 2. Начало работы
Примените Maple для получения этого результата. Подсказки:
Есть несколько источников ошибок.
(1)Вы можете грубо напутать, применив знаки % при решении. Если так получится, то перейдите в
Tools->Options->Display->Output Display и выберите 2-D Math Notation вместо Typeset Notation.
(2)Даже без знаков % вы все еще получаете RootOf. Вы можете заставить Maple решать эти квадратные уравнения, используя команду allvalues. Найдите ее в online help и посмотрите, как она работает, а затем следуйте примеру ниже:
>eq1:=2*x+y^2=5;eq2:=x+3*y=3;
>s:=solve({eq1,eq2},{x,y});
>allvalues(s);
Даже после того как вы это сделаете, ваш ответ не будет выглядеть так же, как в задаче выше.
Чтобы приблизиться к нему, примените команду simplify(...,symbolic);. В этой команде ... означает выражение, которое вы пытаетесь упростить.
Решение дифференциальных уравнений
Пусть вам нужны два общих решения ДУ второго порядка
f'' + xf' + f = 0
где символ ' означает дифференцирование по x. Примените команду dsolve для решения ДУ:
>restart;
>dsolve(diff(f(x),x$2)+x*diff(f(x),x)+f(x)=0);
Переменная _C1 – это произвольный множитель первого общего решения и _C2 – это множитель второго. Оно содержит функцию erf(x), с которой вы пока не встречались (но придется). Решению ДУ посвящена Глава 8.
51
Maple для студентов физиков
Задача 1.19
Найти решение ДУ d y(x) x y(x) . После того, как Maple находит dx
общее решение, найдите значения произвольных констант из условия, что y(0) = 1 путем замены в решении x на 0, замены y на 1, и решении получившегося уравнения относительно _C1. Поставьте в тексте над и внутри группы комментарий к тому, что вы делаете.
В предыдущей задаче пришлось немного поработать, чтобы получить правильные начальные условия. Maple может это сделать сам:
|
|
|
2 |
||
(используя в ДУ f(0) = 1 и |
|
|
f (0) |
||
x |
|||||
|
|
|
|
||
d2 |
|
d |
|
|
|
|
|
f (x) x |
|
f (x) |
f (x) 0 ) |
dx |
2 |
|
|||
|
dx |
|
|
||
>Eq:=diff(f(x),x$2)+x*diff(f(x),x)+f(x)=0;
>dsolve({Eq,f(0)=1,D(f)(0)=2},f(x));
Подробнее об этом – в главе 8.
Работа с матрицами и решение систем линейных уравнений
В Maple есть целый пакет посвященный матрицам, векторам, линейной алгебре (cм. главу 6).
Рассмотрим небольшой пример решения системы линейных уравнений:
x + 2y + 3z = 6 4x + 5y + 6z = 15
7x + 8y + 10z = 25,
которая построена так, что решением будет [x,y,z] = [1,1,1]. Maple решит эту задачу так: сначала с помощью команды with(LinearAlgebra) надо подключить пакет линейной алгебры. Затем с помощью команды Matrix загрузить матрицу, с помощью команды Vector загрузить вектор правых частей и, последнее, решить систему с помощью команды
LinearSolve.
52
Глава 2. Начало работы
>restart;
>with(LinearAlgebra);
(Если не нужен вывод на экран – ставьте : после выражения)
>A:=Matrix([[1,2,3],[4,5,6],[7,8,10]]);
>b:=Vector([6,15,25]);
>c:=LinearSolve(A,b);
Задача 1.20
Jack вдвое старше, чем Jill. Сумма возрастов Jill и Jack равна возрасту Joan. Сумма трех возрастов равна 48. Определить возраст каждого. Решите задачу, изменяя приведенный выше пример. Прокомментируйте свои действия между командами Vector и LinearSolve.
Алгебраические действия
Это очень большая тема и одна из причин возникновения Maple. В главе 10 описаны алгебраические команды, которые вы будете применять в этом курсе. Используйте главу 10 в качестве справочника во всех случаях, когда вид ответа вас не устраивает. Затратьте несколько минут и просмотрите «по диагонали» главу 10 до раздела, посвященного матрицам. Пока не стоит вникать во все подробности. Просто ознакомитесь с возможностям, чтобы впоследствии знать, где искать ответ на интересующий вас вопрос. Затем вернитесь в это место и выполните задачу.
Задача 1.21
Используйте команды Maple для упрощения выражения
1 |
|
x |
|
x |
. |
|
|
|
|||
x |
x 1 |
x 1 |
|||
Вставьте комментарии к тому, что вы делаете (внутри и вне группы). И, в завершение, рассмотрим команды Maple для работы со слу-
чайными числами.
53
Maple для студентов физиков
Функции генерирования случайных чисел и переменных
randomizeO: k:=rand(a..b): k(); with(Statistics): X:=RandomVariable(Normal(a,b));
with(RandomTools): Generate(float(range=(a..b),digits=n)); AddFlavor(x=rand(a..b); SetState(state=value); with(LinearAlgebra): M:=RandomMatrix(n,n,generator=a..b, outputoptions=[shape=triangular[upper]]);
Выполните команды:
iquo(25,3);
irem(25,3); type(x^3*y+sqrt(y)*y,'polynom');
RandomTools[Generate](float(range=(2..9),digits=10)); with(combinat): fibonacci(10000); time(%);
54
Глава 3. ГРАФИКА
Эта глава посвящена методам построения графиков и их применению в физических задачах.
Рассматриваемые темы и задачи
Анимация |
Групповая скорость |
||
Биения |
Данные: чтение и рисование |
||
Волновые пакеты |
Лежандра полиномы |
||
– |
Полная Ширина на Поло- |
Неопределенности принцип |
|
вине Ординаты Максимума |
Фазовая скорость |
||
|
(ПШПМ) (англ. – Full Width at |
Фурье |
|
|
Half Maximum, – FWHM) |
– |
суммы |
|
распространение |
теорема |
|
Графики |
– |
свойство рядов (сходимость) |
|
– |
|
||
– |
векторного поля |
– |
особенности Гиббса |
– |
– |
||
контурные |
Функции |
||
параметрические |
– |
Бесселя: J, Y, I, K |
|
– |
эллипсы, гиперболы, пара- |
гамма |
|
– |
болы |
– |
ошибок erf |
– |
2D |
Интегралы |
|
3D |
– |
эллиптические K(k), E(k) |
|
– |
– |
||
Функции Maple и их опции
Display |
– |
constrained |
|
Plot |
scaling |
thickness |
|
|
– |
numpoints |
|
– |
|
||
– |
discont (разрыв) |
– |
labels |
color |
– |
title |
|
– |
– |
||
55
Maple для студентов физиков
– |
labelfont |
fieldplot |
|
coords |
pointplot |
||
plot3d |
inifcns |
||
– |
grid |
– |
erf(z) |
– |
labels |
P(n,x) |
|
– |
orientation |
– |
GAMMA |
– |
axes |
– |
EllipticK(k) |
– |
view |
– |
EllipticE(k) |
– |
shading |
– |
|
|
|
currentdir |
|
contourplot( |
readdata |
||
– |
contours |
seq |
|
– |
grid |
subs |
|
– |
coloring |
textplot |
|
– |
|||
animate |
sinh, cosh, tanh |
||
Создание 2D (x-y) графиков
Простейший график – это 2-d, или x-y график. Maple легко рисует и функции и выражения , но синтаксис команд разный и зависит от того, что именно рисуется: функция или выражение.
x 1
Вот график рационального выражения x 1 от x = –5 до x = 0.
Первым делом присваиваем это выражение переменной g и затем рисуем ее.
Учтите, что g – это выражение, а не функция, поэтому для того,
чтобы ее нарисовать нельзя использовать обозначение g(x).
>restart;
>g:=(x+1)/(x-1);
>plot(g,x=-5..0);
Тот же самый график можно получить, используя Maple для представления функций: (в функции намеренно оставлены два аргумента, чтобы вы видели, как построить ее график)
> f:=(x,y)->(x+y)/(x-y);
56
Глава 3. Графика
Чтобы сделать график с осью х, просто задавайте у значения в списке аргументов (у = 1 воспроизводит предыдущий график)
> plot(f(x,1),x=-5..0);
Нарисуем график в большем диапазоне. Заметьте, что вы можете просто ввести выражение внутрь команды plot, без присвоения его переменной.
> plot((x+1)/(x-1),x=-5..5);
Это не единственный график, который нам нужен. Проблема в том, что наша функция сингулярна при х = 1, поэтому Maple пытается показать нам большой диапазон по оси у. Поэтому мы ограничим диапазон по вертикали:
> plot((x+1)/(x-1),x=-5..5,-5..5);
Теперь это выглядит корректнее, но неправильно смотрится вертикальная линия при х = 1.
Maple просто соединяет точки, включая в график скачок от – до. Линию можно вычистить специальной опцией.
Опций много и, чтобы вполне овладеть графикой Maple, их надо знать. Поэтому напишем запрос:
>?plot[options]
инайдем, что нам нужна discont=true, которая говорит, чтобы Maple искал разрыв (duscontinuty) на графике и отключал рисование от точки к точке.
>plot((x+1)/(x-1),x=-5..5,-5..5,discont=true);
Поищемчто-тоболееэкзотическое, ипостроимдвекривыхнаодном графике, выделив их двумя разными цветами. Запрос для цвета:
> ?plot[color]
Можно взять стандартные цвета, можно выбрать какие-то другие. Например, для публикаций лучше, чтобы линии были потолще :
>plot([(x+1)/(x-1),cos(x)],x=-5..5,-5..5,discont=true,color=[navy,tan],thic kness=2);
57
Maple для студентов физиков
Вкоманде список функций помещается в квадратные скобку [ ],
авнутри их функции перечисляются через запятую. Опции, применяемые к отдельным кривым тоже помещаются в квадратные скобку [ ], а внутри их перечисляются через запятую (см. опцию color).
Предупреждение: Maple не всегда следует вашему порядку цветов.
Пример:
Пусть надо нарисовать график движения гармонического осцил-
лятора с затуханием, формула для которого имеет вид e t cos(t) ,
100
от t = 0 до t = 600.
Пишем:
> plot(exp(-t/100)*cos(t),t=0..600);
иувасвозникаетвпечатление, чточто-тонетак. ВынесказалиMaple (а сам он не догадался), сколько точек на графике, поэтому, если функция на графике дергается как сумасшедшая, нужно кое-что исправить.
Примените опцию numpoints, чтобы увеличить разрешение графика:
> plot(exp(-t/100)*cos(t),t=0..600,numpoints=400);
Пример 2: вам часто понадобится определить свое выражение для графика, применяя знак присвавивания (:=):
> F:=cos(omega*t)^3;
Поскольку оно явно зависит от t, мы сможем построить график
> plot(F,t=0..20);
но это не работает.
Получается пустой график – это Maple сообщает вам об ошибке. Причина ее в том, что пока не имеет значений, Maple график построить не может. Исправим ситуацию, задавая значения t и вычисляя соответствующее F.
> t:=7.;F;
но здесь не имеет значения, хотя и присутствует. Тогда присвоим ему значение:
58
Глава 3. Графика
> omega:=1.;plot(F,t=0..20);
– опять не срабатывает. Ну а в чем же дело теперь?
Проблема тоньше, и вы с ней встретитесь неоднократно, при таком способе построения графика.
Вы могли увидеть причину ошибки, вспомнив, что раньше задавали t значение равное 7. Maple помнит это присваивание и не хочет позволить применять t как текущую переменную на графике.
Чтобы исправить ситуацию, нужно отменить это присваивание командой unassign, аргументом которой будет 't', и затем запустить снова.
> unassign(‘t’);omega:=1;plot(F,t=0..20);
или применить сокращенную версию команды unassign:
> t:=’t’;omega:=1;plot(F,t=0..20);
Читается это так: «присвоить t ей самой (вернуть t собственному имени), стерев любые предыдущие присваивания».
Более «чистый» способ – никогда не делать присваивания с помощью знака :=, а применять команду замены subs, как ниже:
>restart;
>F:=cos(omega*t)^3;
>plot(F,t=0..20);
>subs(t=7.,F);
>plot(subs(omega=1,F),t=0..20);
Команды t = 7 и omega = 1 применяются только внутри команды subs. После этого переменные t и omega остаются неприсвоенными:
> t;omega;
Чтобы строить неплохие графики вам нужно знать как строятся надписи.
Чтобы ввести подписи к осям примняется опция: labels=["x","y"]. Для маленького заголовка – опция title="This is the title".
А если надо ввести текст где-то еще в графике – см. textplot в
Maple help.
Вот несколько примеров.
59
Maple для студентов физиков
> plot(sin(x^2),x=0..2*Pi,labels=["x","y(x)"],title="sin(x^2) function");
Заметьте, что в Maple sin(x^2) не печатался в принятом в математике виде. Хотелось бы знать, как такое сделать на графике. В ограниченномвидедоступныгреческиебуквыпутемзаменышрифтаlabelfont или titlefont на SYMBOL, как ниже (греческий алфавит специально подавлен , так что вы видите, как он кодируется)
>plot(exp(x/6),x=0..2*Pi,labels=["abcdefghijklmnopqrstuvwxyz","y(x)"], title="ABCDEFGHIJKLMNOPQRSTUVWXYZ",labelfont=[SYMBOL],titlefo nt=[SYMBOL]);
Ксожалению, я не знаю, как поставить смесь латинского и греческого алфавитов в знаках и заголовках.
Здесь нужны возможности работы с текстом, как в LaTex или MatLab, где такое возможно.
Обзор основных функций
Графическое представление функций математической физики (обзор).
Задача 2.1
Нарисуйте на одном графике функции sin(x), cos(x) и tan(x) в масштабе по горизонтали от –2π до 2π и по вертикали от –2 до 2. Список функций поместите в команду plot, задав каждой функции свой цвет.
Задача 2.2 |
|
|
|
ex |
|
|
|
e x |
||
|
|
|
|
, и |
||||||
Нарисуйте на одном графике функции sinh(x), |
|
|
|
мас- |
||||||
2 |
2 |
|||||||||
|
|
|
|
|
|
|
||||
штабы по горизонтали и по вертикали от –3 до 3. |
|
|
|
|
|
|
|
|||
Цвет у каждой функции свой. |
|
|
|
|
|
|
|
|
|
|
На другом графике нарисуйте функции |
ex |
|
и |
|
e x |
|
вместе с |
|||
2 |
|
2 |
|
|||||||
|
|
|
|
|
|
|
||||
cosh(x).
И наконец, на том же графике нарисуйте функции sinh(x), cosh(x) и tanh(x) и смотрите на них, пока не запомните, как они выглядят.
60
