Maple 9.5/10 в математике, физике и образовании - Владимир Дьяконов
Шрифт:
Интервал:
Закладка:
> evalm(2*V);
[2 a, 4, 2 b, 8]> evalm(V**V);
[a, 2, b, 4]V> evalm(a*V);
[a², 2 a, a b, 4 a]В этих примерах используется функция evalm(M), осуществляющая вычисление матрицы или вектора М.
6.1.7. Операции над матрицами с численными элементами
Над матрицами с численными элементами в Maple можно выполнять разнообразные операции. Ниже приведены основные из них:
> М:=array(1..2,1..2,[[1,2],[3,4]]);
> evalm(2*М);
> evalm(2+М);
> evalm(M^2);
> evalm(М^(-1));
> evalm(М-М);
0> evalm(М+М);
> evalm(М*М);
> evalm(M/M);
1> evalm(M^0);
1Рекомендуется внимательно изучить эти примеры и попробовать свои силы в реализации простых матричных операций.
6.1.8. Символьные операции с матрицами
Одной из привлекательных возможностей СКА является возможность проведения символьных операций с матрицами. Ниже представлены примеры символьных операций, осуществляемых над квадратными матрицами одного размера в системе Maple:
> M1:=array(1..2,1..2, [[a1,b1], [c1,d1]]);
> M2:=array(1..2,1..2,[[a2,b2],[c2,d2]]);
> evalm(M1+M2)
> evalm(M1-M2)
> evalm(Ml&*M2);
> evalm(M1/М2);
> evalm(M1&/М2);
Приведем еще ряд гримеров выполнения символьных операций с одной матрицей:
> evalm(M1^2);
> evalm(sin(M1));
> evalm(M1*z);
> evalm(M1/z);
> evalm(M1+z);
> evalm(M1-z);
Среди других функций для работы с матрицами полезно обратить внимание на функцию map, которая применяет заданную операцию (например, функции дифференцирования diff и интегрирования int) к каждому элементу матрицы. Примеры такого рода даны ниже:
> M:=array(1..2,1..2,[[х,х^2],[х^3,х^4]]);
> map(diff,M, x);
> map(int, %, x);
> map(sin, M);
В результате возвращаются матрицы, каждый элемент которых представлен производной или интегралом. Аналогично можно выполнять над матрицами и другие достаточно сложные преобразования.
В дальнейшем мы продолжим изучение матричных функций и операций, включенных в пакеты Maple.
6.2. Пакет линейной алгебры linalg системы
6.2.1. Состав пакета linalg
Несомненно, что уникальной возможностью системы Maple, как и других систем компьютерной алгебры, является возможность решения задач линейной алгебры в символьном (формульном, аналитическом) виде. Однако такое решение представляет скорее теоретический, чем практический интерес, поскольку даже при небольших размерах матриц (уже при 4–5 строках и столбцах) символьные результаты оказываются очень громоздкими и трудно обозримыми. Они полезны только при решении специфических аналитических задач, например с разреженными матрицами, у которых большинство элементов имеют нулевые значения.
Поэтому разработчики Maple были вынуждены реализовать в своей системе численные методы решения задач линейной алгебры, которые широко используются в основных сферах ее приложения — математическом моделировании систем и устройств, расчетах в электротехнике, механике, астрономии и т.д. Решение задач линейной алгебры в численном виде можно рассматривать как одну из форм визуализации результатов вычислений, относящихся к линейной алгебре.
В ядро Maple, как отмечалось, введены очень скромные и минимально необходимые средства для решения задач линейной алгебры. Основной упор в их реализации сделан на подключаемые пакеты. Основным из них, унаследованным от предшествующих реализаций системы, является пакет решения задач линейной алгебры linalg. Это один из самых обширных и мощных пакетов в области решения задач линейной алгебры. Для их просмотра достаточно использовать команду:
> with(linalg);
Для большинства пользователей системой Maple набор функций пакета оказывается чрезмерно обширным и потому опущен. Укажем, однако, наиболее употребительные функции пакета linalg:
• addcol — добавляет к одному из столбцов другой столбец, умноженный на некоторое число;
• addrow — добавляет к одной из строк другую строку, умноженную на некоторое число;
• angle — вычисляет угол между векторами;
• augment — объединяет две или больше матриц по горизонтали;
• backsub — реализует метод обратной подстановки при решении системы линейных уравнений (см. также forwardsub);
• band — создает ленточную матрицу;
• basis — находит базис векторного пространства;
• bezout — создает Bezout-матрицу двух полиномов;
• BlockDiagonal — создает блок-диагональную матрицу;
• blockmatrix — создает блок-матрицу;
• cholesky — декомпозиция Холесского для квадратной положительно определенной матрицы;
• charmat — создает характеристическую матрицу (charmat(M,v) матрица, вычисляемая как v∙E-М);
• charpoly — возвращает характеристический полином матрицы;
• colspace — вычисляет базис пространства столбцов;
• colspan — находит базис линейной оболочки столбцов матрицы;
• companion — вычисляет сопровождающую матрицу, ассоциированную с полиномом;
• cond — вычисляет число обусловленности матрицы (cond(M) есть величина norm(M)∙norm(M-l));
• curl — вычисляет ротор вектора;
• definite — тест на положительную (отрицательную) определенность матрицы;
• diag — создает блок-диагональную матрицу;
• diverge — вычисляет дивергенцию векторной функции;
• eigenvals — вычисляет собственные значения матрицы;
• eigenvects — вычисляет собственные векторы матрицы;
• equal — определяет, являются ли две матрицы равными;
• exponential — создает экспоненциальную матрицу;
• ffgausselim — свободное от дробей Гауссово исключение в матрице;
• fibonacci — матрица Фибоначчи;
• forwardsub — реализует метод прямой подстановки при решении системы линейных уравнений (например для матрицы L и вектора b forwardsub(L,b) возвращает вектор решения х системы линейных уравнений L∙x=b);
• frobenius — вычисляет форму Фробениуса (Frobenius) матрицы;
• gausselim — Гауссово исключение в матрице;
• gaussjord — синоним для rref (метод исключения Гаусса-Жордана);
• geneqns — генерирует элементы матрицы из уравнений;
• genmatrix — генерирует матрицу из коэффициентов уравнений;
• grad — градиент векторного выражения;
• GramSchmidt — вычисляет ортогональные векторы;
• hadamard — вычисляет ограничение на коэффициенты детерминанта;
• hessian — вычисляет гессиан-матрицу выражения;
• hilbert — создает матрицу Гильберта;
• htranspose — находит эрмитову транспонированную матрицу;
• ihermite — целочисленная эрмитова нормальная форма;
• indexfunc — определяет функцию индексации массива;
• innerprod — вычисляет векторное произведение;
• intbasis — определяет базис пересечения пространств;
• ismith — целочисленная нормальная форма Шмитта;
• iszero — проверяет является ли матрица ноль-матрицей;
• jacobian — вычисляет якобиан векторной функции;
• JordanBlock — возвращает блок-матрицу Жордана;
• kernel — находит базис ядра преобразования, соответствующего данной матрице;
• laplacian — вычисляет лапласиан;
• leastsqrs — решение уравнений по методу наименьших квадратов;
• linsolve — решение линейных уравнений;
• Ludecomp — осуществляет LU-разложение;
• minpoly — вычисляет минимальный полином матрицы;
• mulcol — умножает столбец матрицы на заданное выражение;
• mulrow — умножает строку матрицы на заданное выражение;
• multiply — перемножение матриц или матрицы и вектора;
• normalize — нормализация вектора;
• orthog — тест на ортогональность матрицы;
• permanent — вычисляет перманент матрицы — определитель, вычисляемый без перестановок;
• pivot — вращение относительно элементов матрицы;
• potential — вычисляет потенциал векторного поля;
• Qrdecomp — осуществляет QR-разложение;
• randmatrix — генерирует случайные матрицы;
• randvector — генерирует случайные векторы;
• ratform — вычисляет рациональную каноническую форму;
• references — выводит список основополагающих работ по линейной алгебре;
• rowspace — вычисляет базис пространства строки;