Maple 9.5/10 в математике, физике и образовании - Владимир Дьяконов
Шрифт:
Интервал:
Закладка:
• rowspace — вычисляет базис пространства строки;
• rowspan — вычисляет векторы охвата для места столбца;
• rref — реализует преобразование Гаусса-Жордана матрицы;
• scalarmul — умножение матрицы или вектора на заданное выражение;
• singval — вычисляет сингулярное значение квадратной матрицы;
• singularvals — возвращает список сингулярных значений квадратной матрицы;
• smith — вычисляет Шмиттову нормальную форму матрицы;
• submatrix — извлекает указанную подматрицу из матрицы;
• subvector — извлекает указанный вектор из матрицы;
• sumbasis — определяет базис объединения системы векторов;
• swapcol — меняет местами два столбца в матрице;
• swaprow — меняет местами две строки в матрице;
• sylvester — создает матрицу Сильвестра из двух полиномов;
• toeplitz — создает матрицу Теплица;
• trace — возвращает след матрицы;
• vandermonde — создает вандермондову матрицу;
• vecpotent — вычисляет векторный потенциал;
• vectdim — определяет размерность вектора;
• wronskian — вронскиан векторных функций.
Назначение многих функция вполне очевидно из названия. Далее мы рассмотрим более подробно некоторые функции из этого пакета. С деталями синтаксиса (достаточно разнообразного) для каждой из указанных функций можно ознакомиться в справочной системе Maple. Для этого достаточно использовать команду ?name;, где name — имя функции (из приведенного списка).
6.2.2. Интерактивный ввод матриц
Для интерактивного ввода матриц можно, определив размерность некоторого массива, использовать функцию entermatrix:
> с A:=array(1..3,1..3);
А := array(1..3, 1..3, [])После исполнения этого фрагмента документа диалог с пользователем имеет следующий вид:
> entermatrix(А);
enter element 1,1 > 1;
enter element 1,2 > 2;
enter element 1,3 > 3;
enter element 2,1 > 4;
enter element 2,2 > 5;
enter element 2,3 > 6;
enter element 3,1 > 7;
enter element 3,2 > 8;
enter element 3,3 > 9;
> В:=(%);
> В[1,1];
1> В[2,2];
5> В[3,3];
96.2.3. Основные функции для задания векторов и матриц
В библиотечном файле linalg имеются следующие функции для задания векторов и матриц:
• vector(n,list) — создание вектора с n элементами, заданными в списке list;
• matrix(n,m,list) — создание матрицы с числом строк n и столбцов m с элементами, заданными списком list.
Ниже показано применение этих функций (файл linalgop):
> V:=vector(3, [12, 34, 56]);
V := [12, 34, 56]> M:=matrix(2,3, [1,2,3,4]);
> V[2];
34> М[1, 3];
3> М[2, 3];
M2,3Обратите внимание на последние примеры — они показывают вызов индексированных переменных вектора и матрицы.
6.2.4. Работа с векторами и матрицами
Для работы с векторами и матрицами Maple имеет множество функций, входящих в пакет linalg. Ограничимся приведением краткого описания наиболее распространенных функций этой категории.
Операции со структурой отдельного вектора V и матрицы М:
• coldim(M) — возвращает число столбцов матрицы М;
• rowdim(M) — возвращает число строк матрицы М;
• vectdim(V) — возвращает размер вектора V;
• col(M.i) — возвращает i-й столбец матрицы М;
• row(M,i) — возвращает i-ю строку матрицы М;
• minor(M,i,j) — возвращает минор матрицы М для элемента с индексами i и j;
• delcols(M,i..j) — удаляет столбцы матрицы М от i-го до j-го;
• delrows(V,i..j) — удаляет строки матрицы М от i-й до j-й;
• extend(M,m,n,x) — расширяет матрицу М на m строк и n столбцов с применением заполнителя х.
Основные векторные и матричные операции:
• dotprod(U,V) — возвращает скалярное произведение векторов U и V;
• crossprod(U,V) — возвращает векторное произведение векторов U и V;
• norm(V) или norm(M) — возвращает норму вектора или матрицы;
• copyinto(A,B,i,j) — копирует матрицу А в В для элементов последовательно от i до j;
• concat(M1,M2) — возвращает объединенную матрицу с горизонтальным слиянием матриц М1 и М2;
• stack(M1,M2) — возвращает объединенную матрицу с вертикальным слиянием М1 и М2;
• matadd(A,B) и evalm(A+B) — возвращает сумму матриц А и В;
• multiply(A,B) и evalm(A&*B) — возвращает произведение матриц А и В;
• adjoint(M) или adj(M) — возвращает присоединенную матрицу, такую, что M∙adj(M) дает диагональную матрицу, определитель которой есть det(M);
• charpoly(M,lambda) — возвращает характеристический полином матрицы М относительно заданной переменной lambda;
• det(M) — возвращает детерминант (определитель) матрицы М;
• Eigenvals(M,vector) — инертная форма функции, возвращающей собственные значения матрицы М и (при указании необязательного параметра vector) соответствующие им собственные векторы;
• jordan(M) — возвращает матрицу М в форме Жордана;
• hermite(M) — возвращает матрицу М в эрмитовой форме;
• trace(M) — возвращает след матрицы М;
• rank(M) — возвращает ранг матрицы М;
• transpose(M) — возвращает транспонированную матрицу М;
• inverse(M) или evalm(1/M) — возвращает матрицу, обратную к М;
• singularvals(A) — возвращает сингулярные значения массива или матрицы А.
Приведем примеры применения некоторых из этих функций (файл linalgop):
> M:=matrix(2,2, [a,b,с,d]);
> transpose(M);
> inverse(M);
> det(M);
ad - bc> rank(M);
2> trace(M);
a + d> M:=matrix(2,2,[1,2,3,4]);
> ev:=evalf(Eigenvals(M,V));
ev := [-.372281323, 5.372281323]> eval(V);
> charpoly(M,p);
p² - 5p - 2> jordan(M);
> A:= array([[1,0,1],[1,0,1],[0,1,0]]);
> singularvals(А);
[0, 2, 1]В приведенных примерах полезно обратить внимание на то, что многие матричные функции способны выдавать результаты вычислений в аналитическом виде, что облегчает разбор выполняемых ими операций.
6.2.5. Решение систем линейных уравнений
Одной из самых распространенных задач линейной алгебры является решение систем линейных уравнений. Ниже представлен простой пример составления и решения трех систем линейных уравнений с применением функций, входящих в пакет linalg (файл sle):
> with(linalg):
> C:=matrix(3,3,[[4,8,2],[6,2,3],[3,7,11]]);
> B:=matrix(3,1, [5,6,1]);
> A:=evalm(C);
> A1 :=copyinto(В, С, 1, 1);
> C:=evalm(A):А2:=copyinto(В,С,1,2);
> C:=evalm(A):A3:=copyinto(В,С,1,3);
> x1:=det(A1)/det(А);
> x2:=det(A2)/det(A);
> x3:=det(A3)/det(a);
А теперь рассмотрим пример решения матричного уравнения в символьном виде:
> A:=matrix(2,2,[a,b,с,d]);
> В:=vector(2, [с,d]);
В := [с, d]> X:=linsolve(А,В);
Следующий пример показывает решение более сложной системы линейных уравнений с комплексными коэффициентами:
> А:=matrix(2,2,[[10+200*1,-200*1],[-200*1,170*1]]);
> B:=vector(2, [5,0]);
В := [5, 0]> X:=multiply(inverse(А),В);
> Digits:=5: convert(eval(X),float);
[.037156 + .13114I, .043713 +.15428I]На этот раз решение получено использованием функций умножения матриц и вычисления обратной матрицы в виде X=А-1∙В, то есть в матричном виде. В конце примера показано преобразование результатов с целью их получения в обычной форме комплексных чисел с частями, представленными в форме чисел с плавающей точкой.
6.2.6. Визуализация матриц
Как видно из описанного, многие вычисления имеют результаты, представляемые в форме матриц. Иногда такие результаты можно наглядно представить графически, например, в виде гистограммы. Она представляет собой множество столбцов квадратного сечения, расположенных на плоскости, образованной осями строк (row) и столбцов (column) матрицы. При этом высота столбцов определяется содержимым ячеек матрицы.
Такое построение обеспечивает графическая функция matnxplot из пакета plots. На рис. 5.1 показано совместное применение этой функции с двумя функциями пакета linafg, формирующими две специальные матрицы А и В.
Рис. 6.1. Графическое представление матрицы