2012-04-12 2 views
-1

분류를 위해 Jahmm java lib를 사용하고 있습니다. 일부 테스트를 수행하여 임의의 데이터 세트를 생성합니다.매트릭스가 "확실하지 않음"일 때 무엇이 ​​잘못 되었습니까?

가 I이 형식의 데이터 세트를 작성 :

[val_1.1 val_1.2 val_1.3];[val_2.1 val_2.2 val_2.3]; [val_3.1 val_3.2 val_3.3] etc... 

i는 임의의 함수를 사용하므로 등등

val_1.1 == val_1.2 == val_1.3 

val_2.1 == val_2.2 == val_2.3 

하고있다. 내가이 데이터 집합에 다음과 같은 함수를 호출 할 때

는는 IllegalArgumentException

static double[][] decomposeCholesky(double[][] m) 
{ 
    if (!isSquare(m)) 
     throw new IllegalArgumentException("Matrix is not square"); 

    double[][] l = matrix(nbRows(m), nbColumns(m)); 

    for (int j = 0; j < nbRows(m); j++) 
    { 
     double[] lj = l[j]; 
     double d = 0.; 

     for (int k = 0; k < j; k++) { 
      double[] lk = l[k]; 
      double s = 0.; 

      for (int i = 0; i < k; i++) 
       s += lk[i] * lj[i]; 

      lj[k] = s = (m[j][k] - s)/l[k][k]; 
      d = d + s * s; 
     } 

     if ((d = m[j][j] - d) <= 0.) 
      throw new IllegalArgumentException("Matrix is not positive " + 
      "defined"); 

     l[j][j] = Math.sqrt(d); 
     for (int k = j+1; k < nbRows(m); k++) 
      l[j][k] = 0.; 
    } 

    return l; 
} 

나의 순서 매트릭스 "는 긍정적 인 정의"가 아니라 그것이 무엇을 의미 하는가를 던져? 데이터 세트를 피하려면 어떻게해야합니까?

나는 수학이 좋지 않습니다! 미리 감사드립니다

+6

http://en.wikipedia.org/wiki/Positive-definite_matrix – Luciano

+2

자유 시간이 있지만 선형 시간 대수학 자라면, 그것은 당신에게 도움이 될 것이고, 그것은 긍정적 인 명확성에 대한 스칼라 - 행렬 유추 설명과 긍정적 인 명확한 행렬 생성에 대한 실질적인 제안을 위해 "재미" – Luciano

답변

3

나는 도서관을 모른다. 하지만 나는 "긍정적 인 정의"가 아닌 "긍정적 인 정의"를 의미한다고 생각한다.

여기 있습니다 : 정상적인 번호가 있으면 기호를 보면 양수 ​​또는 음수인지 쉽게 알 수 있습니다. 명확성은 매트릭스의 세계로 그 아이디어를 확장 한 것입니다. 일부 항목은 양수 일 수 있고 일부는 음수 일 수 있기 때문에 부호 만 보는 것이 더 이상 작동하지 않습니다.

(동일하게 입증 할 수 있습니다) 명확성의 다양한 정의가있다, 당신은 그들이 깔끔하게 여기에 나열된 찾을 수 있습니다 지금 http://en.wikipedia.org/wiki/Positive-definite_matrix#Characterizations

, 문제는 당신이 동등하게하여 행을 선택할 때하지 않는 것입니다 보장 긍정적 인 definiteness. 사실 3x3 행렬은 언제나 양의 semidefinite이고 절대로 확실하지 않습니다.
저는 조금 둘러 봤습니다. 여기에 몇 가지 힌트가 긍정적 인 확실한 매트릭스를 생성하는 방법은 다음과 같습니다 https://ece.uwaterloo.ca/~dwharder/NumericalAnalysis/04LinearAlgebra/posdef/

(rand(n, n) + (n - 1)*eye(n))

은 그래서 당신은 모든 항목이 는 다음 행렬은 N-1을 곱한 추가, 0과 1 사이의 무작위 anxn 매트릭스를 생성, 귀하의 경우 [2,0,0]; [0,2,0]; ...

도움이되는 희망 ...


p.s. 나는 당신의 매트릭스가 콜레 스킬을하고 싶어하기 때문에 매트릭스가 대칭이어야한다는 것을 잊어 버렸다. 하지만 간단합니다. 위에서 언급 한 바와 같이 행렬 A를 생성 한 다음 B = 1/2 * (A + A.transposed())를 선택합니다. 이 행렬 B는 여전히 양의 확정적이며 대칭 일 것입니다.

+0

+1입니다. –

+0

나는 수학적 용어로 이것을 설명하는 인터넷에서 많은 기사를 찾았는데, 나는 잘 모르겠다 고 대답했다. (기꺼이 또는 부끄러워 내가 알지 못한다.)) 당신은 설명이 단순한 영어 + 솔루션의 첫 번째 것이다. 엄지 손가락! – jorrebor

5

나는 코드의 저자가 "긍정적 인 명확한"을 의미한다고 생각합니다. 콜레 스키 분해를 고려하기 위해서는 매트릭스가 양의 값이어야합니다. 공식적인 정의는 정방 행렬 A가 모든 벡터 X의 경우에만, 확실한 긍정적이다 :

x'Ax> 0

모든 긍정적 인 명확한 행렬이 대각선, 사각형, 그래서 좋은 약 대칭 시작은 테스트에서 사각형 대칭 행렬 만 사용하고 어떻게 작동하는지보아야합니다. 행렬이 양의 값을 가지는지 확실히 확인하려면 각 고유 값을 테스트하여 각 값이> 0인지 확인하면됩니다. JAHMM에 행렬의 고유 값을 가져 오는 방법이 있는지는 잘 모르겠지만 그렇게 할 수는 있습니다.

관련 문제