Матричные функции
Весьма представителен в MATLAB набор матричных функций. Они перечислены ниже.
- ехрт(Х) – возвращает ех от матрицы X. Комплексный результат получается, если X имеет неположительные собственные значения. Функция expm является встроенной и использует разложение Паде. Ее вариант в виде m-файла располагается в файле expm1.m. Второй метод вычисления матричной экспоненты использует разложение Тейлора и находится в файле expm2.m. Метод Тейлора не рекомендуется применять как основной, так как он зачастую бывает относительно медленным и неточным. Реализация третьего способа вычисления матричной экспоненты находится в файле ехртЗ.m и использует спектральное разложение матрицы А. Этот метод неудачен, если входная матрица не имеет полного набора линейно независимых собственных векторов.
Пример:
>
>
S
-
[l.
0.3
:
1.3.1
:
4.0.0
]
S
=
1
0
3
1
3
1
4
0
0
>
>
a
=
expm(S)
a
=
31.2203
0
23.3779
38.965920.0855
30.0593
31.1705
0
23.4277
- funm(X, @function) [Форма funm(X,@function), как в предыдущих версиях MATLAB, по-прежнему возможна, но не рекомендуется.– Примеч. ред.] – возвращает любую функцию от квадратной матрицы X, если правильно ввести имя, составленное из латинских букв. Команды funm(X,@exp), funm(X,@sqrt), funm(X.@log) Hexpm(X),sqrtm(x),logm(X) вычисляют соответственно одинаковые функции, но используют разные алгоритмы. Однако предпочтительнее использовать ехрт(Х), sqrtm(x).logm(X);
- [Y.esterr] = funm(X.@function) – не выдает никакого сообщения, но помимо результата вычислений в матрице Y возвращает грубую оценку относительной погрешности результата вычислений funm в esterr. Если матрица X – действительная симметрическая или комплексная эрмитова, то ее форма Шура диагональна и полученный результат может иметь высокую точность.
Примеры:
>
>
S
=
[
1.0.3
:
1.3.1
:
4.0.0
]
1
0
3
1
3
1
4
0
0
>
>
a
=
funm(S.@exp)
a
=
31.22030.0000
23.3779
38.965920.085530.0593
31.1705
-
0.000023.4277
- logm(X) – возвращает логарифм матрицы. Результат получается комплексным, если X имеет отрицательные собственные значения;
- [Y.esterr]=logm(X) – не выдает какого-либо предупреждающего сообщения, но возвращает оценку погрешности в виде относительной невязки norm(expm(Y)-X)/norm(X);
Если матрица X – действительная симметрическая или комплексная эрмитова, то теми же свойствами обладает и logm(X).
Пример:
a
=
31.22030.0000
23.3779
38.965920.085530.0593
31.1705
-
0.000023.4277
>
>
logm(a)
ans
=
1.0000
0.0000
3.0000
1.0000
3.0000
1.0000
4.0000
-
0.0000
-
0.0000
- sqrtm(X) – возвращает квадратный корень из X, соответствующий неотрицательным действительным частям собственных значений X. Результат получается комплексным, если X имеет отрицательные собственные значения. Если X вырожденная, то выдает предупреждение об ошибке;
- [Y.resnonii]=sqrtm(X) – не выдает какого-либо предупреждающего сообщения, но возвращает оценку погрешности в виде относительной невязки по нормам Фробениуса (см. урок 11) norm(X-Y^ 2, ' fro') /norm(X, ' fro');
- [Y .alpha, condest]=sqrtm(X) – с тремя выходными аргументами функция помимо квадратного корня возвращает также фактор стабильности (но не невязку!) и оценку числа обусловленности результирующей матрицы Y.
Пример:
>
>
S
=
[
2.1.0
;
6.7
.
-
2
:
3.4.0
];
>
>
e
=
sqrtm(S)
e
=
1.2586
0.2334
0.0688
1.6066
2.7006
-
0.6043
0.5969
1.1055
0.7918
Что нового мы узнали?
В этом уроке мы научились:
- Создавать матрицы различного вида, включая "магическую" матрицу.
- Создавать векторы равноотстоящих точек с разным масштабом.
- Объединять матрицы, используя функцию конкатенации.
- Создавать матрицы с заданной диагональю.
- Выполнять перестановки элементов матриц.
- Вычислять суммы и произведения элементов матриц.
- Осуществлять поворот матриц и выделение их треугольных частей.
- Работать с тестовыми матрицами Адамара, Ганкеля, Гильберта, Паскаля, Теплица и Уилкинсона.
- Работать с различными матричными функциями.