2013-04-01 3 views
0

삼중 대 매트릭스를 나타내는 클래스를 생성 중입니다. 이것들은 대각선에 0이 아닌 값의 집합을 가지고있는 사각형 행렬이며, 위쪽과 아래쪽 대각선에 0이 아닌 값이 있고 그 다음에는 0이됩니다.삼중 대 매트릭스 (Java)에 대한 LU 분해

나는 이것을 저장하기 위해 각각의 대각선에 하나씩 세 개의 1D 배열을 사용하고 있습니다.

d_0 u_0 0  0 
l_0 d_1 u_1 0 
0 l_1 d_2 u_2 
0  0 l_2 d_3 

는 그래서 A_I 하나 개의 어레이는 u_i 용과 l_i 하나있다 :

여기 일례이다. 0은 저장되지 않습니다.

LU 분해를 수행하는 알고리즘이 필요합니다. LU 분해는 일반적으로 다음과 같은 두 행렬을 얻을 것이다 :

1  0  0 0 
a_0 1  0 0 
0 a_1 1 0 
0  0 a_2 1 


b_0 c_0 0  0 
0 b_1 c_1 0 
0  0 b_2 c_2 
0  0  0 b_3 

그러나, 1 년대는 제로와 같은 쓸모없는, 그들은 단지 폐기물 공간이 그래서 필요로하는 알고리즘은 LU 분해의 역할을 다음과 삼중 대각 행렬을 반환 :

b_0 c_0 0  0 
a_0 b_1 c_1 0 
0  a_1 b_2 c_2 
0  0 a_2 b_3 

나는 다음과 같은 방정식을 얻기 위해 관리했습니다 :

c_i = u_i for all i 

b_0=d_0 

l_i = a_i * b_i for all i 

d_(i+1) = a_i * c_i + b(i+1) for i>=1 

을하지만 난 A_I, b_i와 C의 모든 일반 식을 찾는 방법을 잘 모르겠어요 _i 그것은 내가 필요한 것입니다.

누가 나를 위해 이렇게 좋은 프로그램 알고리즘을 알고 좋은가? 나는 효율적으로 프로그램을 찾는 것이 아니라 가장 쉬운 프로그램을 찾고 있습니다.

대단히 감사드립니다.

답변

0

숙제가 있습니까?

왜 바퀴를 다시 발명합니까? C#을 사용하여 LU 분해를 수행하는 방법에 대한이 링크를 사용하십시오. 죄송합니다 당신은 자바

http://msdn.microsoft.com/en-us/magazine/jj863137.aspx

static double[][] MatrixDecompose(double[][] matrix, 
    out int[] perm, out int toggle) { 
    ... 
} 
그 방법의 문제는 사실 내가 저장있을 때 나는 2 차원 배열로 내 행렬에 데이터를 저장하고있어 가정하는 것이다
+0

로 번역해야 3 개의 1D 어레이로 만약 내가 그것을 사용했다면 나는 현재 행하고있는 것처럼 물건을 보관하는 지점을 무너 뜨리는 매트릭스의 구조를 바꾸는 것을 어지럽히 야합니다. 나는 평범한 행렬 (non-tridiagonal)을위한 클래스를 가지고 있는데, 실제로 여기에 2D 배열을 사용하기 때문에이 메소드와 상당히 유사한 메소드를 사용한다. –

+0

그래서 문제는 LU 분해와 관련이 없지만 스토리지와 관련이 있습니다. 'lu [i] [j]'요소를 저장 체계로 변환 할 방법이 없습니까? – ja72