Общие правила синтаксиса команд линейной алебры
В 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.