특정 선형 방정식을 풀려고 할 때 메모리 부족 오류가 발생합니다 (아래 코드를 작성합니다). 이후 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)
내가 매우 지식이 아니다 있습니다. 감사.
'kron'의 출력물 인'AA'는 여전히 스파 스입니까? 'issparse' 의미에서? –
부역 :'sparse (eye (2 * M))'는'speye (2 * M)'로 할 수 있습니다. –
AMatrix와 CovMatrix를 생성하기위한 코드를 임의의 값으로 작성하는 경우 (또는 임의의 값을 사용하는 경우에도) 코드를 작성하거나 두 파일을 어딘가에 게시 할 수 있다면 좋겠지 만, 설명에서 배열을 다시 만들려고 노력하고 있습니다. 나는 그것을 올바르게하고있다. 고려 해줘서 고마워. –