Matlab - out of memory

 
Vista:

out of memory

Publicado por Alberto (4 intervenciones) el 30/03/2010 17:26:30
Hola, resulta que he hecho un programa que en un determinado punto compone una matriz, dicha matriz es sparse de 2178x2178 y me da error out of memory. ¿que puede pasar? matrices más pequeñas las maneja bien. ¿cuántas variables puede manejar matlab?
Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:out of memory

Publicado por David (26 intervenciones) el 30/03/2010 19:33:57
KREO KE ES POR EL TIPO DE PROCESAMIENTO KE LE DAS A LA MATRIZ.

Y EL NÚMERO DE VARIABLES KE MANEJA MATLAB NO TIENE KE VER MUCHO....

DEJAME VER TU CODIGO Y MIRO KE PUEDE SER....

ATT. David

[email protected]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:out of memory

Publicado por Alberto (4 intervenciones) el 30/03/2010 19:48:04
El código es este, primero construyo unos vectores y los meto como diagonales de una matriz sparse

d1=(-4)*ones(n1+n3-1,n8); %La inicializamos así y conservaremos los puntos interiores
B1=zeros(n1+n3-1,n8); %Construyo el vector de términos independientes inicializado a 0
for i=1:(n1+n3-1)
for j=1:n8
if d1(i,j)==(-4) %puntos interiores que se iran sobreescribiendo segun convenga
d2sup(i,j)=1;
d2inf(i,j)=1;
d3sup(i,j)=1;
d3inf(i,j)=1;
end
if i==1 && j>1 && j<n8 %Frontera OG
d1(i,j)=-4;
d2sup(i,j)=2;
d2inf(i,j)=0;
d3sup(i,j)=1;
d3inf(i,j)=1;
B1(i,j)=b;
end
if i>1 && i<n1 && j==1 %Frontera OA
d1(i,j)=a;
d2sup(i,j)=1;
d2inf(i,j)=1;
d3sup(i,j)=2;
d3inf(i,j)=0;
B1(i,j)=c;
end
if i==n1 && j>1 && j<n2 %Frontera AB
d1(i,j)=a;
d2sup(i,j)=0;
d2inf(i,j)=2;
d3sup(i,j)=1;
d3inf(i,j)=1;
B1(i,j)=c;
end
if i>n1 && i<(n1+n3-1) && j==n2 %Frontera BC
d1(i,j)=a;
d2sup(i,j)=1;
d2inf(i,j)=1;
d3sup(i,j)=2;
d3inf(i,j)=0;
B1(i,j)=c;
end
if i==(n1+n3-1) && j>n2 && j<(n2+n4-1) %Frontera CD
d1(i,j)=a;
d2sup(i,j)=0;
d2inf(i,j)=2;
d3sup(i,j)=1;
d3inf(i,j)=1;
B1(i,j)=c;
end
if i>n7 && i<(n7+n5-1) && j==(n2+n4-1) %Frontera DE
d1(i,j)=a;
d2sup(i,j)=1;
d2inf(i,j)=1;
d3sup(i,j)=0;
d3inf(i,j)=2;
B1(i,j)=c;
end
if i==n7 && j>(n2+n4-1) && j<n8 %Frontera EF
d1(i,j)=a;
d2sup(i,j)=0;
d2inf(i,j)=2;
d3sup(i,j)=1;
d3inf(i,j)=1;
B1(i,j)=c;
end
if i>1 && i<n7 && j==n8 %Frontera FG
d1(i,j)=a;
d2sup(i,j)=1;
d2inf(i,j)=1;
d3sup(i,j)=0;
d3inf(i,j)=2;
B1(i,j)=c;
end
if i>n1 && j<n2 %Espacio Inferior
d1(i,j)=1;
d2sup(i,j)=0;
d2inf(i,j)=0;
d3sup(i,j)=0;
d3inf(i,j)=0;
B1(i,j)=Texterna;
end
if i>n7 && j>(n2+n4-1) %Espacio Superior
d1(i,j)=1;
d2sup(i,j)=0;
d2inf(i,j)=0;
d3sup(i,j)=0;
d3inf(i,j)=0;
B1(i,j)=Texterna;
end
if i==1 && j==1 %Esquina O
d1(i,j)=a;
d2sup(i,j)=2;
d2inf(i,j)=0;
d3sup(i,j)=2;
d3inf(i,j)=0;
B1(i,j)=d;
end
if i==n1 && j==1 %Esquina A
d1(i,j)=e;
d2sup(i,j)=0;
d2inf(i,j)=2;
d3sup(i,j)=2;
d3inf(i,j)=0;
B1(i,j)=f;
end
if i==(n1+n3-1) && j==n2 %Esquina C
d1(i,j)=e;
d2sup(i,j)=0;
d2inf(i,j)=2;
d3sup(i,j)=2;
d3inf(i,j)=0;
B1(i,j)=f;
end
if i==(n1+n3-1) && j==(n2+n4-1) %Esquina D
d1(i,j)=e;
d2sup(i,j)=0;
d2inf(i,j)=2;
d3sup(i,j)=0;
d3inf(i,j)=2;
B1(i,j)=f;
end
if i==n7 && j==n8 %Esquina F
d1(i,j)=e;
d2sup(i,j)=0;
d2inf(i,j)=2;
d3sup(i,j)=0;
d3inf(i,j)=2;
B1(i,j)=f;
end
if i==1 && j==n8 %Esquina G
d1(i,j)=a;
d2sup(i,j)=2;
d2inf(i,j)=0;
d3sup(i,j)=0;
d3inf(i,j)=2;
B1(i,j)=d;
end
end
end

diag1=d1(:); %ponemos en forma de columna la diagonal 1

d2sup=d2sup(:); %ponemos en forma de columna las diagonales 2
d2inf=d2inf(:);

d3sup=d3sup(:); %ponemos en forma de columna las diagonales 3
d3inf=d3inf(:);

B=B1(:); %ponemos en forma de columna el vector de los términos independientes

m=0; %arreglamos el tamaño de las diagonales 2
for k=1:n8*(n1+n3-1) %arreglamos el tamaño de la diagonal 2 inf
if m~=0
diag2inf(m,1)=d2inf(k,1);
m=m+1;
else
m=1;
end
end
for k=1:n8*(n1+n3-1)-1 %arreglamos el tamaño de la diagonal 2 sup
diag2sup(k,1)=d2sup(k,1);
end


m=0; %arreglamos el tamaño de las diagonales 3
for k=1:n8*(n1+n3-1) %arreglamos el tamaño de la diagonal 3 inf
if m<n8
m=m+1;
else
m=m+1;
diag3inf(m-n8,1)=d3inf(k,1);
end
end
for k=1:n8*(n1+n3-1)-n8 %arreglamos el tamaño de la diagonal 3 sup
diag3sup(k,1)=d3sup(k,1);
end
%------------------------------------------------------------------------
%Colocamos las diagonales en la matriz
matrizA=diag(diag1)+diag(diag2sup,1)+diag(diag2inf,-1)+diag(diag3sup,n8)+diag(diag3inf,-n8);
A=sparse(matrizA);
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar