Подтвердить что ты не робот

Простой алгоритм построения положительно-полуопределенных матриц

Я хочу создать положительные случайные полуопределенные матрицы. Я ищу алгоритм или, более предпочтительно, простую реализацию алгоритма в C, matlab, java или любом языке.

4b9b3361

Ответ 1

  • генерировать случайную матрицу
  • умножить его на собственную транспозицию
  • вы получили положительную полуопределенную матрицу.

Пример кода (Python):

from scipy import random, linalg
matrixSize = 10 
A = random.rand(matrixSize,matrixSize)
B = numpy.dot(A,A.transpose())
print 'random positive semi-define matrix for today is', B

Ответ 2

Вам нужно четко указать свое определение "случайный". Каковы ваши ограничения на полученную матрицу? Вы хотите, чтобы коэффициенты были равномерно или нормально распределены? Вы хотите, чтобы собственные значения имели конкретное распределение? (И т.д.).

Существует несколько способов создания положительных полуопределенных матриц M, включая:

  • Для произвольной матрицы A вычислим M = A T A (построим Разложение Cholesky)
  • Для произвольной диагональной матрицы S с неотрицательными диагональными элементами и ортонормированной матрицы Q такого же размера вычислим M = QSQ T (построим разложение особых значений)

По численным причинам я, вероятно, выберу второй подход, создав диагональную матрицу с требуемыми свойствами, а затем создав Q как состав из числа Отражения домовладельца (генерировать случайный вектор v, масштаб до единицы длины, H = я - 2vv T); Я подозреваю, что вы хотите использовать K * N, где N - размер матрицы M, а K - число между 1.5-3 (я предполагаю, что это), что гарантирует, что он имеет достаточные степени свободы.

Вы также можете создать ортонормальную матрицу Q, используя вращение Гивенса: выберите два разных значения от 1 до N и создайте вращение Гивенса вокруг этой пары осей с углом равномерно распределенным от 0 до 2 * pi. Тогда возьмем K * N этих (то же рассуждение, что и выше параграфа), и их состав дает Q.

edit: Я бы предположил (не уверен), что если у вас есть коэффициенты, которые генерируются независимо и распределяются нормально, тогда матрица в целом будет "нормально распределена" (что бы это ни значило). Это верно для векторов, по крайней мере. (N независимо генерируемых гауссовских случайных величин, по одному для каждой компоненты, дает гауссовский случайный вектор). Это неверно для равномерно распределенных компонентов.

Ответ 3

Если вы можете создать случайную матрицу на выбранном вами языке, то, используя свойство, что матрица, умноженная на ее транспонирование, является положительной полуоткрытой, вы можете создать случайный положительный полуопределенный матикс

В Matlab это будет так же просто, как

% Generate a random 3x3 matrix
    A = rand(3,3) 
% Multiply by its tranpose
    PosSemDef = A'*A 

Ответ 5

A '* A даст положительную полуопределенную матрицу iff и только если A ранг-дефицит. Таким образом, ответы, изложенные выше и скопированные из википедии, в общем не верны. Для вычисления положительной полуопределенной матрицы просто возьмем любую прямоугольную m на n матрицу (m < n) и умножим ее на ее транспонирование. То есть если B является матрицей m на n, причем m < n, то B '* B является полуопределенной матрицей. Надеюсь, это поможет.