Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Maple для студентов физиков. Часть 1. Учебное пособие

.pdf
Скачиваний:
0
Добавлен:
12.08.2026
Размер:
1 Мб
Скачать

Глава 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