Maple для студентов физиков. Часть 1. Учебное пособие
.pdf
Глава 5. Комплексные числа и функции
рисунка, график хороший. (Другой способ визуализировать электрическое поле безо всяких ненужных клювов – применить команду fieldplot, см. главу 3. См. также раздел меню Edit, щелкните по Find, и затем задайте fieldplot.)
Задача 4.14
Создайте контурный график, вроде предыдущего, но для:
(a)двух линейных зарядов одинаковой плотности, один в z = i другой в z = –i;
(b)двух линейных зарядов с одинаковыми амплитудами плотности, но разного знака, находящихся там же, где и в задаче (а);
(c)поместите линейный заряд величиной 2 в z = –i и один величиной 1 в z = i.
Понадобится более тонкая сетка и больше контуров, чтобы увидеть, что происходит.
Посмотрите, можете ли вы указать точку, где электрическое поле = 0. Можно использовать комплексные функции для изучения поведения потенциала и напряжения вблизи проводящих углов. Рассмотрим
следующий контурный график для функции iz2.
>restart:with(plots):
>p1:=contourplot(Re(I*(x+I*y)^2),x=0..5,y=0..5,grid=[30,30],contours=40, coloring=[cyan,blue]):
>p2:=contourplot(Im(I*(x+I*y)^2),x=0..5,y=0..5,grid=[30,30],contours=40, coloring=[red,red]):
>plots[display]([p1,p2],scaling=constrained);
Повторим: потенциал дается действительной частью, а поле – комплексной частью. Получаем:
iz2 = – xy + i(x2 – y2).
На графике голубым обозначены эквипотенциальные поверхности, красным – линии поля. При V = –xy заземляются обе оси (x и y), а мы смотрим на поведение электрического поля в заземленном правом углу. Видно, что в углу красные линии поля находятся далеко друг от друга, показывая, что здесь электрическое поле = 0. А как ведет себя электрическое поле, если мы приближаемся к углу?
121
Maple для студентов физиков
Вспомним, что Ex |
|
V |
и Ey |
|
V , так что Ex пропорциональ- |
|
|
||||
|
x |
|
y |
||
но y и Ey пропорционально x, поэтом, приближаясь к углу, где x = 0 и y = 0, оба поля линейно спадают до 0.
|
|
|
i |
|
2 |
|
|
Используя функцию |
|
|
|
|
|
|
|
|
|
||||||
e |
|
6 z |
3 |
,можно найти функцию, которая |
|||
представляет поведение поля вблизи выпуклого угла, в отличие от вогнутого:
>restart:with(plots):
>p1:=contourplot(Re(exp(-I*Pi/6)*(x+I*y)^(2/3)),x=-5..5,y=-5..5,grid=[30, 30],contours=40,coloring=[blue,blue]):
>p2:=contourplot(Im(exp(-I*Pi/6)*(x+I*y)^(2/3)),x=-5..5,y=-5..5,grid=[30, 30],contours=40,coloring=[red,red]):
>plots[display]([p1,p2],scaling=constrained);
Чтобы увидеть, что это поле угла, игнорируем третий квадрант и посмотрим на 1-й, 2-й, 4-й квадранты. Голубые линии – это эквипотенциальные поверхности, и они сильно сгущаются вокруг угла, а красные линии электрического поля радиально исходят из угла. В цилиндриче-
2
ских координатах этот потенциал пропорционален r 3 , поэтому электрическое поле (отрицательная производная от потенциала) пропор-
1
ционально 1 , что дает бесконечность в углу.
r 3
Задача 4.15
Cм. вторую часть Пособия.
122
Глава 6. ЛИНЕЙНАЯ АЛГЕБРА
При решении физических задач линейная алгебра – это искусство использования матриц и векторов.
Рассматриваемые в главе вопросы/задачи
Сложение матриц |
Adding matrices |
Угол между двумя векторами |
Angle between vectors |
Вихрь |
Curl |
Детерминант |
Determinant |
Дивергенция |
Divergence |
Собственные функции и собственные |
Eigenvalues and eigenvectors |
значения |
|
Градиент |
Gradient |
Инвертирование матриц |
Invert a matrix |
Лапласиан |
Laplacian |
Создание матриц |
Making matrices |
Создание векторов |
Making vectors |
Умножение матриц, векторов |
Multiplying matrices, vectors |
Норма или амплитуда |
Norm or magnitude |
Произведения: скалярное, векторное |
Products: dot and cross |
Вращение матриц |
Rotation matrices |
Команды Row и Column |
Row and Column Commands |
Система линейных уравнений |
System of linear equations |
След |
Trace |
Транспонирование |
Transpose |
123
Maple для студентов физиков
Разделы:
Определение (задание) матриц и векторов Сложение, вычитание, умножение Инверсия, детерминант, норма и т. п. Решение систем линейных уравнений
Векторы: скалярное и векторное произведения Собственные значения и собственные векторы Векторные вычисления: grad, div, curl (rot)
Плотность заряда и плотность тока j статического электрического и магнитного полей для различных объектов из уравнений Максвелла
Электростатический потенциал точечного диполя.
Упоминаемые в главе команды Maple
with(LinearAlgebra) |
DotProduct, |
Matrix |
CrossProduct, |
Vector |
VectorAngle |
Column |
transpose |
Row |
Gradient |
<...> |
Divergence |
Evalf |
Curl |
evalm |
Laplacian |
&* |
SetCoordinates |
Add |
cartesian |
MatrixInverse |
cylindrical |
Determinant |
spherical |
Transpose |
|
HermitianTranspose |
|
Trace |
|
Norm |
|
LinearSolve |
|
Сведения о линейной алгебре можно получить в запросе
?LinearAlgebra.
Прежде чем действовать, следует вызвать пакет:
> with(LinearAlgebra):
124
Глава 6. Линейная алгебра
Матрицы, векторы и основные операции
Определение (задание) матриц и векторов
Первое, что вам надо знать – как создавать матрицы и векторы. В Maple для этого есть много способов, но рекомендуется близкий к тому, как делается в MatLab.
Для создания матрицы А 2x2, содержащей 1,2,3,4 надо:
> A:=Matrix([[1,2],[3,4]]);
Для ссылок на элементы матрицы надо использовать обозначения в виде A[row,column], т. е. A[1,2]:
> A[1,2];
Если вы хотите только определить матрицу В 2x2, но не присваивать ей значения, надо написать:
> B:=Matrix(1..2,1..2);
Как только В определена, присвоить ей значения можно любым способом, в том числе и вручную
> B[1,1]:=2;B[1,2]:=3;B[2,1]:=7;B[2,2]:=4;
Можно посмотреть на В, чтобы удостовериться, что все правильно:
> B;
Детали – см. в команде Matrix, задав ?Matrix.
Можно создать векторы-столбцы или строки с помощью команды Vector, по умолчанию создается вектор-столбец:
> b:=Vector([5,6]);
Для создания вектора-строки (row), надо сказать об этом Maple
> b:=Vector[row]([5,6]);
Если хотите заполнить векторы числами из строк или столбцов матрицы, используйте команды Column и Row. Например, чтобы заполнить второй столбец матрицы А надо написать:
> c:=Column(A,2);
125
Maple для студентов физиков
Для заполнения с первой строкой А:
> c:=Row(A,1);
Вот еще удобный способ для определения матриц и векторовстолбцов. Вектор-столбец можно определить без специальной команды, с помощью синтаксической конструкции Column Row <...>:
>s:=<1,2,3>;
Апосколькуматрицапредставляетсякакнаборвекторов-столбцов, то и матрицу можно определить таким же способом:
>R:=<<1,2,3>|<4,5,6>|<7,8,10>>;
Об этой форме представления надо знать, поскольку она часто используется в Maple help.
ЕщеспособопределенияматрицвMaple – палитраслеваотрабочего листа Matrix Palette. Использование элементов интерфейса достаточно очевидное, термины, в основном, понятны (на всякий случай: skew symmetric – кососимметрическая). Установите курсор в пустую группу ниже (лучше делайте это на отдельном листе, как обычно) и выберите нужные опции в окне палитры. Можно вручную заполнить элементы матрицы m[x,x], можно использовать шаблон для матриц определенного вида. После этого она готова для присваивания с помощью :=.
ВMaple матрицы и векторы могут содержать формулы:
>d:=Matrix([[x11,x12],[x21,x22]]);
или
> e:=Matrix([[x^2*y,y*x],[sin(x),1/x]]);
Теперь предположим, что надо задать значения х и у и затем посмотреть на матрицы в представлении с плавающей запятой.
>x:=1;y:=2;
>e;
Это уже было, и мы знаем, что делать – примените evalf:
> evalf(e);
126
Глава 6. Линейная алгебра
Не получилось...
Проблема в том, что е – это не выражение, а матрица выражений, поэтому Maple нужны две команды eval: evalm внутри, чтобы сослаться непосредственно на элементы е и evalf снаружи, чтобы запустить расчеты с плавающей запятой.
> evalf(evalm(e));
Спросите ?evalm, чтобы увидеть о чем эта команда, или
запомните, что для получения численного ответа, надо применять десятичные точки в числах.
Описание команды evalm (из справки Maple)
Функция evalm вычисляет выражения, включая матричные. Она выполняет суммирование, умножение, возведение в целую степень, в том числе для матриц, и показывает отображение функций на матрицы.
Учтите, что прежде чем передавать аргументы в evalm, Maple может выполнить упрощения, и эти упрощения будут действительны для матриц. Например, evalm(A^0) возвратит 1, а не единичную матрицу.
Неприсвоенные имена будут рассматриваться как символьные матрицы или скаляры, в зависимости от их использования в выражении.
Для обозначения некоммутативного умножения матриц используйте оператор &*. Произведение матриц ABC может быть введено как A &* B &* C, или как &*(A,B,C), причем последнее более эффективно. Применяется автоматическое упрощение, такое как сбор констант и степеней. НЕ ИСПОЛЬЗУЙТЕ * чтобы обозначить чистое умножение матриц, поскольку это вернет ошибку. Операндами &* должны быть матрицы (или имена) за исключением 0. Невычисленное произведение матриц рассматривается как матрица. Оператор &* имеет то же старшинство, что и оператор *.
Используйте 0 чтобы обозначить нулевой скаляр или матрицу. Применяйте &*() для обозначения единичной матрицы (?). Возможно, удобно применять alias(Id=&*()).
127
Maple для студентов физиков
Если в сумме есть матрица и константа, то Maple рассматривает константу, как умноженную на единичную матрицу. Следовательно, матричные полиномы можно вводить в точности так, как скалярные полиномы.
Сложение, вычитание, умножение
> restart:with(LinearAlgebra):
Есть много способов выполнения этих алгебраических операций в Maple, но показан будет только один. Остальные – см.
?LinearAlgebra.
Для сложенеия двух матриц В+С 3x3 используйте команду Add или просто знак +
>B:=Matrix([[1,2,3],[4,5,6],[7,8,9]]);
>C:=Matrix([[3,2,1],[5,6,4],[9,7,8]]);
>E:=Add(B,C);
или
> E:=B+C;
Вычитание сводится к сложению с матрицей со знаком минус:
> E:=Add(B,-C);
или
> E:=B-C;
Очень внимательно следите за тем, чтобы сложение и вычитание имели смысл. Например,
>F:=Matrix([[5,7],[1,3]]);
>Add(E,F);
поскольку матрицы не одинакового размера. Умножение матриц – с помощью команды Multiply:
> G:=Multiply(B,C);
Есть хороший способ умножения матриц, который можно найти в списке команд по запросу ?LinearAlgebra.
128
Глава 6. Линейная алгебра
Задача 5.1
Проверьте ручным счетом, что Maple правильно рассчитывает G22. Можно умножать матрицы и векторы так:
>b:=<5,6,7>;
>Multiply(B,b);
Как и ожидалось, умножение квадратной матрицы на векторстолбец дает вектор-столбец. Умножение вектора-строки на квадратную матрицу дает новый вектор-строку:
> c:=Vector[row]([1,2,3]);
(или в сокращенной форме)
>c:=<1|2|3>;
>Multiply(c,C);
Можно умножать матрицы и векторы на скаляры простым оператором умножения
>3*b;
>5*B;
Здесь не говорится о делении. Это сложная процедура, о которой позже расскажем в разделе «Решение систем линейных уравнений».
Задача 5.2
Важнымприменениемумноженияматрицявляетсявращениевекторов в трехмерном пространстве. Аккуратно нарисованная картинка и тригонометрия покажут, что если вектор v поворачивается против часовой стрелки вокруг оси х на угол (если смотреть в направлении начала координат по оси х), то новый вектор задается матрицей Rx, умноженной на v где Rx задается так:
> Rx:=Matrix([[1,0,0],[0,cos(theta),-sin(theta)],[0,sin(theta),cos(theta)]]);
Подобно этому получается вращение матриц вокруг осей y и z на углы и :
> Ry:=Matrix([[cos(phi),0,sin(phi)],[0,1,0],[-sin(phi),0,cos(phi)]]);
129
Maple для студентов физиков
> Rz:=Matrix([[cos(psi),-sin(psi),0],[sin(psi),cos(psi),0],[0,0,1]]);
Замечание: в знаках матрицы Ry нет ошибки. Иной знак, чем в Rx и Rz – из-за того, что вращение полностью определяется правилом правой руки для углов: направьте большой палец руки по направлению оси вращения, а остальные пальцы крутите в направлении положительных углов. Сделайте это для = /2 и проверьте, что Ry – правильное.
Используйте эти матрицы вращения, чтобы проверить, где заканчивается вектор [1,0,0] после последовательности поворотов:
(a)на относительно оси у, затем
2
(b)на относительно оси х, и в конце
4
(c)на относительно оси z.
2
После получения ответа в Maple, проверьте его «на пальцах». (Удостоверьтесь, что координатные системы – правые).
Затем возьмите тот же вектор [1,0,0], но выполните действия (вращения) в обратном порядке.
Получилось ли то же самое?
(Нет – по причине того, что операции вращения не коммутативны.) Вращение не должно изменять модуль вектора. А получилось ли
это у нас? Модуль вектора v можно получить командой Norm(v,2).
Инверсия, детерминант, норма и т. п.
Maple допускает множество действий с матрицами. Посмотреть список возможностей можно по запросу ?LinearAlgebra.
Далее рассмотрены несколько встречающихся в физике тем. Определим матрицы
>restart:with(LinearAlgebra):
>B:=Matrix([[1,2,3],[4,5,6],[7,8,9]]);
>C:=Matrix([[3,2,1],[5,6,4],[9,7,8]]);
MatrixInverse: для получения обратной матрицы, скажем, С делают так:
130
