Maple для студентов физиков. Часть 1. Учебное пособие
.pdf
Глава 6. Линейная алгебра
> MatrixInverse(C);
Для проверки делают так:
> Multiply(C, MatrixInverse(C));
Determinant: получить детерминант матрицы можно так:
> Determinant(B);Determinant(C);
Transpose: транспонирование матрицы получается заменой строк на столбцы, подразумевая отражение матрицы относительно главной диагонали. Имеет смысл также транспонирование не квадратной матрицы.
>Transpose(C);
>E:=Matrix([[1,2,3]]);
>Transpose(E);
Вквантовой механике вам понадобится брать транспонированную комплексно сопряженную матрицу, которую называют эрмитово сопряженной (эрмитово транспонированной):
>F:=<<1,I>|<2*I,2>>;
>HermitianTranspose(F);
Trace: след – это сумма диагональных элементов матрицы.
> Trace(C);
Norm: норма вектора имеет много определений. Вы привыкли брать квадраты элементов, складывать их и вычислять квадратный корень из результата сложения. Это определение используется (почти) только в физике, но Maple умнее и берет корень k-го порядка из суммы k-х степеней элементов. Для физики k = 2:
> Norm(E,2);
Норма матриц сложнее – см. запрос ?LinearAlgebra[Norm].
Задача 5.3
Найдите матрицу, обратную определенной в этом разделе матрицы В. Объясните, почему вместо ответа получилось сообщение об ошибке.
131
Maple для студентов физиков
Решение систем линейных уравнений
Maple знает как решать эту задачу: (задание простое – потренируйтесь в английском)
There are three friends, Alice, Bob, and Chuck. The sum of Alice's and Bob's ages are 1.5 times Chuck's age. Chuck's age minus Bob's age is 6. Alice's age added to Chuck's age is 2.25 as large as Bob's age. If Bob used to date Alice, but is now far away in a foreign country, and if Chuck thinks Alice is really cute, is Bob in big trouble? The mathematical part of this problem is just a problem in linear algebra of the form A*x = b, with the ages in the order [Alice, Bob, Chuck]. Here are A and b:
>restart;with(LinearAlgebra):
>A:=Matrix([[1,1,-3/2],[0,-1,1],[1,-2-1/4,1]]);
>b:=Vector([0,6,0]);
Нам надо решить относительно вектора x, составленного из возрастов трех друзей. В Maple есть команда LinearSolve, которая делает эту задачу простой:
> LinearSolve(A,b);
Так можно решить любую линейную систему. Позже мы посмотрим, как можно применить команду solve для решения уравнений.
Задача 5.4
См. вторую часть Пособия.
Векторы: скалярное и векторное произведения
Maple знает, как выполнять скалярное произведение, векторное произведение и как находить угол между двумя векторами с помощью команд DotProduct, CrossProduct и VectorAngle.
>restart:with(LinearAlgebra):
>v1:=<1|2|3>;v2:=<4|5|6>;
>DotProduct(v1,v2);CrossProduct(v1,v2);
Здесь все что надо.
132
Глава 6. Линейная алгебра
>VectorAngle(v1,v2);
Или еще:
>evalf(VectorAngle(v1,v2));
Учтите, что возвращается значение в радианах.
Собственные значения и собственные векторы
Одно из наиболее важных применений линейной алгебры в физике – это собственные значения и собственные векторы. Они появляются в классической механике, математической физике, квантовой механике, численном анализе.
В применении к матрицам задача о собственных значениях выглядит так:
Дана квадратная матрица A. Какими должны быть векторы xj и числа j, чтобы при умножении A на xj получался вектор xj, умноженный на число j. Существуют ли такие xj и j, что можно записать:
A xj = j xj
Поскольку умножение матрицы на вектор одновременно вращает вектор и умножает его на число, неясно, есть ли решение у этой задачи. Но математически можно доказать, что в большинстве случаев, для матрицы размером N × N есть N таких векторов и значений, (они и называются собственными значениями и собственными векторами). Зачастую это комплексные величины, которые, как кажется, не имеют физического смысла, но даже если так, физический смысл с их помощью (или из них) можно получить. Если собственные значения действительные, то собственные векторы обладают особым свойством: если собственный xj умножается на A, то результат есть вектор, который либо параллелен xj (если j положительно) или противоположно направлен (если j отрицательно).
Простой результат для иллюстрации этой идеи:
>restart:with(LinearAlgebra):
>A:=Matrix([[1,2,3],[4,3,2],[-1,0,2]]);
>Eigenvectors(A);
133
Maple для студентов физиков
Обычно нам нужны числа, а не гигантские абстрактные выражения. Простой путь их получения – ввести в матрицу элементы в виде чисел с плавающей запятой, т. е. с десятичной точкой:
>A:=Matrix([[1.,2.,3.],[4.,3.,2.],[-1.,0.,2.]]);
>v:=Eigenvectors(A);
По справке из Maple help для Eigenvectors первый набор чисел – это вектор-столбец, содержащий набор чисел – собственные значения, а второй набор – это матрица, столбцы которой есть собственные векторы. Поэтому, если нам нужно третье собственное значение, то следует начать так:
> lambda3:=v[1][3];
(Это выглядит странным, но, так как v[1] – это вектор-столбец, имеет смысл спрашивать о его третьем элементе [3]). Теперь нам нужен третий столбец v[2], это делает команда Maple Column
> v3:=Column(v[2],3);
Теперь мы готовы проверить, действительно ли это собственный вектор, путем умножения v3 на A. Если так, то Av3 вернет просто 3v3.
> y:=Multiply(A ,v3);
Для проверки правильности, разделим y на 3 и посмотрим, получается ли собственный вектор v3
> y/lambda3;
Есливысравнитеэтотвекторсv3 вматрице, созданнойEigenvector (см. выше) вы увидите, что это то же самое, с точностью в арифметике с плавающей запятой для Maple, установленной командой Digits (равной 10).
Задача 5.5
См. вторую часть Пособия.
Задача 5.6
Поверните матрицу Rx из задачи 5.2 и пусть Maple найдет ее собственные значения и собственные векторы. Подумайте, что означает вращение и можно ли дать физический смысл ответам, полученным из Maple. Он потребует от вас выбрать значение theta, попробуйте
134
Глава 6. Линейная алгебра
(a)= 1.3,
(b)= π, и
(c). 2
(Учтите, что (c) вам понадобится при изучении спина в квантовой механике.) Хороший способ решить эту задачу – определить функцию Maple M( ), которая определяет матрицу Rx.
>M:=theta->evalf(Matrix([[1,0,0],[0,cos(theta),-sin(theta)],[0,sin(theta),c os(theta)]]));
и затем использовать эту функцию для определения трех матриц в заданиях (a)-(c). (Здесь важна evalf, потому что в Maple10 есть ошибка – опасайтесь ее включить в задачу.)
Задача 5.7
Если трехкомпонентные векторы поворачиваются матрицей вращения, то матрицы 3×3 тоже можно вращать. Операция поворота вектора v есть R*v, и операция поворота матрицы M – это inv(R)*M*R, где inv(R) означает инверсию матрицы R. Вы встретитесь с этой идеей в курсах физики и математики, но здесь только кратко поработаем с этим
(a) Создайте диагональную матрицу |
|
|
4 |
0 |
0 |
M1: 0 |
1 |
0 |
|
|
|
0 |
0 |
2 |
|
|
|
и преобразуйте ее в повернутую систему координат с помощью ортонормальной матрицы поворотов
|
|
|
1 |
|
|
|
1 |
|
|
|
|
|
1 |
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
||||||||||
|
|
1 2 |
2 |
|
1 6 2 |
|
|
|
|
|
1 3 2 |
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
2 |
|
|
|
|
|
|
6 |
|
|
|
|
|
|
3 |
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
|
|
1 |
|
|
|
|
|
|
1 |
|
|
|
|
|
1 |
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
||||||||
|
1 2 2 |
|
|
|
|
|
1 6 2 |
|
|
|
|
|
1 3 2 |
|
|
|||||
R : |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
. |
|
2 |
|
|
|
|
|
|
|
6 |
|
|
|
|
|
|
3 |
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
1 |
1 |
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
|
|
|
|
|
|
|
|
|||||||||
|
|
0 |
|
|
|
|
|
|
1 6 |
2 |
1 3 2 |
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
6 |
|
|
|
|
|
3 |
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
135
Maple для студентов физиков
Назовите новую матрицу M2.
(b) Вычислите собственные значения и собственные векторы матриц M1 и M2. Как их сравнить?
x
(c) Умножьте на вектор a : y с обеих сторон M1 по правилу:
z
transpose(a)*M1*a
и приравняйте получившееся уравнение 4, чтобы создать квадратное уравнение 4x2 + y2 + 2z2 = 4, и используйте implicitplot3d для его визуализации. Примените опцию axes=boxed в графике. Формы одинаковы, кроме их ориентации. Собственные значения M1 относятся к геометрической ширине соответствующего эллипсоида и не подвержены повороту. Покажите это визуально, проделав то же с M2.
Векторные вычисления: grad, div, curl (rot)
Способность Maple выполнять алгебраические действия означает, что он также может брать векторные производные с помощью команд
Gradient, Divergence, Curl и Laplacian.
Он может это делать в декартовых, цилиндрических и сферических координатах, но вам при этом надо вызывать специальный пакет векторных вычислений VectorCalculus, а система координат задается командой SetCoordinates.
> restart:with(VectorCalculus):
Примеры градиента в каждой из систем координат.
Декартовы координаты. Определяем функцию и берем ее градиент:
>SetCoordinates(‘cartesian’[x,y,z]);
>f1:=3*x^2+y*sqrt(z);
>Gradient(f1);
Цилиндрические:
> SetCoordinates(‘cylindrical’[r,theta,z]);
136
Глава 6. Линейная алгебра
>f2:=cos(theta)/sqrt(r^2+z^2);
>Gradient(f2);
Сферические:
>SetCoordinates(‘spherical’[r,theta,phi]);
>f3:=sin(phi)*r^2*(3*cos(theta)^2-1);
>Gradient(f3);
Maple может вычислять дивергенцию в каждой из координатных систем. Дивергенция действует на векторное поле, поэтому прежде надо применить команду VectorField, чтобы определить векторное поле в выбранной вами координатной системе. Ниже – примеры
Декартовы:
>SetCoordinates('cartesian'[x,y,z]);
>g1:=VectorField(<x^2,y^2,z^2>);
>Divergence(g1);
Цилиндрические:
>SetCoordinates(‘cylindrical’[r,theta,z]);
>g2:=VectorField(<r^2*cos(theta),r^2*sin(theta),z^2>);
>Divergence(g2);
Сферические:
>SetCoordinates(‘spherical’[r,theta,phi]);
>g3:=VectorField(<r^2*cos(theta),r^2*sin(theta),cos(phi)>);
>Divergence(g3,[r,theta,phi],coords=spherical);
Maple может выполнить (сделать) вихрь (ротор), используя то же самое векторное поле, которое использовалось для дивергенции.
Декартовы:
>SetCoordinates(‘cartesian’[x,y,z]);
>Curl(g1);
Цилиндрические:
>SetCoordinates(‘cylindrical’[r,theta,z]);
>Curl(g2);
137
Maple для студентов физиков
Сферические:
>SetCoordinates(‘spherical’[r,theta,phi]);
>Curl(g3);
Возможно выполнить операцию дельта в квадрате, Laplacian, в каждой системе координат. Ниже – примеры для скалярной функции, использованной выше для градиента.
Декартовы:
>SetCoordinates(‘cartesian’[x,y,z]);
>Laplacian(f1);
Цилиндрические:
>SetCoordinates(‘cylindrical’[r,theta,z]);
>Laplacian(f2);
Сферические:
>SetCoordinates(‘spherical’[r,theta,phi]);
>Laplacian(f3);
>?Laplacian
Это замечательные возможности, но в физике проблема чаще не в вычислении этих векторных производных, а в обратной задаче – нахождении поля. Это намного труднее, и Maple здесь сильно не поможет.
Задача 5.8
Два уравнения Максвелла для статического электрического и магнитного полей. Электростатический потенциал точечного диполя:
div(E) и0
curl(B) = μ0J.
Для каждого из полей E или B (указанные ниже) примените Maple для векторных расчетов, чтобы найти формулы для плотности заряда ρ и плотности тока J. Учтите, что E и B – векторы, так что вам надо их правильно определить.
138
Глава 6. Линейная алгебра
Например, если B = kr, то B надо определять так:
B:=array([0,k*r,0]); |
|
|
|
|
|
||
(a) Сферические координаты: Er |
k |
(точечный заряд) |
|||||
r2 |
|||||||
|
|
|
|
|
|
||
(b) Сферические координаты: Er = kr (заряд твердой сферы) |
|||||||
(c) Цилиндрические координаты: Er |
|
|
|
|
(линейный заряд) |
||
|
|
|
|||||
|
|
|
2 0r |
||||
(d) Цилиндрические координаты: Er = kr (полый заряженный ци- |
|||||||
линдр) |
|
|
|
|
|
||
(e) Цилиндрические координаты: B |
|
k |
(длинная проволока) |
||||
r |
|||||||
|
|
|
|
|
|
||
(f)Цилиндрические координаты: B = kr (однородный ток в проволоке)
(g)Цилиндрические координаты: Bz = k(a2 – r2).
Задача 5.9
См. вторую часть Пособия.
Общие правила синтаксиса команд линейной алгебры
В Maple есть большие пакеты: LinearAlgebra, linalg и подпакеты LinearAlgebra и пакета Student. Они содержат функции для работы с линейной алгеброй. Пакет linalg старше и считается устаревшим. Здесь рассмотрены только функции пакета LinearAlgebra.
Представления векторов и компонент
with(LinearAlgebra): |
Vector[column]([x1,...,xn]); |
Vector([x1,...,xn]); |
Vector[row]([x1,...,xn]); |
<x1,...,xn>; <x1|...|xn>; |
Vector(n,i->f(i)); map(x->f(x),V); |
Vector(n,fill=a); |
Vector(n,symbol=a); print(V); op(V); |
V[i]; V[i..j]; V[p..-1]; |
convert(V,Matrix); |
type(V,Vector); whattype(V); |
convert(V,Vector); |
|
convert(V,Array); Dimension(V); |
139
Maple для студентов физиков
Vector, Vector[column], Vector[row] – создает вектор-столбец,
вектор-строку; Maple их различает; эти два типа векторов разные, <x1,...,xn>, <x1|...|xn> – создаетвектор-столбециливектор-строку,
элементы которых могут быть представлены другими вектор-строками или вектор-столбцами,
Vector(n,i->f(i)), map(x->f(x),V) – создает векторы, элементы кото-
рых определяются как одномерные функции f(x),
Vector(n,fill=a), Vector(n,symbol=a) – создает векторы где каждый элемент a и символьные элементы – это аi,
print, op – показывает векторы,
V[i], V[i..j], V[i..-1] – извлекает элементы векторов, convert(V,Matrix), convert(V,Vector) – преобразует Vector в Matrix
и наоборот;
convert(V,Array) – преобразует Vector в Array (массив, объект структуры данных),
type(V,Vector), whattype(V) – проверяет и определяет тип объекта, Dimension – определяет размер Vector.
Математические операции с векторами
Операции над векторами: сложение, вычитание, линейная комбинация, скалярное и векторное произведения, транспонирование, эрмитово сопряжение, норма.
with(LinearAlgebra): V1+V2; V1-V2; a*V1; a*V1+b*V2; VectorAdd(V1,V2); Add(V1,V2); Add(V1,V2,a,b); Add(V1,-V2); DotProduct(V1,V2); V1.V2; V1 &x V2; CrossProduct(V1,V2); OuterProductMatrix(V1,V2); Norm(V1,2); Norm(V1,p); Transpose(V1); V1^%T; V1^%H; HermitianTranspose(V1);
Визуализация векторов
with(plots): pointplot({v1,...,vn},ops); pointplot3d({v1,...,vn},ops); plottools[arrow](v0,v1},ops);
140
