Maple для студентов физиков. Часть 1. Учебное пособие
.pdf
Глава 10. Символьная алгебра
>denom((1+x)/(3-x^2));
>numer((1+x)/(3-x^2));
но, возможно, не точно в той форме, какую вы ждете. Вы намного лучше сможете контролировать части таких выражений, применяя возможности вставки/коприрования:
> (1+x)/(3-x^2);
Используйте мышь для выделения числителя выражения выше, копируйте его с помощью (ctrl-c), затем вставьте в группу с помощью
(ctrl-v)
op
Эта команда выбирает части выражения.
Синтаксис: op(n,expr), где n – номер части выражения expr. Поэкспериментируйте с ней, даже если вам не надо что-то вы-
бирать.
>kk:=(1+x^2)/(sin(x)+tan(x))*cosh(x)/(1+tanh(x));
>op(1,kk);op(2,kk);op(3,kk);op(4,kk);
subs
Эта команда заменяет одну переменную на другую
>Eq1:=cos(x)^2-5*cos(x)+1;
>subs(cos(x)=y,Eq1);
>Eq2:=exp(2*x)-t^2=x*t;
>subs(x=xi,t=tau,Eq2);
При использовании subs вы, возможно, будете разочарованы:
>f:=x^4-3*x^2+5;
>subs(x^2=y,f);
Почему она не распознала, что x4 = y2?
Просто дело в том, что subs – символьная, литерная, а не алгебраическая команда. Есть алгебраическая форма subs называемая algsubs, которая много умнее. Она распознает что x2 это замена х.
> algsubs(x^2=y,f);
211
Maple для студентов физиков
convert
В завершение: команда convert на самом деле – это множество команд, в зависимости от того, какое преобразование вам нужно выполнить. Поэтому, прежде чем что-то сделать, вначале спросите в справке ?convert, чтобы выяснить все ее возможности.
Ниже приведены несколько полезных примеров-опций: Преобразуйте ответ из команды RootOf в вид с квадратными кор-
нями, кубическими корнями и т. д.
>eq1:=x=a*y;
>eq2:=x^2=b*y^2+c;
>s:=solve({eq1,eq2},{x,y});
>convert(s,radical);
Обратите внимание, что эта команда convert менее полная, чем allvalues:
> allvalues(s);
Команда allvalues права: должно быть два решения. Чтобы найти оба с convert(..,radical), сделаем так:
>convert(s,radical,1);
>convert(s,radical,2);
Число в конце команды говорит Maple, какой корень вы хотите найти.
Преобразуем ряд Тейлора в полином с помощью опции polynom
>g:=sqrt(1-x^2);
>h:=taylor(g,x,6);
>h2:=convert(h,polynom);
Преобразуем рациональные функции части-дроби с помощью оп-
ции parfrac
>k:=(2*x+1)/(x*(x+1));
>convert(k,parfrac,x);
Преобразуем рациональные функции в непрерывную дробь с по-
мощью confrac
212
Глава 10. Символьная алгебра
> convert(k,confrac,x);
Выразим функции в экспоненциальной форме с помощью exp
>convert(sin(x),exp,x);
>convert(sinh(x),exp,x);
Преобразуем выражения с синусами и косинусами в форму с тангенсами с помощью tan
>restart;
>a:=convert((2+cos(x)^2)/(2-sin(x)^2),tan);
>a:=normal(a);
Преобразуем выражения с тангенсами в форму синусамикосинусами с помощью sincos
>convert(a,sincos);
>simplify(%);
Преобразуем английские меры в метрические convert(,metric)
> convert(1.*acre,metric);convert(1.*MPH,metric);
Чтобы посмотреть какие английские меры преобразуются в метрические
> ?convert/metric
Преобразуем выражения, содержащие abs, Heaviside, signum и т. п. в функции piecewise
>F:=abs(x);
>F:=convert(F,piecewise,x);
Например, convert даст красивое определение функции signum
>G:=signum(x);
>G:=convert(G,piecewise,x);
Преобразуем комплексное выражение в форму polar
> convert(x+I*y,polar);
213
Maple для студентов физиков
Но это, вероятно, не точно то, что вы имели виду. К счастью, команда map сможет представить это в более приемлемом виде.
Команда map говорит Maple применить процедуру в первом входе (slot) map(a,b) к каждому из операндов объекта, во втором слоте, в данном случае к амплитуде и аргументу выражения. Процедура преобразования – это evalc, поэтому сделаем так:
> map(evalc,%);
Детали см. ?map.
ratpoly
Опция ratpoly преобразует ряд в рациональную функцию. Зачастую это очень удобный и компактный способ получить приближенное выражение для сложной функции. Синтаксис
convert(series,ratpoly,numdeg,dendeg)
где numdeg – порядок числителя полинома и dendeg – порядок знаменателя полинома. Эти два аргумента не обязательны и convert просто выберет соответствующие количества членов вашем ряде. Ниже несколько примеров с иллюстрирующими графиками, использующие taylor для генерации ряда.
Приближенная функция для синуса. Сравните точный результат (красным) с рациональным приближением (синим).
>sinap:=convert(taylor(sin(x),x=0,13),ratpoly);
>plot([sin(x),sinap],x=0..6,color=[red,navy,tan]);
>tanap:=convert(taylor(tan(x),x=0,10),ratpoly);
>plot([tan(x),tanap],x=0..5,-10..10,color=[red,navy]);
Это выглядит несколько странно: почему нужно строить приближение рациональной функцией той функции, что у меня уже есть? Можно предположить, что вы хотите иметь функцию Бесселя в коде, написанном на C или Java. Для получения простого приближения к этому можно применить Maple, использовав ratpoly, затем можно применить это приближение в коде. (Удостоверьтесь, что приближение не используется вне границ его применимости, что показывает расхождение синей и красной кривых.)
214
Глава 10. Символьная алгебра
Вот как строится аппроксимация функции Бесселя J0(x):
>J0ap:=convert(taylor(BesselJ(0,x),x=0,10),ratpoly);
>plot([BesselJ(0,x),J0ap],x=0..5,color=[red,navy]);
Или даже лучше, постройте график разности между точной функцией и приближенной, и тогда лучше будет видна область применимости.
> plot(BesselJ(0,x)-J0ap,x=0..5,-.001..0.001);
Стратегия:
Maple и дальше не станет делать в точности именно то, что вы хотите. В сложной задаче вам придется делать множество выкладок на бумаге, но при этом вы можете использовать Maple для вычисления некоторых деталей, частей. Maple лучше работает на небольших частях алгебраических выкладок, а не на большой задаче, поэтому используйте его частями и находите способ, как их затем скомбинировать на бумаге. А когда вы поймете, к чему надо стремиться, примените Maple для достижения конечного результата.
И наконец: применив Maple, голову (свою) и руки для получения конечного – красивого и простого – результата, нарисуйте его и сравните с первоначальным громоздким видом, чтобы быть уверенным в том, что вы сделали все правильно.
Алгебра матриц, содержащих выражения
Иногда вам нужно поработать с матричной алгеброй, что требует некоторых усилий. Ниже представлены приемы для управления возникающими при этом проблемами.
Это было очень краткое введение в очень большую тему. Делая ваши домашние задания, вы овладеете алгеброй Maple.
Рабочий пример: Пример из физики волн.
Делайте это задание, внимательно следя за тем, что происходит, а после переходите к следующим задачам.
Дисперсионное соотношение для электромагнитных волн в ионосфере
215
Maple для студентов физиков
|
|
|
2 2p k2c2 . |
|
|
Нужно найти фазовую скорость vp |
и групповую скорость |
||
|
|
|
|
k |
vg |
|
как функции . |
|
|
|
|
|
||
|
|
k |
|
|
Во-первых, решим относительно :
>restart:Eq:=omega^2=omega[p]^2+k^2*c^2;
>s:=solve(Eq,omega);
Мне нужно первое, которое присвоим переменной :
> omega:=s[1];
Что же пошло не так?
Мы использовали удобную возможность Maple создавать индексы, построили символ p, но omega[p] для Maple в действительности означает «p-ый элемент массива omega». Но – не массив, а p – не целое, поэтому присваивание p бессмысленно.
Вместо этого делаем так:
> w:=s[1];
Теперь получить фазовую скорость несложно:
>vp:=w/k;
>s:=solve(Eq,k);
Выбираем положительное и присваиваем его k
> k:=s[1];
Теперь с таким k посмотрим на выражение для vp
> vp;
что дает нам важный результат: если скорость волны ниже плазменной частоты p, то фазовая скорость – комплексная. Вот почему радиоволны AM-диапазона (низкие частоты) отражаются от ионосферы, тогда как для FM-радиодиапазона (высокие частоты) проходят. Вот почему вы можете слушать дальние AM-радиостанции
216
Глава 10. Символьная алгебра
ночью (когда ионосфера выше) – AM-радиоволны идут вверх и отражаются.
vp:=simplify(vp,symbolic);
Теперь попробуем групповую скорость
> vg:=diff(w,k);
Что же теперь не так? Мы сделали нечто неудачное, что может часто повторяться. В начале у нас была функция ω(k), а теперь имеем решение для k и присвоили ему формулу, поэтому теперь ω(k) разрушено:
> w;
Теперь остается только присвоить решение для k(ω) другой переменной, например, kk.
>restart:Eq:=omega^2=wp^2 + k^2*c^2;
>s:=solve(Eq,omega);
Нужно первое, и приcвоим его переменной w
> w:=s[1];
Получить фазовую скорость нетрудно:
>vp:=w/k;
>s:=solve(Eq,k);
Выберем положительное и присвоим его kk
> kk:=s[1];
Теперь посмотрим на выражение для vp с таким видом для k, заменяя kk на k
> vp:=subs(k=kk,vp);
и упрощая
> vp:=simplify(vp,symbolic);
теперь найдем групповую скорость
217
Maple для студентов физиков
> vg:=diff(w,k);
снова подставим для k
>vg:=subs(k=kk,vg);
>vg:=simplify(vg,symbolic);
Теперь все.
Задача 9.1
(1)Запишите функцию cos(10θ) в виде полинома по cos(θ).
(2)Запишите функцию cos(θ)3 в виде суммы членов, содержащих cos(θ) и cos(3θ).
(3) Уговорите Maple выдать вам соотношения для половин-
ных углов для |
|
|
, |
|
|
и |
|
|
. Попытайтесь применить и |
cos |
|
sin |
|
tan |
|
||||
|
|
2 |
|
|
2 |
|
|
2 |
|
expand и combine к каждому из этих трех выражений и их квадратам.
Задача 9.2–9.4
См. вторую часть Пособия.
Задача 9.5
Формулы для фокального расстояния f, расстояния до объекта o, и расстояние до изображения i для фокусирующей линзы или зер-
кала 1 1 1 . Даны f и o, тогда это уравнения можно решить от- i o f
носительно расстояния до объекта. Пусть f = 1 м (почти правильно для кривого зеркала, которое обычно висит в холле, если оно там, конечно, есть) и построим график i от o, начиная с 15 м до 0,5 м. Когда i становится отрицательным, то это означает, что изображение мнимое (как если бы оно располагалось за зеркалом), и потому что ваш глаз – это тоже линза, вы можете видеть мнимые изображения, которые тоже описываются этой (не совсем такой, посложнее) формулой. Посмотрите на график и прикиньте, что может отразиться в зеркале в холле. Подумайте, что произойдет, если объект – ваше
218
Глава 10. Символьная алгебра
лицо, расположенное так, что объект и изображение находятся в одном и том же месте.
Вы увидите, что изображение в зеркале не будет соответствовать очевидному решению на графике, потому что ваш глаз – это тоже линза. Подумайте, можете ли вы видеть изображения на бесконечности?
Задача 9.6
Эта задача из молекулярной физики, которую неприятно делать вручную, но Maple делает ее сходу.
Имеем воду массой Mw с удельной теплоемкостью cw = 4185 Дж/ кг/К и лед массой Mi с удельной теплоемкостью ci = 2000 Дж/кг/К. Удельная теплота превращения L = 333000 Дж/кг. Считая, что начальные температуры воды и льда – соответственно Tw и Ti, а точка замерзания T0 = 0, сделайте следующее:
(1) Полагая что весь лед плавится
(а) найдите формулу для конечной температуры Ti общей массы воды и льда.
(б) найдите формулу для массы льда, при условии, что конечная температура воды = T0 (конечная смесь полагается на точке плавления). Если вы забыли: теплота, теряемая водой:
Qw = Mwcw(Tw – Tf)
и теплота, приобретаемая плавящимся льдом
Qi = Mici(T0 – Ti) + MiL + Micw(Tf – T0).
Примените закон сохранения энергии. Для получения чисел, положите Mw = 1 кг.
Часть (б) имеет практическое значение: пусть вода с температурой 20° C и лед с температурой –10° C, сколько потребуется льда, чтобы заморозить 1 кг воды?)
(2) Полагая, что вся вода полностью замерзала и затем охлаждается ниже T0
(а) найдите формулу для конечной температуры общей массы льда.
(б) найдите формулу для массы льда конечная температура которого T0 (полагать, что конечная смесь практически замерзла). Здесь
219
Maple для студентов физиков
применимы похожие формулы, что и в части (1) , за исключением того, что это – простая формула для льда (он нагревается как лед от Ti до Tf, тогда как вода охлаждается до T0, а затем замерзает до льда и затем охлаждается как лед до Tf).
Другой практический вопрос: сколько льда потребуется при –10° C, чтобы почти заморозить 1 кг воды с температурой 20° C?
Ответ впечатляет.
Задача 9.7
См. вторую часть Пособия.
220
