Matlab - Reducir tiempo ejecucion matrices 3D

 
Vista:
sin imagen de perfil

Reducir tiempo ejecucion matrices 3D

Publicado por David (42 intervenciones) el 21/12/2014 22:56:38
Me gustaría conocer la mejor alternativa a utilizar y operar con matrices 3D inicializándolas y operando con bucles for, ya que conforme el programa se va haciendo más complejo y se aumenta el tamaño de la matriz 3D utilizando estas técnicas los tiempo de ejecución se van a días. Un posible código a sustituir sería:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
tic;
for l=1:80
        for j=1:80
            for i=1:80
 
                %A cada una de las posiciones de la matriz le asignamos un
                %valor de 300 K, correspondiente a la temperatura ambiente.
                U(i,j,l)=300;
 
            end
        end
end
 
for l=1:80
        for j=1:80
            for i=1:80
 
                V(i,j,l)=400;
 
            end
        end
end
 
for l=1:80
        for j=1:80
            for i=1:80
                W(i,j,l)=U(i,j,l)+V(i,j,l);
 
            end
        end
end
 
toc;

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
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Reducir tiempo ejecucion matrices 3D

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 23/12/2014 20:05:39
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
>> clear all
tic;
for l=1:80
        for j=1:80
            for i=1:80
 
                %A cada una de las posiciones de la matriz le asignamos un
                %valor de 300 K, correspondiente a la temperatura ambiente.
                U(i,j,l)=300;
 
            end
        end
end
 
for l=1:80
        for j=1:80
            for i=1:80
 
                V(i,j,l)=400;
 
            end
        end
end
 
for l=1:80
        for j=1:80
            for i=1:80
                W(i,j,l)=U(i,j,l)+V(i,j,l);
 
            end
        end
end
 
toc
tic
 N(1:80,1:180,1:80)=300;
 V(1:80,1:180,1:80)=400;
 W=N+V;
 toc
Elapsed time is 0.220196 seconds.  %tiempo con bluce for
Elapsed time is 0.051542 seconds.     % tiempo en forma vectorizada       



Saludos.
JOSE JEREMÍAS CABALLERO
Asesoría online
programador en matlab
Servicios de programación matlab
[email protected]
Estimado Usuario de Matlab, el correo es para servicios de cursos, asesoría y programación. Toda ayuda gratuita es vía foro.


http://matlabcaballero.blogspot.com

http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Reducir tiempo ejecucion matrices 3D

Publicado por David (42 intervenciones) el 23/12/2014 20:13:26
Muchas gracias.

Empezaremos a optimizar un poco el código por aquí.
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
sin imagen de perfil

Reducir tiempo ejecucion matrices 3D

Publicado por García (42 intervenciones) el 24/12/2014 09:18:39
Y cuando los valores no sean una constante, por ejemplo:

1
2
3
4
5
6
7
8
9
t=1;
for l=1:3
        for j=1:3
            for i=1:3
                U(i,j,l)=t;
                t=t+1;
            end
        end
end

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