Математический редактор MathCAD

         

9.1.1. Транспортирование

Транспортированием называют операцию, переводящую матрицу размерности MXN в матрицу размерности NXM, делая столбцы исходной матрицы строками, а строки — столбцами. Пример приведен в листинге 9.1. Ввод символа транспонирования (transpose) осуществляется с помощью панели инструментов Matrix (Матрица) или нажатием клавиш <Ctrl>+<1>. He забывайте, что для вставки символа транспонирования матрица должна находиться между линиями ввода.

Рис. 9.1. Панель инструментов Matrix

Листинг 9.1. Транспонирование векторов и матриц


9.1.2. Сложение

В Mathcad можно как складывать матрицы, так и вычитать их друг из друга. Для этих операторов применяются символы <+> или <—>, соответственно. Матрицы должны иметь одинаковую размерность, иначе будет выдано сообщение об ошибке. Каждый элемент суммы двух матриц равен сумме соответствующих элементов матриц-слагаемых (листинг 9.2).



Листинг 9.2. Сложение и вычитание матриц

Кроме сложения матриц, Mathcad поддерживает операцию сложения матрицы со скаляром (листинг 9.3). Каждый элемент результирующей матрицы равен сумме соответствующего элемента исходной матрицы и скалярной величины.

Листинг 9.3. Сложение матрицы со скаляром

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

Листинг 9.4. Смена знака матрицы


9.1.3. Умножение

При умножении следует помнить, что матрицу размерности MXN допустимо умножать только на матрицу размерности NXP (р может быть любым). В результате получается матрица размерности мхр.

Чтобы ввести символ умножения, нужно нажать клавишу со звездочкой <*> или воспользоваться панелью инструментов Matrix (Матрица), нажав на ней кнопку Dot Product (Умножение) (рис. 9.1). Умножение матриц обозначается по умолчанию точкой, как показано в листинге 9.5. Символ умножения матриц можно выбирать точно так же, как и в скалярных выражениях (см. разд. "Управление отображением некоторых операторов" гл. 2).

Листинг 9.5. Умножение матриц

Еще один пример, относящийся к умножению вектора на матрицу-строку и, наоборот, строки на вектор, приведен в листинге 9.6. Во второй строке этого листинга показано, как выглядит формула при выборе отображения оператора умножения No Space (Вместе).

Листинг 9.6. Умножение вектора и строки

Тот же самый оператор умножения действует на два вектора по-другому (см. разд. 9.1.6).

Аналогично сложению матриц со скаляром определяется умножение и деление матрицы на скалярную величину (листинг 9.7). Символ умножение вводится так же, как и в случае умножения двух матриц. На скаляр можнс умножать любую матрицу MXN.

Листинг 9.7. Умножение матрицы на скаляр


9.1.4. Определитель квадратной матрицы

Определитель (Determinant) матрицы обозначается стандартным математиче ским символом. Чтобы ввести оператор нахождения определителя матрицы можно нажать кнопку Determinant (Определитель) на панели инструментов Matrix (Матрица) (рис. 9.2) или набрать на клавиатуре <|> (нажав клавиши <Shift>+<\>). В результате любого из этих действий появляется местозапол-нитель, в который следует поместить матрицу. Чтобы вычислить определитель уже введенной матрицы (именно этот случай показан на рис. 9.2), нужно:

Переместить курсор в документе таким образом, чтобы поместить матрицу между линиями ввода (напоминаем, что линии ввода — это вертикальный и горизонтальный отрезки синего цвета, образующие уголок, указывающий на текущую область редактирования). Ввести оператор нахождения определителя матрицы. Ввести знак равенства, чтобы вычислить определитель.

Рис. 9.2 Ввод символа определителя матрицы

Результат вычисления определителя приведен в листинге 9.8.

Листинг 9.8. Поиск определителя квадратной матрицы


9.1.5. Модуль вектора

Модуль вектора (vector magnitude) обозначается тем же символом, что и определитель матрицы. По определению, модуль вектора равен квадратному корню из суммы квадратов его элементов (листинг 9.9).

Листинг 9.9. Поиск модуля вектора


9.1.6. Скалярное произведение векторов

Скалярное произведение векторов (vector inner product) определяется как скаляр, равный сумме попарных произведений соответствующих элементов.

Векторы должны иметь одинаковую размерность, скалярное произведение имеет ту же размерность. Скалярное произведение двух векторов u и v равно uv=|u||v|cosQ, где Q — угол между векторами. Если векторы ортогональны, их скалярное произведение равно нулю. Обозначается скалярное произведение тем же символом умножения (листинг 9.10). Для обозначения скалярного произведения пользователь также может выбирать представление оператора умножения.

Никогда не применяйте для обозначения скалярного произведения символ х, который является общеупотребительным символом векторного произведения (см. разд. 9.1.7).

Листинг 9.10. Скалярное произведение векторов

С осторожностью перемножайте несколько (более двух) векторов. По-разному расставленные скобки полностью изменяют результат умножения. Примеры такого умножения см. в листинге 9.11.

Листинг 9.11 Скалярное произведение векторов, умноженное на третий вектор


9.1.7. Векторное произведение

Векторное произведение (cross product) двух векторов u и v с углом Q между ними равно вектору с модулем |u||v|sinQ, направленным перпендикулярно плоскости векторов и и v. Обозначают векторное произведение символом х, который можно ввести нажатием кнопки Cross Product (Векторное произведение) в панели Matrix (Матрица) или сочетанием клавиш <Ctrl>+<8>. Пример приведен в листинге 9.12.

Листинг 9.12. Векторное произведение


9.1.8. Сумма элементов вектора и след матрицы

Иногда бывает нужно вычислить сумму всех элементов вектора. Для этого существует вспомогательный оператор (листинг 9.13, первая строка), задаваемый кнопкой Vector Sum (Сумма вектора) на панели Matrix (Матрица) или сочетанием клавиш <Ctrl>+<4>. Этот оператор чаще оказывается полезным не в векторной алгебре, а при организации циклов с индексированными переменными.

На том же листинге 9.13 (снизу) показано применение операции суммирования диагональных элементов квадратной матрицы. Эту сумму называют следом (trace) матрицы. Данная операция организована в виде встроенной функции tr:

tr (A) — след квадратной матрицы А.

Листинг 9.13. Суммирование элементов вектора и диагонали матрицы


9.1.9. Обратная матрица

Поиск обратной матрицы возможен, если матрица квадратная и ее определитель не равен нулю (листинг 9.14). Произведение исходной матрицы на обратную по определению является единичной матрицей. Для ввода оператора поиска обратной матрицы нажмите кнопку Inverse (Обратная матрица) на панели инструментов Matrix (Матрица).

Листинг 9.14. Поиск обратной матрицы


9.1.10. Возведение матрицы в степень

К квадратным матрицам можно формально применять операцию возведения в степень n. Для этого п должно быть целым числом. Результат данной операции приведен в табл. 9.1. Ввести оператор возведения матрицы м в степень n можно точно так же, как и для скалярной величины: нажав кнопку Raise to Power (Возвести в степень) на панели Calculator (Калькулятор) или нажав клавишу <А>. После появления местозаполнителя в него следует ввести значение степени n.

Таблица 9.1. Результаты возведения матрицы в степень

n

Mn

0

единичная матрица размерности матрицы M

1

сама матрица M

-1

M-1 - матрица, обратная м

2,3,...

MM, (MM)M, ...

-2, -3, ...

M-1 M-1, (M-1 M-1)M-1, ...

Некоторые примеры возведения матриц в степень приведены в листинге 9.15.

Листинг 9.15. Примеры возведения квадратной матрицы в целую степень

  

9.1.11. Векторизация массивов

Векторная алгебра Mathcad включает несколько необычный оператор, который называется оператором векторизации (vectorize operator). Этот оператор предназначен, как правило, для работы с массивами. Он позволяет провести однотипную операцию над всеми элементами массива (т. е. матрицы или вектора), упрощая тем самым программирование циклов. Например, иногда требуется умножить каждый элемент одного вектора на соответствующий элемент другого вектора. Непосредственно такой операции в Mathcad нет, но ее легко осуществить с помощью векторизации (листинг 9.16). Для этого:

Введите векторное выражение, как показано во второй строчке листинга (обратите внимание, что в таком виде символ умножения обозначает оператор скалярного произведения векторов). Переместите курсор таким образом, чтобы линии ввода выделяли все выражение, которое требуется подвергнуть векторизации (рис. 9.3). Введите оператор векторизации, нажав кнопку Vectorize (Векторизация) на панели Matrix (Матрица) (рис. 9.3), или сочетанием клавиш <Ctrl>+<->. Введите <=>, чтобы получить результат.

Рис. 9.3. Оператор векторизации

Листинг 9.16. Использование векторизации для перемножения элементов вектора

Оператор векторизации можно использовать только с векторами и матрицами одинакового размера.

Большинство неспецифических функций Mathcad не требуют векторизации для проведения одной и той же операции над всеми элементами вектора. Например, аргументом тригонометрических функций по определению является скаляр. Если попытаться вычислить синус векторной величины, Mathcad осуществит векторизацию по умолчанию, вычислив синус каждого элемента и выдав в качестве результата соответствующий вектор. Пример показан в листинге 9.17.

Листинг 9.17. Векторизация необязательна для большиства функций Mathcad


9.1.12. Символьные операции с матрицами

Все матричные и векторные операторы, о которых шла речь выше, допустимо использовать в символьных вычислениях. Мощь символьных операций заключается в возможности проводить их не только над конкретными числами, но и над переменными. Несколько примеров приведены в листинге 9.18.

Листинг 9.18. Примеры символьных операций над векторами и матрицами

Смело используйте символьный процессор в качестве мощного математического справочника. Например, когда Вы хотите вспомнить какое-либо определение из области линейной алгебры (так, правила перемножения и обращения матриц показаны в первых строках листинга 9.18).


9.2. Матричные функции

Перечислим основные встроенные функции, предназначенные для облегчения работы с векторами и матрицами. Они нужны для создания матриц, слияния и выделения части матриц, получения основных свойств матриц и т.п.


9.2.1. Функции создания матриц

Самым наглядным способом создания матрицы или вектора является применение первой кнопки панели инструментов Matrix (Матрицы) (см. разд. "Массивы" гл. 4). Однако в большинстве случаев, в частности при программировании сложных проектов, удобнее бывает создавать массивы с помощью встроенных функций.

Определение элементов матрицы через функцию

matrix(M,N,f) — создание матрицы размера MXN, каждый i,j элемент которой есть f (i, j) (листинг 9.19); м — количество строк; N — количество столбцов; f (i, j) — фуНКЦИЯ.

Листинг 9.19. Создание матрицы

Для создания матриц имеются еще две специфические функции, применяемые, в основном, для быстрого и эффектного представления каких-либо зависимостей в виде трехмерных графиков (типа поверхности или пространственной кривой). Все их аргументы, кроме первого (функции), необязательны. Рассмотрим первую из функций.

СгеаtеSрасе(F(или f1, f2, f3) , t0, t1, tgrid, fmap) — создание вложенного массива, представляющего х-, у- и z-координаты параметрической пространственной кривой, заданной функцией р; F(t) — векторная функция из трех элементов, заданная параметрически относительно единственного аргумента t; f1(t) ,f2(t), f3(t) — скалярные функции; t0 — нижний предел t (по умолчанию -5); t1 — верхний предел t (по умолчанию 5); tgrid — число точек сетки по переменной t (по умолчанию 2о); fmap — векторная функция от трех аргументов, задающая преобразование координат.

О вложенных массивах читайте в разд. "Создание тензора" гл. 4.

Рис. 9.4. Использование функции CreateSpace с разным набором параметров

Пример использования функции CreateSpace показан на рис. 9.4. Заметьте, для построения графика спирали не потребовалось никакого дополнительного кода, кроме определения параметрической зависимости в вектор-функции F!

Функция создания матрицы для графика трехмерной поверхности устроена совершенно аналогично, за тем исключением, что для определения поверхности требуется не одна, а две переменных. Пример ее использования иллюстрирует рис. 9.5.

Рис. 9.5. Использование функции CreateMesh с разным набором параметров

CreateMesh(F(или g, или f1, f2, f3) , s0, s1, t0, t1, sgrid, tgrid, fmap) - создание вложенного массива, представляющего х-, у- и z-координаты параметрической поверхности, заданной функцией F; F(s,t) — векторная функция из трех элементов, заданная параметрически относительно двух аргументов s и t; g (s, t) — скалярная функция; f1(s,t),f2(s,t),f3(s,t) — скалярные функции; s0, t0 — нижние пределы аргументов s, t (по умолчанию -5); s1, t1 — верхние пределы аргументов s, t (по умолчанию 5); sgrid, tgrid — число точек сетки по переменным s и t (по умолчанию 20); fmap — векторная функция из трех элементов от трех аргументов, задающая преобразование координат.

Примеры вложенных массивов, которые создаются функциями createMesh и createspace, приведены в листинге 9.20. Каждая матрица из числа трех вложенных матриц, образующих массив, определяет х-, у- и z-координаты точек поверхности или кривой, соответственно.

Листинг 9.20. Результат действия функций CreateMeeh и CreateSpace (рис. 9.4 - 9.5)

Создание матриц специального вида

В Mathcad легко создать матрицы определенного вида с помощью одной из встроенных функций. Примеры использования этих функций приведены в листинге 9.21.

identity (N) — единичная матрица размера NXN; diag(v) — диагональная матрица, на диагонали которой находятся элементы вектора v; geninv(A) — создание матрицы, обратной (слева) матрице А; rref (A) — преобразование матрицы или вектора А в ступенчатый вид; N — целое число; v — вектор; А —матрица из действительных чисел.

Размер NXM матрицы А для функции geninv должен быть таким, чтобы N>M.

Листинг 9.21. Создание матриц специального вида


9.2.2. Слияние и разбиение матриц

Из матрицы или вектора можно выделить либо подматрицу, либо вектор-столбец, либо отдельный элемент. И обратно, можно "склеить" несколько матриц в одну.

Выделение части матрицы

Часть матрицы выделяется одним из следующих способов:

для выделения одного элемента предназначен оператор нижнего индекса (подробнее об этом операторе рассказано в разд. "Доступ к элементам массива" гл. 4). Оператор вводится нажатием кнопки Subscript (Нижний индекс) со значком хn на панели Matrix (Матрица), либо нажатием клавиши <[> (листинг 9.22, вторая строка сверху); для выделения из матрицы столбца примените оператор выделения столбца нажатием кнопки Matrix Column с изображением угловых скобок <> на панели Matrix, либо сочетанием клавиш <Ctrl>+<6> (листинг 9.22). Этот оператор называют еще, по аналогии с предыдущим, оператором верхнего индекса; чтобы выделить из матрицы строку, примените тот же оператор О к транспонированной матрице (листинг 9.22, снизу); для выделения подматрицы используйте встроенную функцию subma-trix(A/ir/jr,ic, jc), возвращающую часть матрицы А, находящуюся между строками ir, jr и столбцами ic, jc включительно (листинг 9.23).

Выделить из матрицы один столбец или строку можно и с помощью функции submatrix.

Листинг 9.22. Доступ к отдельным элементам, столбцам и строкам матрицы

Листинг 9.23. Выделение подматрицы

Те же операции применимы к матрицам-векторам и матрицам-строкам. Следует помнить только, что размер их составляет NX1 и 1XN, соответственно (листинг 9.24).

Листинг 9.24 Выделение частей из векторов и строк

Слияние матриц

Для того чтобы составить из двух или более матриц одну, в Mathcad предусмотрены две матричные функции (листинг 9.25):

augment (А, в, с,...) — матрица, сформированная слиянием матриц-аргументов слева направо; stack (А, в, с,...) — матрица, сформированная слиянием матриц-аргументов сверху вниз; А,В,С,... — векторы или матрицы соответствующего размера.

Листинг 9.25. Прмеры слияния матриц


9.2.3. Вывод размера матриц

Для получения сведений о характеристиках матриц или векторов предусмотрены следующие встроенные функции (листинг 9.26):

rows (A) — число строк; cols (A) — число столбцов; length (v) — число элементов вектора; last(v) — индекс последнего элемента вектора; А — матрица или вектор; v — вектор.

Число элементов вектора и индекс его последнего элемента совпадают, если индексы нумеруются с 1, т. е. системная константа ORIGIN равна 1 (см. гл. 4).

Листинг 9.26. Размер матриц и векторов


9.2.4. Сортировка матриц

Часто бывает нужно переставить элементы матрицы или вектора, расположив их в определенной строке или столбце в порядке возрастания или убывания. Для этого имеются несколько встроенных функций, которые позволяют гибко управлять сортировкой матриц:

sort(v) — сортировка элементов вектора в порядке возрастания (листинг 9.27); csort(A,i) — сортировка строк матрицы выстраиванием элементов 1-го столбца в порядке возрастания (листинг 9.28); rsort(A,i) — сортировка столбцов матрицы выстраиванием элементов i-й строки в порядке возрастания (листинг 9.29); reverse (v) — перестановка элементов вектора в обратном порядке (листинг 9.27); v — вектор; А — матрица; i — индекс строки или столбца.

Если элементы матриц или векторов комплексные, то сортировка ведется по действительной части, а мнимая часть игнорируется.

Листинг 9.27. Сортировка векторов

Листинг 9.28. Сортировка матриц по столбцу

Листинг 9.29. Сортировка матриц по строке (матрица А из листинга 9.28)


9.2.5. Норма квадратной матрицы

В линейной алгебре используются различные матричные нормы (norm), которые ставят в соответствие матрице некоторую скалярную числовую характеристику. Норма матрицы отражает порядок величины матричных элементов. В разных специфических задачах линейной алгебры применяются различные виды норм. Mathcad имеет четыре встроенные функции для расчета разных норм квадратных матриц:

norm1 (A) — норма в пространстве L1; norm2 (A) — норма в пространстве L2; norme(A) — евклидова норма (euclidean norm); normi (A) — max-норма, или норма (infinity norm); А — квадратная матрица.

Примеры расчета различных норм двух матриц А и в с различающимися на два порядка элементам! приведены в листинге 9.30. В последней строке этого листинга пояснен) определение евклидовой нормы, которое похоже на определение длины вектора.

В большинстве задач неважно, какую норму использовать. Как видно, в обычных случаях разные нормы дают примерно одинаковые значения, хорошо отражая порядок величины матричных элементов. Определение остальных норм заинтересованный метатель отыщет в справочниках по линейной алгебре или в справочной системе Mathcad (раздел Mathcad Resources).

Листинг 9.30. Нормы матриц


9.2.6. Число обусловленности квадратной матрицы

Еще одной важной характеристикой матрицы является ее число обусловленности (condition питэег). Число обусловленности является мерой чувствительности систелы линейных уравнений Ах=b, определяемой матрицей А, к погрешностям задания вектора b правых частей уравнений. Чем больше число обусловленности, тем сильнее это воздействие и тем более неустойчив процесс нахождения решения. Число обусловленности связано с нормой матрицы и вычисляется по-разному для каждой из норм;

cond1(A) — число обусловленности в норме L1; cond2 (A) — число обусловленности в норме L2; conde(A) — число обусловленности в евклидовой норме; condi (A) — число обусловленности в норме; А — квадратная магрица.

Расчет чисел обусловленности для двух матриц А и В показан в листинге 9.31. Обратите взимание, что первая из матриц является хорошо обусловленной, а вторая - плохо обусловленной (две ее строки определяют очень близкие системы уравнений, с точностью до множителя з). Вторая строка листинга дает формальное определение числа обусловленности как произведения норм исходной и обратной матриц. В других нормах определение точно такое же.

Как нетрудно понять, матрицы А и в из предыдущего листинга 9.30 обладают одинаковыми числами обусловленности, т, к. В=100А, и, следовательно, обе матрицы определяют одну и ту же систему уравнений.

Листинг 9.31. Чиса обусловленности матриц


9.2.7. Ранг матрицы

Рангом (rank) матрицы называют наибольшее натуральное число k, для которого существует не равный нулю определитель k-ro порядка подматрицы, составленной из любого пересечения k столбцов и k строк матрицы.

Для вычисления ранга в Mathcad предназначена функция rank.

rank (А) — ранг матрицы; А — матрица.

Листинг 9.32. Ранг матрицы


9.3. Системы линейных алгебраических уравнений

Центральным вопросом вычислительной линейной алгебры является решение систем линейных алгебраических уравнений (СЛАУ), т. е. систем уравнений вида

аi1X1i2х2+. . .+ainхn=bi                (1)

В матричной форме СЛАУ записывается в эквивалентном виде:

Ах = b,                                                      (2)

где А — матрица коэффициентов СЛАУ размерности NXN, х — вектор неизвестных, b— вектор правых частей уравнений.

К системам линейных уравнений сводится множество, если не сказать большинство, задач вычислительной математики. Один из таких примеров приведен в разд. "Разностные схемы для ОДУ" гл. 12.

СЛАУ имеет единственное решение, если матрица А является невырожденной, или, по-другому, несингулярной, т. е. ее определитель не равен нулю. С вычислительной точки зрения, решение СЛАУ не представляет трудностей, если матрица А не очень велика. С большой матрицей проблем также не возникнет, если она не очень плохо обусловлена. В Mathcad СЛАУ можно решить как в более наглядной форме (1), так и в более удобной для записи форме (2). Для первого способа следует использовать вычислительный блок Given/Find (см. гл. 8), а для второго — встроенную функцию isoive.

isoive ( А, Ь) — решение системы линейных уравнений; А — матрица коэффициентов системы; b — вектор правых частей.

Применение функции isoive показано в листинге 9.33. При этом матрица А может быть определена любым из способов (см. разд. "Массивы" гл. 4), необязательно явно, как во всех примерах этого раздела. Встроенную функцию isoive допускается применять и при символьном решении СЛАУ (листинг 9.34).

Соответствующая матрице А и вектору ь система уравнений выписана явно в листинге 9.35.

Листинг 9.33. Решение СЛАУ

Листинг 9.34. Символьное решение СЛАУ (продолжение листинга 9.33)

В некоторых случаях, для большей наглядности представления СЛАУ, его можно решить точно так же, как систему нелинейных уравнений (см. гл. 8). Пример численного решения СЛАУ из предыдущих листингов показан в листинге 9.35. Не забывайте, что при численном решении всем неизвестным требуется присвоить начальные значения (это сделано в первой строке листинга 9.35). Они могут быть произвольными, т. к. решение СЛАУ с невырожденной матрицей единственно.

При решении СЛАУ с помощью функции Find Mathcad автоматически выбирает линейный численный алгоритм, в чем можно убедиться, вызывая на имени Find контекстное меню.

Листинг 9.35. Решение СЛАУ с помощью вычислительного блока


9.4. Собственные векторы и собственные значения матриц

Вторая по частоте применения задача вычислительной линейной алгебры — это задача поиска собственных векторов х и собственных значений X матрицы А, т. е. решения матричного уравнения Ах=Хх. Такое уравнение имеет решения в виде собственных значений L1L2,... и соответствующих им собственных векторов x1, х2,... Для решения таких задач на собственные векторы и собственные значения в Mathcad встроено несколько функций, реализующих довольно сложные вычислительные алгоритмы:

eigenvais(A) — вычисляет вектор, элементами которого являются собственные значения матрицы А; eigenvecs(A) — вычисляет матрицу, содержащую нормированные собственные векторы, соответствующие собственным значениям матрицы А; n-й столбец вычисляемой матрицы соответствует собственному вектору n-го собственного значения, вычисляемого eigenvais; eigenvec(A,A.) — вычисляет собственный вектор для матрицы А и заданного собственного значения L; А — квадратная матрица.

Применение этих функций иллюстрирует листинг 9.36. Проверка правильности нахождения собственных векторов и собственных значений приведена в листинге 9.37. Причем проверка правильности выражения Ах=Lх проведена дважды — сначала на числовых значениях х и L, а потом путем перемножения соответствующих матричных компонентов.

Листинг 9.36. Поиск собственных векторов и собственных значений

Листинг 9.37. Проверка правильности нахождения собственных векторов собственных значений (продолжение листинга 9,36)

Помимо рассмотренной проблемы поиска собственных векторов и значений, иногда рассматривают более общую задачу, называемую задачей на обобщенные собственные значения: Aх=LBx. В ее формулировке помимо матрицы А присутствует еще одна квадратная матрица в. Для задачи на обобщенные собственные значения имеются еще две встроенные функции, действие которых аналогично рассмотренным (листинги 9.38 и 9.39):

genvais(A,B) — вычисляет вектор v собственных значений, каждый из которых удовлетворяет задаче на обобщенные собственные значения; genvecs(A/B) — вычисляет матрицу, содержащую нормированные собственные векторы, соответствующие собственным значениям в векторе v, который вычисляется с помощью genvais. В этой матрице i-й столбец является собственным вектором х, удовлетворяющим задаче на обобщенные собственные значения; А, в — квадратные матрицы.

Листинг 9.38. Поиск обобщенных собственных векторов и собственных значений

Листинг 9.39. Проверка правильности нахождения собственных векторов и собственных значений (продолжение листинга 9.38)


9.5. Матричные разложения

Современная вычислительная линейная алгебра — бурно развивающаяся наука. Главная проблема, рассматриваемая ею, — это проблема решения систем линейных уравнений. В настоящее время разработано множество методов, упрощающих эту задачу, которые, в частности, зависят от структуры матрицы СЛАУ. Большинство методов основано на представлении матрицы в виде произведения других матриц специального вида или матричных разложениях. Как правило, после определенного разложения матрицы задача линейной алгебры существенно упрощается. В Mathcad имеется несколько встроенных функций, реализующих алгоритмы наиболее популярных матричных разложений.


9.5.1. Разложение Холецкого

Разложением Холецкого симметричной матрицы А является представление вида A=L LT , где L — треугольная матрица (т. е. матрица, по одну из сторон от диагонали которой находятся одни нули). Алгоритм Холецкого реализован во встроено функции сholesky.

cholesky (А) — разложение Холецкого; А — квадратная, положительно-определенная матрица.

Пример разложения Холецкого приведен в листинге 9.40. Обратите внимание, что в результате получается верхняя треугольная матрица (нули сверху от диагонали), а транспонированная матрица является нижней треугольной. В последней строке листинга приведена проверка правильности найденного разложения.

Листинг 9.40. Разложение Холецкого


9.5.2. QR-разложение

QR-разложением матрицы А называется разложение вида A=Q R, где Q — ортогональная матрица, а R — верхняя треугольная матрица.

qr(A) —QR-разложение; А — вектор или матрица любого размера.

Результатом действия функции qr(A) является матрица L, составленная из матриц Q и к, соответственно. Чтобы выделить сами матрицы QR-разложения, необходимо применить функцию выделения подматрицы sub-matrix (листинг 9.41).

Листинг 9.41. QR-разложение


9.5.3. LU-разложение

L U-разложением матрицы А, или треугольным разложением, называется матричное разложение вида P A=L U и, где L и U — нижняя и верхняя треугольные матрицы, соответственно. P,A,L,U — квадратные матрицы одного порядка.

lu(A) — LU-разложение матрицы; А — квадратная матрица.

Фактически, треугольное разложение матрицы системы линейных уравнений производится при ее решении численным методом Гаусса.

Функция LU-разложения, подобно предыдущей функции QR-разложения, выдает составную матрицу в (листинг 9.42). Выделить матрицы P,L,U несложно при помощи встроеной функции submatrix.

Листинг 9.42. LU-разложение


9.5.4. Сингулярное разложение

Сингулярным разложением (singular value decomposition) матрицы А размера NXM (причем N>M) является разложение вида A=U S VT, где и и v — ортогональные матрицы размером NXN и мхм, соответственно, a s — диагональная матрица с сингулярными числами матрицы А на диагонали.

svds (A) — вектор, состоящий из сингулярных чисел; svd(A) — сингулярное разложение; А — действительная матрица.

Примеры поиска сингулярных чисел невырожденной и сингулярной матрицы приведены в листингах 9.43 и 9.44, соответственно. Проверка правильности сингулярного разложения приведена в листинге 9.45. Вычисленные сингулярные числа находятся на главной диагонали средней матрицы (ее остальные элементы, по определению, равны нулю). Сравнивая матрицы из листингов 9.44 и 9.45, Вы без труда разберетесь, каким образом следует выделять искомые матрицы сингулярного разложения из результата, поставляемого функцией svd.

Листинг 9.43. Сингулярные числа и собственные значения невырожденной матрицы

Листинг 9.44. Сингулярное разложение сингулярной матрицы

Листинг 9.45. Проверка сингулярного разложения (продолжение листинга 9.44)