Matlab - aumentar velocidad proceso

   
Vista:

aumentar velocidad proceso

Publicado por juan (43 intervenciones) el 16/04/2011 21:26:43
Hola a todos, en un .m escribí el siguiente programa:

X=[0 1 2];
Y=[0 1 1.5];
alfa=[];
for i=1:n-1
Alfa=atand((abs(Y(i+1))-abs(Y(i)))/abs(X(i+1)-X(i)));
alfa=[alfa Alfa];
end


Los alfa son las pendientes de las rectas. En matlab, a la derecha, aparece una barra con la siguiente sugerencia:

" 'alfa' migth be growin g inside a loop. Consider preallocating for speed"

¿Qué significa esto?
Un saludo y gracias a quien me pueda ayudar.
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

aumentar velocidad proceso

Publicado por juan (43 intervenciones) el 16/04/2011 21:28:25
Hola, aunque para la pregunta no haga falta, el programa bien hecho es el siguiente:

X=[0 1 2];
Y=[0 1 1.5];
n=length(X)
alfa=[];
for i=1:n-1
Alfa=atand((abs(Y(i+1))-abs(Y(i)))/abs(X(i+1)-X(i)));
alfa=[alfa Alfa];
end
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
Imágen de perfil de JOSE JEREMIAS CABALLERO

aumentar velocidad proceso

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3439 intervenciones) el 17/04/2011 04:08:15
HOla Juan.
Acabo de ejecutar tu programa que haz hecho, en mi caso matlab no muestra el mensaje que haz puesto arriba.

saludos:
JOSE JEREMIAS CABALLERO
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

aumentar velocidad proceso

Publicado por Juan (43 intervenciones) el 17/04/2011 11:22:18
Hola, puede ser que sea cosa del tipo de Matlab. Yo tengo el MATLAB 7.5.0 y cuando tengo escrito el programa en el Editor, a la derecha de todo, aparece una barra que tiene una línea de color naranja en la que si te pones encima de ella aparece el mensaje que te he comentado. ¿La puedes ver ahora?
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
Imágen de perfil de JOSE JEREMIAS CABALLERO

aumentar velocidad proceso

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3439 intervenciones) el 17/04/2011 19:13:46
Hola Juan.
Estuve revisando tu pregunta del foro. Y lo que sale al costado derecho del editor, son las advertencias sobre tu programa.
El programa que haz hecho esta bien, y de hecho te va a dar el resultado que deseas, pero el programa no es el optimo.
Que quiere decir esto: Que cuando ejecutes el programa se va a demorar mas de lo debido.
Para ver el tiempo de ejecucion utilizamos las funciones tic y toc de matlab.

Te copio el mensaje de adventencia de matlab

%==================================================
EXPLICACION
El tamaño de la variable indicada o matriz parece estar cambiando con cada iteración del bucle. Normalmente, este mensaje aparece porque es una matriz de crecimiento por cesión o concatenación. El crecimiento de una matriz por cesión o concatenación puede ser costoso. Para grandes series, MATLAB debe asignar un nuevo bloque de memoria y copiar el contenido de la matriz más para la nueva matriz, ya que hace que cada asignación. Los programas que cambie el tamaño de una variable de esta forma pueden pasar la mayor parte de su tiempo de ejecución de esta actividad ineficiente.
Por las mismas razones, hay sobrecarga significativa en la reducción de una matriz o en cambiar el tamaño de una variable en cada iteración

ACCION SEGERIDA
Considere una preasignacion una variable o una matriz antes de entrar en el bucle puede ser zeros, ones, cell o una función similar. Preallocating evita la necesidad de MATLAB para copiar los datos de una matriz a otra dentro del bucle. Para obtener ejemplos de código que pueden hacer y no asignar previamente una matriz, consulte "Preallocating matrices".

"Preallocating matrices".
(Preasignación hace innecesario que MATLAB para cambiar el tamaño de una matriz cada vez que agrandarlo. Utilice la función de preasignación apropiado para el tipo de matriz que se está trabajando.)

Cuando una matriz crece mediante la asignación de más allá del final de la matriz o mediante la concatenación, preasignación sólo no mejora el rendimiento. El código también debe utilizar los índices explícito.
Si usted no sabe el tamaño de un arreglo antes de que comience el bucle, se asigna previamente, y luego si es necesario, reducirla después del bucle finaliza.
Si alguna de las siguientes condiciones se cumplen, podría ser conveniente suprimir este mensaje, tal como se describe en:
• El código del bucle es la búsqueda de eventos poco frecuentes o excepcionales, pero no hay que esperar para encontrar tales eventos. (En este caso, puede ser razonable para hacer crecer la matriz sólo como el bucle encuentra estos eventos.)
• El conjunto es pequeño y seguirá siendo pequeña, por lo tanto, el impacto de volver a copiar también es pequeño.
• El código preallocates la matriz, pero de una manera que M-Lint no reconoce
%===========================================


Ahora te mando dos programas con sus respectivos tiempos de ejecucion:

Este el primer programa , esta optimizado y su tiempo de ejecucion. Ademas en la parte derecha arriba del editor de matlab, está de color verde.

tic
X=[0 1 2];
Y=[0 1 1.5];
n=length(X);
Alfa=zeros(1,n-1);
for i=1:n-1
Alfa(i)=atand((abs(Y(i+1))-abs(Y(i)))/abs(X(i+1)-X(i)));
end
toc
clear

%tiempo de ejecuion:
Elapsed time is 0.000085 seconds.


Este es el segundo programa, y su tiempo de ejecuion.
tic
X=[0 1 2];
Y=[0 1 1.5];
n=length(X);
alfa=[];
for i=1:n-1
Alfa=atand((abs(Y(i+1))-abs(Y(i)))/abs(X(i+1)-X(i)));
alfa=[alfa Alfa];
end
toc
clear

%tiempo de ejecuion:
Elapsed time is 0.000098 seconds.


Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS EN MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
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

aumentar velocidad proceso

Publicado por Juan (43 intervenciones) el 22/04/2011 12:10:58
Hola José, muchas gracias por tu respuesta, la verdad es que tienes razón, se nota que es mucho más rápido el programa óptimo. Por cierto, ¿la ayuda que tienes en tu matlab está en español? es que yo lo tengo todo en inglés.
Un saludo y gracias.
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
Imágen de perfil de JOSE JEREMIAS CABALLERO

aumentar velocidad proceso

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3439 intervenciones) el 23/04/2011 01:08:30
Hola Juan.
La ayuda de matlab que tengo yo, tambien esta en ingles. Lo que pasa que yo lo he traducito a español porque el foro estan en español.

Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
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

aumentar memoria en Matlab

Publicado por Mar (4 intervenciones) el 16/09/2011 15:25:22
Como veo que entendéis del tema, os consulto. Tengo un PC con 8GB de RAM, pero trabajando con Matlab, llego a una parte de mi programa en la que aparece el siguiente mensaje:

??? Out of memory. Type HELP MEMORY for your options.

Cuando consulto la memoria, en Memory used by MATLAB, el valor es inferior a los 700 MB.
Cómo debo o puedo hacer para que el Matlab use toda la memoria de la que dispone el PC, o sea los 8GB?

Espero que podáis sugerirme alguna solución.
Desde ya muchas gracias!

Mar
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
Imágen de perfil de JOSE JEREMIAS CABALLERO

aumentar memoria en Matlab

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3439 intervenciones) el 16/09/2011 18:27:21
hola Marc.
Instala la version de windows 7 64 bits o windows xp 64 bits y no tendras el problema con matlab.
y no te saldrá ese mensaje.
Estoy Suponiendo que tienes un procesador que soporta que version tipo de windows.

Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
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

aumentar memoria en Matlab

Publicado por Mar (4 intervenciones) el 17/09/2011 10:55:39
Estoy trabajando con un server que tiene Win Server Foundation (y trabaja a 64 bits) y un procesador Xeon. Pero creo que no consigo utilizar más de 2GB.
Tengo que operar con unas matrices de 90000filas X 300col, multiplicándolas (a veces elemento a elemento) e invirtiéndolas y es cuando lo intento que me da el error "OUT of Memory".
He estado mirando que se puede modificar en boot.ini (archivos de sistema) para que en vez de 2GB asigne 3GB de memoria virtual, pero no termino de tener claro cómo hacerlo.
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
Imágen de perfil de JOSE JEREMIAS CABALLERO

aumentar memoria en Matlab

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3439 intervenciones) el 17/09/2011 17:15:41
hola Marc.
Cual es tu sistema operativo:
1). windows xp 32 bits
2) windows xp 64 bits
3) windows 7 de bits
4)windows 7 64 bits


Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
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

aumentar memoria en Matlab

Publicado por Mar (4 intervenciones) el 19/09/2011 09:49:57
En el server tengo Windows 2008 Server r2 64 bits (8GB RAM), en el portátil Win Vista 32 bits (3GB RAM).
El mismo error aparece en ambos, en el mismo punto.
Pasé a utilizar el server pensando que allí no sucedería, pero aún a 64bits y con más RAM, continúa dándome "Out of Memory". Sé que la matriz es muy grande, pero se supone que Matlab debería soportar operar con estos tamaños sin dificultad.
No sé si me puedes ayudar, supongo que deberé que cambiar algo en la configuración pero no sé qué...
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
Imágen de perfil de JOSE JEREMIAS CABALLERO

aumentar memoria en Matlab

Publicado por JOSE JEREMIAS CABALLERO jjcc94@hotmail.com (3439 intervenciones) el 19/09/2011 17:12:09
hola Mar.
Haz una pregunta propia. Vas a la opcion de agregar notas que esta casi al inicio de este pagina, es de color azul.

Ahorita estas preguntando, en una pregunta abierta por el usuario Juan.
Si deseas mandame tus datos a mi correo, para probarlo en mi pc. Y me explicas en detalle donde falla, ademas me explicas como se ejecuta tu programa, paga ganar tiempo, sino voy a ensayando, ademas me dices cuales son los con los cuales estas trabajando.

A mi tambien una vez me salido ese mensaje, cuando estuve trabajando con reproducir un archivo de sonido que era muy grande en matlab y me cuando estaba utilizando windows xp 32 bits.

Pero cuando lo probe en windows 7 64 bits, no hubo ese problema.


Saludos.
JOSE JEREMIAS CABALLERO
ASESOR DE PROYECTOS CON MATLAB
PROFESOR DE METODOS NUMERICOS CON MATLAB
PROGRAMADOR EN MATLAB
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

aumentar memoria en Matlab

Publicado por Mar (4 intervenciones) el 20/09/2011 11:20:16
Perdón! No fui consciente de que debía hacer la pregunta por separado.
Te escribiré a tu correo enviándote los datos para que puedas comprobar cuál es el problema.
Gracias por tu ayuda!
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

aumentar memoria en Matlab

Publicado por Armando Mejia (1 intervención) el 03/07/2015 16:40:52
Hola buenos días Jose quiero saber como solucionar lo de OUT Memory estoy ejecutando una aplicación de MatLab compiladad a 32 bits en Windows 7 64 Bits, utilizo vectores globales preasignados en memoria y la aplicacion comienza utilizando 300 megas pero continua la ejecución y va subiendo el uso de la memoria, no me explico porque si utilizo vectores globales. Tambien tiene funciones a las cuales envío como parámetros esos vectores globales, pero el hace una copia del vector calcula y sale y graba resultados en otro vector global preasignado. Lo raro es que sube el uso de memoria hasta 3000 megas no se porque ese incremento tan alto.
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