![]() |
Модуль matgen позволяет генерировать случайные матрицы с заданными свойствами. Для генерации используется высококачественный генератор случайныйх чисел, что позволяет исключить проблемы, связанные с нежелательной корреляцией элементов генерируемых матриц.
Эта задача решается с использованием функций rmatrixrndorthogonal и cmatrixrndorthogonal. Результатом работы является случайная вещественная, либо комплексная матрица, равномерно распределенная по Хаару. Эти функции умеренно устойчивы, в том числе и при использовании на больших матрицах, однако ортогональность матриц в пределах машинной точность не гарантируется (возможна умеренная потеря точности). Также следует отметить, что генерация ортогональной матрицы - сложный процесс, трудоемкость которого равна O(N 3). Технически генерация ортогональной матрицы реализована через умножение единичной матрицы на случайную ортогональную матрицу (см. следующий раздел).
Функции rmatrixrndorthogonalfromtheleft, rmatrixrndorthogonalfromtheright, cmatrixrndorthogonalfromtheleft, cmatrixrndorthogonalfromtheright умножают заданную прямоугольную матрицу справа или слева на случайную ортогональную матрицу. Эти функции разделяют все ограничения функций генерации случайных ортогональных матриц, изложенные выше. В случае, если размерность умножаемой матрицы M*N, а случайной матрицы - N*N, то трудоемкость задачи составит O(M·N 2)
В случае, если требуется умножить Эрмитову (симметричную) матрицу на случайную ортогональную матрицу с сохранением симметрии, т.е. осуществить операцию вида B=Q'·A·Q, где Q - случайная ортогональная матрица, то можно использовать функции smatrixrndmultiply/hmatrixrndmultiply.
Замечание #1
Следует отметить, что, в отличие от многих функций для работы с симметричными/Эрмитовыми матрицами, эти функции требуют задание ПОЛНОЙ матрицы A, а не только верхней или нижней половины.
Функции cmatrixrndcond/rmatrixrndcond/smatrixrndcond/hmatrixrndcond/spdmatrixrndcond/hpdmatrixrndcond позволяют генерировать случайные матрицы с заданным числом обусловленности. Генерируемая матрица при этом относится к одному из следующих классов: комплексная, вещественная, симметричная вещественная, Эрмитова, симметричная положительно определенная, Эрмитова положительно определенная.
Замечание #2
Генерация матрицы с требуемыми свойствами реализована через генерацию диагональной матрицы с требуемым распределением собственных значений, которая затем умножается на случайную ортогональную матрицу.
| C++ | matgen subpackage | |
| C# | matgen subpackage |
This article is intended for personal use only.
Исходный код на C#
Исходный код на C++
Исходный код на C++, использующий библиотеки MPFR/GMP.
Исходный код GMP доступен на сайте gmplib.org. Исходный код MPFR доступен на сайте www.mpfr.org.
Исходный код на Free Pascal.
Исходный код на Delphi.
Исходный код на VB.NET.
Исходный код на VBA.
Исходный код на Python (CPython и IronPython).
|
ALGLIB® - numerical analysis library, 1999-2012. |