/ / Prosty algorytm generowania macierzy dodatnio-pół -kończonych - algorytm, matematyka, macierz

Prosty algorytm generowania macierzy dodatnio-pół -kończonych - algorytm, matematyka, macierz

Chcę generować dodatnie przypadkowe, pół-określone macierze. Szukam algorytmu lub, bardziej korzystnie, prostej implementacji algorytmu w C, matlab, java lub dowolnym języku.

Odpowiedzi:

37 dla odpowiedzi № 1
  1. generować losową macierz
  2. pomnóż to przez własną transpozycję
  3. otrzymałeś pozytywną pół-określoną macierz.

Przykładowy kod (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 dla odpowiedzi nr 2

Musisz jasno określić swoją definicję"losowy". Jakie są twoje ograniczenia na wynikowej macierzy? Czy chcesz, aby współczynniki były równomiernie lub normalnie dystrybuowane? Czy chcesz, aby wartości własne miały konkretną dystrybucję? (itp.)

Istnieje wiele sposobów generowania pozytywnych pół -kończonych macierzy M, w tym:

  1. Mając dowolną macierz A, oblicz M = ATA (budowa a Cholesky rozkład)
  2. Biorąc pod uwagę dowolną macierz przekątnej S z nieujemnymi wpustami ukośnymi i ortonormalną macierzą Q o tym samym rozmiarze, oblicz M = QSQT (budowa a rozkład według wartości osobliwych)

Ze względów numerycznych prawdopodobnie wybrałbym drugie podejście, generując macierz diagonalną o pożądanych właściwościach, a następnie generując Q jako skład pewnej liczby Odbicie Householder (generuje losowy wektor v, skala do długości jednostki, H = I - 2vvT); Podejrzewam, że chcesz użyć K * N, gdzie N jest rozmiarem macierzy M, a K jest liczbą pomiędzy 1,5-3 (domyślam się na tym), która zapewnia, że ​​ma wystarczającą stopnie swobody.

Można również wygenerować ortonormalną macierz Q za pomocą Daje rotacje: wybierz 2 różne wartości od 1 do N i wygeneruja Daje rotację wokół tej pary osi, z kątem równomiernie rozłożonym od 0 do 2 * pi. Następnie weź K * N z tych (to samo rozumowanie jak powyżej), a ich skład daje Q.

edytuj: I d odgadnąć (nie jestem pewien), że jeśli masz współczynniki, które sągenerowane niezależnie i normalnie dystrybuowane, wówczas matryca jako całość byłaby "normalnie rozprowadzana" (cokolwiek to znaczy). Dotyczy to przynajmniej wektorów. (N niezależnie wygenerowanych zmiennych losowych Gaussa, po jednym dla każdego komponentu, daje losowy wektor Gaussa). To nie jest prawda dla jednorodnie rozproszonych komponentów.


8 dla odpowiedzi nr 3

Jeśli możesz wygenerować losową macierz w swoimwybrany język, a następnie za pomocą właściwości, że macierz pomnożona przez transpozycję jest dodatnią semi-definte, można wygenerować losowy dodatni semix określony

W Matlab będzie to tak proste jak

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

5 dla odpowiedzi № 4

Naturalne rozkłady na dodatnich macierzach pół -kończonych są Rozkłady Wishart.


2 dla odpowiedzi № 5

"* A da dodatnią matrycę semisfleksalnąi tylko jeśli A ma niedobór rang. Tak więc powyższe odpowiedzi i skopiowane z wikipedii nie są ogólnie prawdziwe. Aby obliczyć dodatnią macierz pół -kończoną, po prostu weźmy dowolną prostokątną m przez n macierz (m <n) i pomnóżmy ją przez jej transpozycję. To znaczy. jeśli B jest macierzą m przez n, to m <n, wtedy B "* B jest macierzą pół -kończoną. Mam nadzieję, że to pomaga.