양성 세미 피니 나이트 매트릭스를 생성하기위한 간단한 알고리즘

StackOverflow https://stackoverflow.com/questions/619335

  •  03-07-2019
  •  | 
  •  

문제

양의 무작위 반 정체 행렬을 생성하고 싶습니다. 알고리즘 또는 더 바람직하게는 C, MATLAB, JAVA 또는 모든 언어에서 알고리즘의 간단한 구현을 찾고 있습니다.

도움이 되었습니까?

해결책

  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

다른 팁

"무작위"의 정의에 대해 명확해야합니다. 결과 매트릭스에 대한 제약은 무엇입니까? 계수가 균일하거나 정상적으로 분포되기를 원하십니까? 고유 값이 특정 분포를 갖기를 원하십니까? (등.)

다음을 포함하여 양성 반피 나이트 매트릭스 M을 생성하는 여러 가지 방법이 있습니다.

  1. 임의의 행렬 A가 주어지면 M = A를 계산합니다.A (구성 a Cholesky 분해)
  2. 음이 아닌 대각선 항목이있는 임의의 대각선 매트릭스와 동일한 크기의 직교 정상 행렬 Q가 주어지면 M = QSQ를 계산합니다. (구성 a 단일 가치 분해)

수치적인 이유로 원하는 특성으로 대각선 행렬을 생성하여 두 번째 접근 방식을 선택한 다음 여러 가지의 구성으로 Q를 생성합니다. 집주인 반사 (임의의 벡터 v 생성, 스케일에서 단위 길이, h = i -2vv); 여기서 n은 매트릭스 m의 크기이고 k는 1.5-3 사이의 숫자 (이것에 대해 추측하고 있음)를 사용하고 싶다고 생각합니다.

또한 직교 정상 매트릭스 Q를 사용하여 생성 할 수도 있습니다 Givens 회전: 1에서 N에서 N에서 N에서 2 개의 뚜렷한 값을 선택하고 해당 축 쌍에 대해 Givens 회전을 생성하며 각도는 0에서 2 * pi로 균일하게 분포됩니다. 그런 다음 이들 (위의 단락과 동일한 추론)의 k * n을 취하고 그 구성은 Q를 산출합니다.

편집 : 나는 추측 (확실하지 않음) 독립적으로 생성되고 정규 분포 된 계수가있는 경우, 매트릭스는 전체적으로 "정규 분포"(그 의미가 무엇이든). 적어도 벡터에게는 사실입니다. (N 독립적으로 생성 된 가우스 랜덤 변수, 각 구성 요소마다 하나는 가우스 랜덤 벡터를 제공합니다) 이것은 균일하게 분포 된 구성 요소에 적용되지 않습니다.

선택한 언어로 임의의 매트릭스를 생성 할 수 있다면, 매트릭스에 전환을 곱한 속성을 사용하면 양의 반 디핀이 있으면 무작위 양의 반 정체 Matix를 생성 할 수 있습니다.

Matlab에서는 간단합니다

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

양성 반 피니 나이트 매트릭스에 대한 자연 분포는 다음과 같습니다 Wishart 분포.

A '*A는 긍정적 인 Semidefite 행렬 IFF를 제공하며 A가 순위 결핍 인 경우에만 제공합니다. 따라서 위에서 언급 한 답변과 Wikipedia에서 복사 한 답변은 일반적으로 사실이 아닙니다. 양의 반 피니 나이트 매트릭스를 계산하려면 간단히 직사각형 m을 n 매트릭스 (m <n)로 가져 와서 전환으로 곱하십시오. 즉, b가 n 매트릭스에 의해 m이고, m <n 인 경우, b '*b는 반피 나이트 매트릭스이다. 이게 도움이 되길 바란다.

조금 명확히하기 위해 (나는 희망). a를 임의의 매트릭스 (예 : 임의의 정규 변수로 채워진), m> = n으로 mxn으로합시다. 그러면 A가 전체 열 순위 인 경우 A'A는 긍정적 인 명확성이 될 것입니다. a가 순위 <n이라면 a'a는 양의 반피 나이트가 될 것입니다 (그러나 긍정적 인 명확성은 아닙니다).

m> = n 인 임의의 정상 행렬은 거의 확실하게 전체 순위 일 것입니다. 순위 결핍 행렬을 생성하려면 다른 열의 선형 조합 인 하나 이상의 열을 추가 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top