2016-07-20 3 views
1

특정 선형 방정식을 풀려고 할 때 메모리 부족 오류가 발생합니다 (아래 코드를 작성합니다). 이후 C에서 당신이 어디에 내가 비효율적으로 matlab을 사용하고 궁금해하는 개체를 제어 할 수있는 모든 코딩을 사용하는 오전. 여기에 난 단지 (수레의 두 100 × 100 배열을 포함) 일부 파일을 열고이 코드 조각 전에 오류선형 방정식을 풀 때 Matlab에서 메모리 오류가 발생했습니다.

Error using \ 
Out of memory. Type HELP MEMORY for your options. 

Error in COV (line 62) 
x=myData(n).CovMatrix\myData(n).AA; 

를 얻을이 코드를 사용하려고 코드

myData(n).AMatrix = sparse(fscanf(fid2, '%f', [2*M, 2*M])); 
myData(n).AMatrix = transpose(myData(n).AMatrix); 

%Read the covariance^2 matrix 
myData(n).CovMatrix = sparse(fscanf(fid2, '%f', [2*M,2*M])); 
myData(n).CovMatrix = reshape(myData(n).CovMatrix, [4*M*M,1]); 

%Kronecker sum of A with itself 
I=sparse(eye(2*M)); 
myData(n).AA=kron(I, myData(n).AMatrix)+kron(myData(n).AMatrix,I); 
myData(n).AMatrix=[]; 
I=[]; 

%Solve (A+A)x = Vec(CovMatrix) 
x=myData(n).CovMatrix\myData(n).AA; 

의 관련 부분입니다 그래서 나는 그들이이 오류에 기여했다고 생각하지 않는다. 요소 AMatrix는 100 x 100 배열입니다. 따라서 문제의 선형 방정식은 10000 x 10000 차원을 갖습니다. 또한 AA에는 1 차원 커널이 있으므로 수치 계산에 영향을 주는지는 알 수 없습니다. 나중에 나는 얻은 솔루션을 커널의 직교 보완에 투영하여 "좋은"솔루션을 얻지 만 오류가 발생합니다. 익숙한 사람들은 Lyapunov 방정식 AX + XA = Cov에 대한 해답 일뿐입니다. 행렬 A는 드문 드문 하나 4 개의 50x50 서브 블록을 가지며 그 중 하나는 모두 0이고 다른 하나는 정체성이고 다른 하나는 대각선이며 다른 하나는 1000 이하의 비 - 원소를가집니다. 행렬 CovMatrix는 대각선에 50 개의 0이 아닌 요소가있는 대각선입니다.

문제는 현재 2.5GB의 가상 메모리가있는 2GB RAM이 장착 된 소형 개인용 컴퓨터에서만 계산할 수 있습니다. 내가 MATLAB에 memmory을 실행하면 심지어 간단한 조언을 열어주는 말들 있도록 메모리에 관해서는

>> memory 
Maximum possible array: 311 MB (3.256e+08 bytes) * 
Memory available for all arrays: 930 MB (9.749e+08 bytes) ** 
Memory used by MATLAB: 677 MB (7.102e+08 bytes) 
Physical Memory (RAM): 1931 MB (2.025e+09 bytes) 

내가 매우 지식이 아니다 있습니다. 감사.

+0

'kron'의 출력물 인'AA'는 여전히 스파 스입니까? 'issparse' 의미에서? –

+0

부역 :'sparse (eye (2 * M))'는'speye (2 * M)'로 할 수 있습니다. –

+0

AMatrix와 CovMatrix를 생성하기위한 코드를 임의의 값으로 작성하는 경우 (또는 임의의 값을 사용하는 경우에도) 코드를 작성하거나 두 파일을 어딘가에 게시 할 수 있다면 좋겠지 만, 설명에서 배열을 다시 만들려고 노력하고 있습니다. 나는 그것을 올바르게하고있다. 고려 해줘서 고마워. –

답변

1

복잡한 기능은 일반적으로 계산 중에 임시 메모리를 할당합니다. 10000x10000은 계산하는 동안 그러한 크기의 temp 조밀 한 행렬이 할당되면 상당히 커 보인다. 몇 가지 작은 문제 크기를 시도하고 현재 컴퓨터의 상한선을 찾을 수 있습니다.

관련 문제