/ / Простий алгоритм генерування позитивно-напіввизначених матриць - алгоритм, математика, матриця

Простий алгоритм генерації позитивно-напівтвердих матриць - алгоритм, математика, матриця

Я хочу генерувати позитивні випадкові напіввизначені матриці. Я шукаю алгоритм або більш переважно просту реалізацію алгоритму в C, MATLAB, Java або будь-якій мові.

Відповіді:

37 для відповіді № 1
  1. генерувати випадкову матрицю
  2. помножити його на власну транспозицію
  3. Ви отримали позитивну напіввизначену матрицю.

Приклад коду (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

16 за відповідь № 2

Ви повинні чітко визначити своє визначення"випадковий". Які ваші обмеження на отриману матрицю? Хочете, щоб коефіцієнти були рівномірно або нормально розподілені? Ви хочете, щоб власні значення мали певний розподіл? (і т.д.)

Існує ряд способів генерування позитивних напіввизначених матриць М, включаючи:

  1. Враховуючи довільну матрицю A, обчислимо M = AТ.A (побудова a Розкладання Холецкого)
  2. Враховуючи довільну діагональну матрицю S з невід'ємними діагональними записами, і ортонормальну матрицю Q того ж розміру, обчислити M = QSQТ. (побудова a розкладання сингулярних значень)

Для чисельних причин я, ймовірно, вибираю другий підхід, генеруючи діагональну матрицю з бажаними властивостями, потім генеруючи Q як склад чисел Роздуми домогосподарств (генерувати випадковий вектор v, масштаб до одиничної довжини, H = I - 2vvТ.); Я підозрюю, що ви хочете використовувати K * N, де N - розмір матриці M, а K - число між 1.5-3 (я здогадуюсь про це), що гарантує, що вона має достатньо ступенів свободи.

Ви також можете генерувати ортонормальну матрицю Q, використовуючи Дає обертання: вибираємо 2 різні значення від 1 до N і генеруємоa обертання Givens щодо цієї пари осей, з кутом рівномірно розподіленим від 0 до 2 * pi. Потім візьмемо з них K * N (ті ж міркування, що й вище, ніж вище), а їх склад дає Q.

edit: I "d здогадатися (не впевнений), що якщо у вас є коефіцієнти, які єнезалежно генеруються і нормально розподілені, тоді матриця в цілому буде "нормально розподілена" (що б це не означало). Це вірно для векторів, принаймні. (N незалежно згенерованих гауссівських випадкових величин, по одному для кожного компонента, дає вам гаусівський випадковий вектор) Це не так для рівномірно розподілених компонентів.


8 за відповідь № 3

Якщо ви можете створити випадкову матрицю у вашійвибраної мови, потім, використовуючи властивість, що матриця, помножена на її транспонування, є позитивною напів-визначеною, можна генерувати випадковий позитивний напіввизначений matix

У Matlab це було б так само просто

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

5 за відповідь № 4

Природні розподіли на позитивних напіввизначених матрицях є Відомо розподіл.


2 для відповіді № 5

A "* A дасть позитивну напівфайт матрицю iffі тільки якщо А має рангову недостатність. Отже, відповіді, викладені вище і скопійовані з Вікіпедії, як правило, невірні. Для обчислення позитивної напіввизначеної матриці просто візьміть будь-який прямокутний m по n матриці (m <n) і помножте її на її транспонування. Тобто. якщо B є m по n матриці, з m <n, то B "* B є напіввизначеною матрицею. Сподіваюся, це допоможе.