Линейная алгебра

Искусство использования матриц и векторов для решения задач физики

Версия для печати

Общие правила синтаксиса команд линейной алебры

В Maple есть большие пакеты: LinearAlgebra, linalg и подпакеты LinearAlgebra из пакета Student. Они содержат функции для работы с линейной алгеброй. Здесь рассматриваются только функции пакета LinearAlgebra, так как пакет linalg считается устаревшим.

Представления векторов и их компонент
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 и символьные элементы – это ai.

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): Determinant(M); Rank(M); Adjoint(M);
Minor(M,i,j); MatrixInverse(M);
Математические операции с векторами

Операции над векторами:
сложение, вычитание, линейная комбинация,
скалярное и векторное произведения, норма,
транспонирование, эрмитово сопряжение.

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);
Матричные представления и компоненты
with(LinearAlgebra): Matrix([[a11,...,a1m],...,[an1,...anm]]);
<<a11|...|a1m>,...,>; map(x->f(x),M);
<<a11,...,an1>|...|>; 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]) – интерактивное конструирование матрицы (до 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 – определяют размер, размер строки и размер столбца матрицы.

Типы данных в матрицах

Система Maple удобна для вычислений в линейной алгебре. Это означает, что типы данных элементов матриц должны соответствовать типам, определенным в системе (действительные, комплексные, символьные и т. д.).

MatrixOptions(M,datatype=val,shape=val);
Matrix(n,m,ops);      Matrix(n,m,datatype=val);

Первая из команд MatrixOptions показывает или устанавливает опции матрицы.

Следующие две команды Matrix конструируют числовую матрицу n×m . Опция datatype=val показывает тип данных матрицы.

datatype=float[8], datatype=complex[8] – элементы матрицы с плавающей точкой  (действительные и комплексные).

datatype=sfloat, datatype=complex(sfloat) – элементы матрицы – действительные и комплексные числа с плавающей точкой.

Цифра 8 означает число байт для хранения чисел в матрице, n – целое с десятичной точкой (плавающая точка «от софта» работает медленнее, чем плавающая точка «от железа»).

Математические операции с матрицами
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);
Элементарные операции со строками и столбцами матриц

перестановка двух строк или столбцов,
умножение строки или столбца на ненулевую константу,
сложение строк или столбцов.

RowOperation(A,[i1,i2]); ColumnOperation(A,[j1,j2]);
RowOperation(A,i,s); ColumnOperation(A,j,s);
RowOperation(A,[i1,i2],s); ColumnOperation(A,[j1,j2],s);
Визуализация матриц
with(plots): matrixplot(M,ops); pointplot3d(M,ops);
sparsematrixplot(M,ops); listdensityplot(M,ops);
Особые типы матриц

Наиболее важные типы матриц:
нулевая, единичная, постоянная, случайная,
гильбертова, Ханкеля,
разреженная, диагональная, треугольная,
скалярное произведение на единичную матрицу,
симметричная и кососимметричная и т. д.

with(LinearAlgebra):
ZeroMatrix(n,m); IdentityMatrix(n,m);
ConstantMatrix(C,n,m); RandomMatrix(n,m,generator=a..b,ops);
Matrix(n,m,shape=zero); Matrix(n,m,shape=constant[C]);
Matrix(n,m,shape=identity); HilbertMatrix(n,m,var);
HankelMatrix([elems],n); DiagonalMatrix([elems],n,m);
BandMatrix([elems],k,n,m); ScalarMatrix(C,n,m);
Matrix(n,m,[elems],storage=val); Matrix(n,n,[elems],shape=val);

Замечание. Функции UpperDiagonalMatrix, LowerDiagonalMatrix, TridiagonalMatrix недоступны в версиях ≥ 6, но их легко построить с помощью функции SparseArray с конструкцией Band, которую следует применить к функции ArrayFlatten вместо функции BlockMatrix. Функция ZeroMatrix заменена на функцию ConstantArray.