_Глава 5 Лин алг
.pdf
11
если собственный xj умножается на A , то результат есть вектор, который либо параллелен xj (если λj положительно) или противоположно направлен (если λj отрицательно).
Простой результат для иллюстрации этой идеи:
>restart:with(LinearAlgebra):
>A:=Matrix([[1,2,3],[4,3,2],[-1,0,2]]);
>Eigenvectors(A);
OК, ясно, что мы получили нечто вроде. Обычно нам нужны числа , а не гигантские абстрактные выражения. Простой путь их получения - ввести в матрицу элементы в виде чисел с плавающей запятой, т.е. с десятичной точкой:
>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);
Теперь мы готовы проверить, действительно ли это собственный вектор, путем
умножения |
на A. Если так, то |
A вернет просто |
. |
|
> y:=Multiply(A ,v3); |
|
|
|
|
Для проверки правильности, разделим y на |
и посмотрим, получается ли |
|||
собственный вектор |
|
|
|
|
> y/lambda3; |
|
|
|
Eigenvector(см. выше) |
Если вы сравните этот вектор с |
в матрице, созданной |
|||
вы увидите, что это то же самое, с точностью в арифметике с плавающей запятой для Maple , установленной командой Digits (равной 10).
12
Задача 5.5
Эта простая идея всегда появляется в численном анализе.
Подумайте, что происходит, если вы задаете вектор и умножаете его на А - см. пример выше. Обычно исходный вектор можно записать как линейную комбинацию собственных векторов, поэтому несложно прикинуть, что сделает умножение на А с каждой из трех компонент собственного вектора: при каждом умножении на А, наибольший вектор становится все больше по сравнению с двумя меньшими. Поскольку в примере выше наибольший собственный вектор вдвое больше ближнего, то, в общем, понятно, что получится при повторном умножении на 2.
Сделайте так: выберите случайный вектор , затем умножьте его на А и разделите на его норму применив Norm(v,2), так, чтобы результат был единичным вектором. Затем выполните цикл умножения-перенормировки 20 раз. Теперь найдите угол между конечным результатом и собственным вектором с наибольшим собственным значением. Получился ли из ваших вычислений этот собственный вектор? Можете ли вы объяснить получившийся угол?
Задача 5.6
Поверните матрицу Rx из задачи 5.2 и пусть Maple найдет ее собственные значения и собственные векторы. Подумайте, что означает вращение и можно ли дать физический смысл ответам, полученным из Maple. Он потребует от вас выбрать значение theta, попробуйте
(a) |
, |
|
(b) |
|
, и |
(c) |
|
. |
|
||
(Учтите, что (c) вам понадобится при изучении спина в квантовой механике.) Хороший способ решить эту задачуопределить функцию Maple 
, которая определяет матрицу Rx.
> M:=theta->evalf(Matrix([[1,0,0],[0,cos(theta),-sin(theta)],[0,sin(theta),cos(theta)]]));
и затем использовать эту функцию для определения трех матриц в заданиях (a)-(c). (Здесь важна evalf, потому что в Maple10 есть ошибка - опасайтесь ее включить в задачу.)
13
Задача 5.7
Если трехкомпонентные векторы поворачиваются матрицей вращения, то матрицы 3х3 тоже можно вращать. Операция поворота вектора v есть R*v, и операция поворота матрицы M - это inv(R)*M*R. , где inv(R) означает инверсию матрицы R. Вы встретитесь с этой идеей в курсах физики и математики, но здесь только кратко поработаем с этим
(a) Создайте диагональную матрицу |
и преобразуйте ее в повернутую |
систему координат с помощью ортонормальной матрицы поворотов
.
Назовите новую матрицу M2. |
|
|
(b) |
Вычислите собственные значения и собственные векторы матриц M1и M2. Как |
|
их сравнить? |
|
|
(c) |
Умножьте на вектор |
с обеих сторон M1по правилу |
transpose(a)*M1*a
и приравняйте получившееся уравнение 4, чтобы создать квадратное уравнение








, и используйте implicitplot3dдля его визуализации. Примените опцию axes=boxed в графике. Формы одинаковы, кроме их ориентации. Собственные значения M1относятся к геометрической ширине соответствующего эллипсоида и не подвержены повороту. Покажите это визуально, проделав то же с
M2.
14
Векторные вычисления: 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]);
>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);
15
Сферическиеl:
>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);
Сферические:
>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 здесь сильно не поможет.
16
Задача 5.8
Два уравнения Максвелла для статического электрического и магнитного полей Электростатический потенциал точечного диполя:
и
.
Для каждого их полей E или B (указанные ниже) примените Maple для векторных расчетов, чтобы найти формулы для плотности заряда
и плотности тока
. Учтите,
что |
и - векторы, так что вам надо их правильно определить. |
||||||||||
Например, если |
то |
надо определять так:: B:=array([0,k*r,0]); |
|||||||||
(a) |
Сферические координаты: |
|
|
|
|
(точечный заряд) |
|||||
|
|
||||||||||
(b) |
Сферические координаты: |
|
|
|
|
|
(заряд твердой сферы) |
||||
(c) |
Цилиндрические координаты: |
|
|
|
|
|
|
|
(линейный заряд) |
||
|
|
|
|
|
|
|
|||||
(d) |
Цилиндрические координаты: |
|
|
|
|
|
(полый заряженный цилиндр) |
||||
(e) |
Цилиндрические координаты: |
|
|
|
|
|
(длинная проволока) |
||||
|
|
|
|
||||||||
(f) |
Цилиндрические координаты: |
|
|
|
|
|
|
(однородный ток в проволоке) |
|||
(g) |
Цилиндрические координаты: |
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
||||
-----------------------------------------------------------------------------------------------------
Задача 5.9
Электростатический потенциал точечного диполя в сферических координатах записывается так:
.
Найти электрическое поле этого диполя в сферических координатах из соотношения для потенциала 



.
Почему степенной закон для E падает с расстоянием от начала?
17
ОБЩИЕ ПРАВИЛА СИНТАКСИСА КОМАНД
В 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); convert(V,Vector); |
type(V,Vector); whattype(V); |
convert(V,Array); Dimension(V); |
|
|
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.
18
Математические операции свекторами
Операции над векторами: сложение, вычитание, линейная комбинация, скалярное и векторное произведения, транспонирование, эрмитово сопряжение, норма.
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); |
|
|
Особыетипывекторов
Наиболее важные типы специальных векторов: нулевой вектор, единичный вектор, случайные векторы, разреженные векторы, скалярное произведение единичного вектора и др.
with(LinearAlgebra): |
ZeroVector(n); |
UnitVector(j,n); |
ConstantVector(x,n); |
ScalarVector(x,j,n); |
Vector(n,shape=zero); |
Vector(n,shape=unit[j]); |
Vector(n,shape=constant[x]); |
|
Vector(n,shape=scalar[j,x]); |
Vector(n,storage=sparse); |
|
RandomVector[column](n,generator=G);
19
Матричные представления и компоненты
with(LinearAlgebra |
Matrix([[a11,...,a1m],...,[an1,...anm]]); |
|
<<a11|...|a1m>,...,<an1|...|anm>>; |
map(x->f(x),M); |
|
<<a11,...,an1>|...|<a1m,...,anm>>; |
Matrix(n,m,(i,j)->f(i,j)); |
|
Matrix(n,m,ops); |
Matrix(n,m,fill=c); |
Matrix(n,m,symbol=a); |
with(Student[LinearAlgebra]): |
A:=MatrixBuilder(); |
M[i,j]; |
M[i,1..-1];M[1..-1,j];M[a..b,c..d]; |
SubMatrix(M,[a..b],[c..d]); |
|
Dimension(M); |
ColumnDimension(M); |
RowDimension(M); |
|
|
|
Matrix([[a11,...,a1m],...,[an1,...anm]]) конструирует матрицу построчно (как список списков),
<<a11|...|a1m>,...>>, <<a11,...,an1>|...>> конструирует матрицу, соответственно – построчно и по столбцам (как векторы); для больших матриц это работает медленно,
MatrixBuilder (из пакета Student[LinearAlgebra]) – интерактивное конструирование матрицы (до to 5 ×5),
Matrix(n,m,(i,j) >f(i,j)), map(x >f(x),M) – конструирует матрицу n ×m с элементами,
определенными функцией f(i, j) и функцией f(x), применяемой к каждому элементу матрицы M,
Matrix(n,m,fill=c), Matrix(n,m,symbol=a) – конструирует матрицу n × m где,
соответственно, каждый элемент – это c и символьные элементы – это aij. В общем виде матрицы можно конструировать, определяя различные опции функции Matrix,
M[i,j], M[i,1.. 1], M[1.. 1,j], M[a..b,c..d] – извлекает элементы строк, столбцов, подматриц
матрицы M,
Dimension, RowDimension, ColumnDimension – определяет размер, размер строки и размер столбца матрицы.
20
Типы данных в матрицах
Система удобна для вычислений в линейной алгебре как точных, так и для математики с плавающей запятой. Следовательно, элементы матрицы могут иметь разные типы данных, определенных в системе (действительные, комплексные, символьные и т.д. ).
MatrixOptions(M,datatype=val,shape=val);
Matrix(n,m,ops); Matrix(n,m,datatype=val);
MatrixOptions – показывает или устанавливает опции матрицы,
Matrix, Matrix,datatype – конструирует числовую матрицу n×m и выполняет численные операции линейной алгебры, где опция datatype=val показывает тип данных матрицы,
datatype=float[8], datatype=complex[8] – элементы матрицы – действительные и комплексные
datatype=sfloat, datatype=complex(sfloat) – элементы матрицы – это действительные и комплексные числа с плавающей запятой (число 8 означает число байт для хранения этих чисел в матрице means the number of bytes, n – целое с десятичной точкой – из плавающей запятой «от софта», что работает медленнее, плавающая запятая «от железа»).
Mathematical operations on matrices
with(LinearAlgebra): |
M1+M2; M1-M2; |
a*M; |
c1*M1+c2*M2; |
M1.M2; |
||
M1^n; |
|
MatrixPower(M1,n); |
MatrixAdd(M1,M2); |
Add(M1,M2); |
||
Add(M1,M2,c1,c2); |
Add(M1,-M2); |
Multiply(M1,M2); |
|
|||
MatrixScalarMultiply(M1,a); |
|
MatrixVectorMultiply(M1,V1); |
||||
MatrixMatrixMultiply(M1,M2); |
M1^(-1); |
MatrixInverse(M1); |
|
|||
M1^%T; |
Transpose(M1); |
M1^%H; |
Trace(M1); HermitianTranspose(M1); |
|||
Norm(M1,2); Norm(M1,p); |
Determinat(M1); factor(M1^5); |
|
||||
|
|
|
|
|
|
|
