ГЛАВА 9

Матричные вычисления можно условно разделить на несколько типов. Первый тип - это простейшие действия, которые реализованы операторами(см. разд. 9.1) и несколькими функциями, предназначенными для создания,объединения, сортировки, получения основных свойств матриц и т. п. (см.разд. 9.2). Второй тип - это более сложные функции, которые реализуюталгоритмы вычислительной линейной алгебры, такие как решение системлинейных уравнений (см. разд. 9.3), вычисление собственных векторов исобственных значений (см. разд. 9.4), различные матричные разложения(см. разд. 9.5).
9.1. Простейшие операции с матрицами
Простейшие операции матричной алгебры реализованы в MathCAD в видеоператоров. Написание операторов по смыслу максимально приближенок их математическому действию. Каждый оператор выражается соответствующим символом. Рассмотрим матричные и векторные операции MathCAD 2001.Векторы являются частным случаем матриц размерности NXI, поэтому дляних справедливы все те операции, что и для матриц, если ограничения особо не оговорены (например, некоторые операции применимы только кквадратным матрицам NXN). Какие-то действия допустимы только для векторов (например, скалярное произведение), а какие-то, несмотря на одинаковое написание, по-разному действуют на векторы и матрицы.
Непосредственное проведение векторных операций над строками, т. е. матрицами 1XN, невозможно; для того чтобы превратить строку в вектор, ее нужнопредварительно транспонировать.
9.1.1. Транспонирование
Транспортированием называют операцию, переводящую матрицу размерности MXN в матрицу размерности ыхм, делая столбцы исходной матрицы строками, а строки - столбцами. Пример приведен в листинге 9.1. Ввод символатранспонирования (transpose) осуществляется с помощью панели инструментов Matrix (Матрица) или нажатием клавиш <Ctrl>+<!>. He забывайте,что для вставки символа транспонирования матрица должна находиться между линиями ввода. Напоминание о линиях ввода по отношению к матрицамприведено в разд. 9.1.4.

Рисунок 9.1
Рис. 9.1. Панель инструментовMatrix
Листинг 9.1. Транспонирование векторов и матриц
Листинг 9.1
9.1.2. Сложение
В MathCAD можно как складывать матрицы, так и вычитать их друг издруга. Для этих операторов применяются символы <+> или <-> соответственно. Матрицы должны иметь одинаковую размерность, иначе будет выдано сообщение об ошибке. Каждый элемент суммы двух матриц равен суммесоответствующих элементов матриц-слагаемых (листинг 9.2).
Листинг 9.2. Сложение и вычитание матриц
Листинг 9.2
Кроме сложения матриц, MathCAD поддерживает операцию сложения матрицы со скаляром (листинг 9.3). Каждый элемент результирующей матрицыравен сумме соответствующего элемента исходной матрицы и скалярнойвеличины.
Листинг 9.3. Сложение матрицы со скаляром
Листинг 9.3
Результат смены знака матрицы эквивалентен смене знака всех ее элементов. Для того чтобы изменить знак матрицы, достаточно ввести перед нейзнак минуса, как перед обычным числом (листинг 9.4).
Листинг 9.4. Смена знака матрицы
Листинг 9.4
9.1.3. Умножение
При умножении следует помнить, что матрицу размерности MXN допустимоумножать только на матрицу размерности NXP (р может быть любым). В результате получается матрица размерности МХР.
Чтобы ввести символ умножения, нужно нажать клавишу со звездочкой <*>или воспользоваться панелью инструментов Matrix (Матрица), нажав на нейкнопку Dot Product (Умножение) (рис. 9.1). Умножение матриц обозначается по умолчанию точкой, как показано в листинге 9.5. Символ умноженияматриц можно выбирать точно так же, как и в скалярных выражениях(см. разд. "Управление отображением некоторых операторов" гл. 2).
Листинг 9.5. Умножение матриц
Листинг 9.5
Обратите внимание, что попытка перемножить матрицы A и B несоответствующего (одинакового 2х3) размера оказалась безрезультатной: после введенного знака равенства находится пустой местозаполнитель, а само выражение в редакторе MathCAD выделяется красным цветом. При установкекурсора на это выражение, появляется сообщение о несовпадении числастрок первой матрицы числу столбцов второй матрицы.
Еще один пример, относящийся к умножению вектора на матрицу-строку и,наоборот, строки на вектор, приведен в листинге 9.6. Во второй строке этоголистинга показано, как выглядит формула при выборе отображения оператора умножения No Space (Вместе).
Листинг 9.6. Умножение вектора и строки
Листинг 9.6
Тот же самый оператор умножения действует на два вектора по-другому(см. разд. 9.1.6).
Аналогично сложению матриц со скаляром определяется умножение и деление матрицы на скалярную величину (листинг 9.7). Символ умножения вводится так же, как и в случае умножения двух матриц. На скаляр можно умножать любую матрицу MXN.
Листинг 9.7. Умножение матрицы на скаляр
Листинг 9.7
9.1.4. Определитель квадратной матрицы
Определитель (Determinant) матрицы обозначается стандартным математическим символом. Чтобы ввести оператор нахождения определителя матрицы,можно нажать кнопку Determinant (Определитель) на панели инструментовMatrix (Матрица) (рис. 9.2) или набрать на клавиатуре <|> (нажав клавиши<Shift>+<\>). В результате любого из этих действий появляется местозапол-нитель, в который следует поместить матрицу. Чтобы вычислить определитель уже введенной матрицы (именно этот случай показан на рис. 9.2), нужно:
1. Переместить курсор в документе таким образом, чтобы поместить матрицу между линиями ввода (напоминаем, что линии ввода - это вертикальный и горизонтальный отрезки синего цвета, образующие уголок,указывающий на текущую область редактирования).
2. Ввести оператор нахождения определителя матрицы.
3. Ввести знак равенства, чтобы вычислить определитель.

Рисунок 9.2
Рис. 9.2 Ввод символаопределителя матрицы
Результат вычисления определителя приведен в листинге 9.8.
Листинг 9.8. Поиск определителя квадратной матрицы
Листинг 9.8
9.1.5. Модуль вектора
Модуль вектора (vector magnitude) обозначается тем же символом, что и определитель матрицы. По определению, модуль вектора равен квадратномукорню из суммы квадратов его элементов (листинг 9.9).
Листинг 9.9. Поиск модуля вектора
Листинг 9.9
9.1.6. Скалярное произведение векторов
Скалярное произведение векторов (vector inner product) определяется как скаляр, равный сумме попарных произведений соответствующих элементов.Векторы должны иметь одинаковую размерность, скалярное произведениеимеет ту же размерность. Скалярное произведение двух векторов и и v равноu-v= | u | * | v | -cose, где 6 - угол между векторами. Если векторы ортогональны,их скалярное произведение равно нулю. Обозначается скалярное произведение тем же символом умножения (листинг 9.10). Для обозначения скалярного произведения пользователь также может выбирать представление оператора умножения.

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

Листинг 9.10. Скалярное произведение векторов
Листинг 9.10
С осторожностью перемножайте несколько (более двух) векторов. По-разномурасставленные скобки полностью изменяют результат умножения. Примеры такого умножения см. в листинге 9.11.
Листинг 9.11. Скалярное произведение векторов, умноженное на третий вектор
Листинг 9.11
9.1.7. Векторное произведение
Векторное произведение (cross product) двух векторов и и v с углом 0 междуними равно вектору с модулем |ui-|v|-sin9, направленным перпендикулярноплоскости векторов и и v. Обозначают векторное произведение символом х,который можно ввести нажатием кнопки Cross Product (Векторное произведение) в панели Matrix (Матрица) или сочетанием клавиш <Ctrl>+<8>.Пример приведен в листинге 9.12.
Листинг 9.12. Векторное произведение
Листинг 9.12
9.1.8. Сумма элементов вектораи след матрицы
Иногда бывает нужно вычислить сумму всех элементов вектора. Для этогосуществует вспомогательный оператор (листинг 9.13, первая строка), задаваемый кнопкой Vector Sum (Сумма вектора) на панели Matrix (Матрица)или сочетанием клавиш <Ctrl>+<4>. Этот оператор чаще оказывается полезным не в векторной алгебре, а при организации циклов с индексированными переменными.
На том же листинге 9.13 (снизу) показано применение операции суммирования диагональных элементов квадратной матрицы. Эту сумму называютследом (trace) матрицы. Данная операция организована в виде встроенной функции tr:
- tr (A) - след квадратной матрицы А.
Листинг 9.13. Суммирование элементов вектора и диагонали матрицы
Листинг 9.13
9.1.9. Обратная матрица
Поиск обратной матрицы возможен, если матрица квадратная, и ее определитель не равен нулю (листинг 9.14). Произведение исходной матрицы наобратную по определению является единичной матрицей. Для ввода оператора поиска обратной матрицы, нажмите кнопку Inverse (Обратная матрица)на панели инструментов Matrix (Матрица).
Листинг 9.14. Поиск обратной матрицы
Листинг 9.14
9.1.10. Возведение матрицы в степень
К квадратным матрицам можно формально применять операцию возведенияв степень п. Для этого п должно быть целым числом. Результат данной операции приведен в табл. 9.1. Ввести оператор возведения матрицы м в степеньп можно точно так же, как и для скалярной величины: нажав кнопку Raiseto Power (Возвести в степень) на панели Calculator (Калькулятор) или нажвклавишу <л>. После появления местозаполнителя в него следует ввести значение степени п.
Некоторые примеры возведения матриц в степень приведены в листинге 9.15.
Листинг 9.15. Примеры возведения квадратной матрицы в целую степень
Листинг 9.15
9.1.11. Векторизация массивов
Векторная алгебра MathCAD включает несколько необычный оператор, который называется оператором векторизации (vectorize operator). Этот операторпредназначен, как правило, для работы с массивами. Он позволяет провестиоднотипную операцию над всеми элементами массива (т. е. матрицы иливектора), упрощая тем самым программирование циклов. Например, иногдатребуется умножить каждый элемент одного вектора на соответствующийэлемент другого вектора. Непосредственно такой операции в MathCAD нет,но ее легко осуществить с помощью векторизации (листинг 9.16). Для этого:
1. Введите векторное выражение, как показано во второй строчке листинга(обратите внимание, что в таком виде символ умножения обозначаетоператор скалярного произведения векторов).
2. Переместите курсор таким образом, чтобы линии ввода выделяли все выражение, которое требуется подвергнуть векторизации (рис. 9.3).
3. Введите оператор векторизации, нажав кнопку Vectorize (Векторизация) на панели Matrix (Матрица) (рис. 9.3), или сочетанием клавиш <Ctrl>+<->.
4. Введите <=>, чтобы получить результат.

Рисунок 9.3
Рис. 9.3. Оператор векторизации
Листинг 9.16. Использование векторизациидля перемножения элементов вектора
Листинг 9.16
Оператор векторизации можно использовать только с векторами и матрицами одинакового размера.
Большинство неспецифических функций MathCAD не требуют векторизации для проведения одной и той же операции над всеми элементами вектора. Например, аргументом тригонометрических функций по определениюявляется скаляр. Если попытаться вычислить синус векторной величины,MathCAD осуществит векторизацию по умолчанию, вычислив синус каждого элемента и выдав в качестве результата соответствующий вектор. Пример показан в листинге 9.17.
Листинг 9.17. Векторизация необязательнадля большинства функций MathCAD
Листинг 9.17
9.1.12. Символьные операции с матрицами
Все матричные и векторные операторы, о которых шла речь выше, допустимо использовать в символьных вычислениях. Мощь символьных операцийзаключается в возможности проводить их не только над конкретными числами, но и над переменными. Несколько примеров приведены в листинге 9.18.
Листинг 9.18. Примеры символьных операций над векторами и матрицами
Листинг 9.18

Cовет
Смело используйте символьный процессор в качестве мощного математического справочника. Например, когда вы хотите вспомнить какое-либо определение из области линейной алгебры (так, правила перемножения и обращенияматриц показаны в первых строках листинга 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. Создание матрицы
Листинг 9.19
Для создания матриц имеются еще две специфические функции, применяемые, в основном, для быстрого и эффектного представления каких-либозависимостей в виде трехмерных графиков (типа поверхности или пространственной кривой). Все их аргументы, кроме первого (функции), необязательны. Рассмотрим первую из функций.
О CreateSpace (F(Wra fl, f2, f3) , tO, tl, tgrid, fmap) - создание вложенного
массива, представляющего х-, у- и z-координаты параметрической пространственной кривой, заданной функцией F;
 F(t) - векторная функция из трех элементов, заданная параметрически относительно единственного аргумента t;
 fl (t), f2 (t), f3 (t) - скалярные функции;
 to - нижний предел t (по умолчанию -5);
 tl - верхний предел t (по умолчанию 5);
 tgrid - число точек сетки по переменной t (по умолчанию 20);
 fmap - векторная функция от трех аргументов, задающая преобразование координат.

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

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

Рисунок 9.4
Рис. 9.4. Использование функции CreateSpace с разным набором параметров
Функция создания матрицы для графика трехмерной поверхности устроенасовершенно аналогично, за тем исключением, что для определения поверхности требуется не одна, а две переменных. Пример ее использования иллюстрирует рис. 9.5.
- CreateMesh(F(miH g, ИЛИ fI, f2, f3) , sO, si, to, tl,sgrid,tgrid,fmap) -
создание вложенного массива, представляющего х-, у- и z-координатыпараметрической поверхности, заданной функцией F;
 F(s,t) - векторная функция из трех элементов, заданная параметрически относительно двух аргументов s и t;
 g(s,t) - скалярная функция;
 fl (s,t) ,f2(s,t) ,f3(s,t) - скалярные функции;
 sо,to - нижние пределы аргументов s,t (по умолчанию -5);
 si,tl - верхние пределы аргументов s,t (по умолчанию 5);
 sgrid, tgrid - число точек сетки по переменным s и t (по умолчанию 20);
 fmap - векторная функция из трех элементов от трех аргументов, задающая преобразование координат.

Рисунок 9.5
Рис. 9.5. Использование функции CreateMesh с разным набором параметров
Примеры вложенных массивов, которые создаются функциями CreateMeshи Createspace, приведены в листинге 9.20. Каждая матрица из числа трехвложенных матриц, образующих массив, определяет х-, у- и z-координатыточек поверхности или кривой, соответственно.
Листинг 9.20. Результат действия функций CreateMesh и CreateSpaceфйс;9.4-9.5)
Листинг 9.20
Создание матриц специального вида
В MathCAD легко создать матрицы определенного вида с помощью однойиз встроенных функций. Примеры использования этих функций приведеныв листинге 9.21.
- identity (N) - единичная матрица размера NXN;
- diag(v) - диагональная матрица, на диагонали которой находятся элементы вектора v;
- geninv (A) - создание матрицы, обратной (слева) матрице А;
- rref (А) - преобразование матрицы или вектора А в ступенчатый вид;
 N - целое число;
 v - вектор;
 А - матрица из действительных чисел.

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

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

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

Листинг 9.22. Доступ к отдельным элементам, столбцам и строкам матрицы
Листинг 9.22
Листинг 9.23. Выделение подматрицы
Листинг 9.23
Те же операции применимы к матрицам-векторам и матрицам-строкам.Следует помнить только, что размер их составляет NXI и IXN, соответственно(листинг 9.24).
Листинг 9.24. Выделение частей из векторов и строк
Листинг 9.24
Слияние матриц
Для того чтобы составить из двух или более матриц одну, в MathCAD предусмотрены две матричные функции (листинг 9.25):
- augment (А, в, с,...) - матрица, сформированная слиянием матриц-аргументов слева направо;
- stack (А, в, с,...) - матрица, сформированная слиянием матриц-аргументов сверху вниз;
 А, в, с,... - векторы или матрицы соответствующего размера.
Листинг 9.25. Примеры слияния матриц
Листинг 9.25
9.2.3. Вывод размера матриц
Для получения сведений о характеристиках матриц или векторов предусмотрены следующие встроенные функции (листинг 9.26):
- rows (A) - число строк;
- cols (A) - число столбцов;
- length (v) - число элементов вектора;
- last (v) - индекс последнего элемента вектора;
 А - матрица или вектор;
 v - вектор.

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

Листинг 9.26. Размер матриц и векторов
Листинг 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.27
Листинг 9.28. Сортировка матриц по столбцу
Листинг 9.28
Листинг 9.29. Сортировка матриц по строке (матрица А из листинга 9.28)
Листинг 9.29
9.2.5. Норма квадратной матрицы
В линейной алгебре используются различные матричные нормы (norm), которые ставят в соответствие матрице некоторую скалярную числовую характеристику. Норма матрицы отражает порядок величины матричных элементов. В разных специфических задачах линейной алгебры применяются различные виды норм. MathCAD имеет четыре встроенных функции длярасчета разных норм квадратных матриц:
- norm1(A) - норма в пространстве L1;- norm2 (A) - норма в пространстве L2;- norme (A) - евклидова норма (euclidean norm);- normi(A) - max-норма, или ^-норма (infinity norm); А - квадратная матрица.
Примеры расчета различных норм двух матриц А и в с различающимися надва порядка элементами приведены в листинге 9.30. В последней строкеэтого листинга пояснено определение евклидовой нормы, которое похожена определение длины вектора.

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

Листинг 9.30. Нормы матриц
Листинг 9.30
9.2.6. Число обусловленностиквадратной матрицы
Еще одной важной характеристикой матрицы является ее число обусловленности (condition number). Число обусловленности является мерой чувствительности системы линейных уравнений д-х=ь, определяемой матрицей А, к погрешностям задания вектора ь правых частей уравнений. Чем больше числообусловленности, тем сильнее это воздействие и тем более неустойчив процесс нахождения решения. Число обусловленности связано с нормой матрицы и вычисляется по-разному для каждой из норм;
- cond1 (А) - число обусловленности в норме L1;- cond2 (A) - число обусловленности в норме L2;- conde (A) - число обусловленности в евклидовой норме;- condi (А) - число обусловленности в бессконечной-норме; А - квадратная матрица.
Расчет чисел обусловленности для двух матриц А и В показан в листинге 9.31. Обратите внимание, что первая из матриц является хорошо обусловленной, а вторая - плохо обусловленной (две ее строки определяют оченьблизкие системы уравнений, с точностью до множителя з). Вторая строкалистинга дает формальное определение числа обусловленности как произведения норм исходной и обратной матриц. В других нормах определениеточно такое же.

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

Листинг 9.31. Числа обусловленности матриц
Листинг 9.31
9.2.7. Ранг матрицы
Рангом (rank) матрицы называют наибольшее натуральное число k, для которого существует не равный нулю определитель k-ro порядка подматрицы,составленной из любого пересечения k столбцов и k строк матрицы.
Для вычисления ранга в MathCAD предназначена функция rank.- rank (A) - ранг матрицы; А - матрица.
Листинг 9.32. Ранг матрицы
Листинг 9.32
9.3. Системы линейныхалгебраических уравнений
Центральным вопросом вычислительной линейной алгебры является решение систем линейных алгебраических уравнений (СЛАУ), т. е. систем уравнений вида
В матричной форме СЛАУ записывается в эквивалентном виде:

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

СЛАУ имеет единственное решение, если матрица А является невырожденной, или по-другому, несингулярной, т. е. ее определитель не равен нулю.С вычислительной точки зрения, решение СЛАУ не представляет трудностей,если матрица А не очень велика. С большой матрицей проблем также невозникнет, если она не очень плохо обусловлена. В MathCAD СЛАУ можнорешить как в более наглядной форме (1), так и в более удобной для записиформе (2). Для первого способа следует использовать вычислительный блок Given/Find (см. гл. 8), а для второго - встроенную функцию lsolve.
- lsolve (А,Ь) - решение системы линейных уравнений;
 А - матрица коэффициентов системы;
 B - вектор правых частей.
Применение функции isoive показано в листинге 9.33. При этом матрица Аможет быть определена любым из способов (см. разд. "Массивы" гл. 4), необязательно явно, как во всех примерах этого раздела. Встроенную функциюisoive допускается применять и при символьном решении СЛАУ (листинг 9.34).

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

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

Примечание
При решении СЛАУ с помощью функции Find MathCAD автоматически выбирает линейный численный алгоритм, в чем можно убедиться, вызывая на имени Find контекстное меню.
Листинг 9.35. Решение СЛАУ с помощью вычислительного блока
Листинг 9.35
9.4. Собственные векторы и собственные значения матриц
Вторая по частоте применения задача вычислительной линейной алгебры -это задача поиска собственных векторов х и собственных значений X матрицы А, т. е. решение матричного уравнения А-х=А/х. Такое уравнение имеетрешения в виде собственных значений А.1Д2,... и соответствующих имсобственных векторов xi,x2,... Для решения таких задач на собственные векторы и собственные значения в MathCAD встроено несколько функций,реализующих довольно сложные вычислительные алгоритмы:
- eigenvais (A) - вычисляет вектор, элементами которого являются собственные значения матрицы А;
- eigenvecs (A) - вычисляет матрицу, содержащую нормированные собственные векторы, соответствующие собственным значениям матрицы А.n-й столбец вычисляемой матрицы соответствует собственному векторуn-го собственного значения, вычисляемого eigenvais;
- eigenvec (A,альфа,) - вычисляет собственный вектор для матрицы А и заданного собственного значения А.;
 А - квадратная матрица.
Применение этих функций иллюстрирует листинг 9.36. Проверка правильности нахождения собственных векторов и собственных значений приведенав листинге 9.37.
Листинг 9.36. Поиск собственных векторов и собственных значений
Листинг 9.36
Листинг 9.37. Проверка правильности нахождения собственных векторовсобственных значений (продолжение листинга 9.36)
Листинг 9.37
Помимо рассмотренной проблемы поиска собственных векторов и значений, иногда рассматривают более общую задачу, называемую задачей наобобщенные собственные значения: д-х=А/в-х. В ее формулировке помимо матрицы А присутствует еще одна квадратная матрица в. Для задачи на обобщенные собственные значения имеются еще две встроенные функции, действие которых аналогично рассмотренным (листинги 9.38 и 9.39):
- genvais(A, в) - вычисляет вектор v собственных значений, каждый изкоторых удовлетворяет задаче на обобщенные собственные значения;
- genvecs(A,B) - вычисляет матрицу, содержащую нормированные собственные векторы, соответствующие собственным значениям в векторе v,который вычисляется с помощью genvais. В этой матрице 1-й столбецявляется собственным вектором х, удовлетворяющим задаче на обобщенные собственные значения;
 А, в - квадратные матрицы.
Листинг 9.38. Поиск обобщенных собственных векторови собственных значений
Листинг 9.38
Листинг 9.39. Проверка правильности нахождения собственных векторов и собственных, значений (продолжение листинга 9.38)
Листинг 9.39
9.5. Матричные разложения
Современная вычислительная линейная алгебра - бурно развивающаясянаука. Главная проблема, рассматриваемая ею, - это проблема решениясистем линейных уравнений. В настоящее время разработано множествометодов, упрощающих эту задачу, которые, в частности, зависят от структуры матрицы СЛАУ. Большинство методов основано на представлении матрицы в виде произведения других матриц специального вида, или матричных, разложениях. Как правило, после определенного разложения матрицызадача линейной алгебры существенно упрощается. В MathCAD имеется несколько встроенных функций, реализующих алгоритмы наиболее популярных матричных разложений.
9.5.1. Разложение Холецкого
Разложением Холецкого симметричной матрицы А является представлениевида A=L-LT, где L - треугольная матрица (т. е. матрица, по одну из сторонот диагонали которой находятся одни нули). Алгоритм Холецкого реализован во встроенной функции cholesky.
- cholesky (А) - разложение Холецкого;
 А - квадратная, положительно-определенная матрица.
Пример разложения Холецкого приведен в листинге 9.40. Обратите внимание, что в результате получается верхняя треугольная матрица (нули сверху
от диагонали), а транспонированная матрица является нижней треугольной.В последней строке листинга приведена проверка правильности найденногоразложения.
Листинг 9.40. Разложение Хрлецкого
Листинг 9.40
9.5.2. QR-разложение
QR-разложением матрицы А называется разложение вида A=Q-R, где Q - ортогональная матрица, a R - верхняя треугольная матрица.
- qr (A) - QR-разложение;
 А - вектор или матрица любого размера.
Результатом действия функции qr(A) является матрица L, составленная изматриц Q и R соответственно. Чтобы выделить сами матрицы QR-разложения,необходимо применить функцию выделения подматрицы submatrix(листинг 9.41).
Листинг 9,41 .QR-разложение
Листинг 9.41
9.5.3. LU-разложение
LU-разложением матрицы А, или треугольным разложением, называетсяматричное разложение вида P-A=L-U, где L и U - нижняя и верхняя треугольные матрицы соответственно. Р,А,L,U- квадратные матрицы одного порядка.
- lu (A) - LU-разложение матрицы; А - квадратная матрица.

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

Функция LU-разложения, подобно предыдущей функции QR-разложения,выдает составную матрицу в (листинг 9.42). Выделить матрицы P,L, и несложно при помощи Встроенной функции submatrix.
Листинг 9.42. LU-разложение
Листинг 9.42
9.5.4. Сингулярное разложение
Сингулярным разложением (singular value decomposition) матрицы А размераNXM (причем N>M) является разложение вида A=U-S-VT, где и и v - ортогональные матрицы размером NXN и мхм соответственно, as - диагональная матрица с сингулярными числами матрицы А на диагонали.
- svds (A) - вектор, состоящий из сингулярных чисел;- svd (A) - сингулярное разложение; А - действительная матрица.
Примеры поиска сингулярных чисел невырожденной и сингулярной матрицы приведены в листингах 9.43 и 9.44 соответственно. Проверка правильности сингулярного разложения приведена в листинге 9.45. Вычисленныесингулярные числа находятся на главной диагонали средней матрицы (ееостальные элементы, по определению, равны нулю). Сравнивая матрицы из
листингов 9.44 и 9.45, вы без труда разберетесь, каким образом следует выделять искомые матрицы сингулярного разложения из результата, поставляемого функцией svd.
Листинг 9.43. Сингулярные числа и собственные значенияневырожденной матрицы
Листинг 9.43
Листинг 9.44. Сингулярное разложение сингулярной матрицы
Листинг 9.44
Листинг 9.45. Проверка сингулярного разложения(продолжение листинга 9.44)
Листинг 9.45

Глава 8 Содержание Глава 10