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

_Глава 5 Лин алг

.pdf
Скачиваний:
13
Добавлен:
13.02.2015
Размер:
422 Кб
Скачать
☆

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);