Ich habe nicht genügend Speicherfehler beim Versuch, eine bestimmte lineare Gleichung zu lösen (ich werde den Code unten setzen). Da ich es gewohnt bin, in C zu schreiben, wo Sie jede Kontrolle über die von Ihnen erstellten Objekte haben, frage ich mich, ob ich Matlab ineffizient verwende. Hier ist der relevante Teil des CodesSpeicherfehler in Matlab beim Lösen einer linearen Gleichung
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;
Der Versuch, diesen Code zu verwenden ich den Fehler
Error using \
Out of memory. Type HELP MEMORY for your options.
Error in COV (line 62)
x=myData(n).CovMatrix\myData(n).AA;
Vor diesem Stück Code ich nur einige Dateien öffnen (die zwei 100x100-Array von Schwimmern enthalten) also glaube ich nicht, dass sie zu diesem Fehler beitragen. Das Element AMatrix ist ein 100 x 100-Array. Also hat die in Frage stehende lineare Gleichung Dimensionen 10000 x 10000. Auch AA hat einen eindimensionalen Kern, ich weiß nicht, ob dies die numerischen Berechnungen beeinflusst. Später projiziere ich die erhaltene Lösung auf das orthogonale Komplement des Kernels, um die "gute" Lösung zu erhalten, aber sie kommt nach dem Fehler. Für Leute, die damit vertraut sind, ist dies nur eine Lösung für die Lyapunov-Gleichung AX + XA = Cov. Die Matrix A ist spärlich, sie hat 4 50x50-Sublocks, von denen die eine Nullen ist, die andere ist Identität, die andere ist diagonal und die andere hat weniger als 1000 Nicht-Null-Elemente. Die Matrix CovMatrix ist diagonal mit 50 Nicht-Null-Elementen in der Diagonalen.
Das Problem ist im Moment kann ich nur die Berechnungen auf einem kleinen PC mit 2GB RAM mit 2,5-6GB virtuellen Speicher machen. Wenn ich memmory auf Matlab laufen gibt es
>> 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)
Ich bin nicht sehr kenntnisreich, wenn es um Speicher kommt, damit ich offen bin selbst einfache Ratschläge. Vielen Dank.
Ist 'AA', die Ausgabe von' kron', noch spärlich? Im Sinne von 'issparse'? –
Minor Note: 'spärlich (Auge (2 * M))' kann mit 'speye (2 * M)' gemacht werden. –
Es wäre schön, wenn Sie einen Code schreiben könnten, um AMatrix und CovMatrix zu erstellen (auch wenn mit zufälligen Werten), oder die beiden Dateien irgendwo posten, weil ich versuche, Ihre Arrays aus Ihrer Beschreibung neu zu erstellen, und ich bin mir nicht sicher Ich mache es richtig. Danke für's Nachdenken. –