
Evitar el ciclo for por la cantidad de datos
Publicado por Alberto (5 intervenciones) el 26/09/2014 07:02:30
Hola que tal, estoy tratando de hacer unas simulaciones de lo que es problema de Monte Carlo para hacer una estimacion del valor pi e hice el siguiente programa
Funciona bien pero el detalle es que al evaluarlo con N=1000000 el programa tarda demasiado casi media hora para mostrarme la grafica, segun me comentaron hay forma para trabajar esto de manera que solo toma unos dos minutos los calculos, me mencionaron algo de vectorizacion del problema, pero no entiendo la manera de hacerlo.
Espero alguien pudiera darme alguna sugerencia para manejar tales cantidades de datos
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
42
43
44
45
46
clear all
clc
N=100000;
p=0.5;
q=0.5;
x=rand(N,1);
y=rand(N,1);
lg=length(y);
cont=0;
dist=[];
%Dibujamos un circulo centrado en 0.5 y 0.5
R = 0.5;
tita = (0:0.01:2.01*pi);
a = R*cos(tita)+0.5;
b = R*sin(tita)+0.5;
hold on
plot(a,b,'LineWidth',2)
title(['Puntos dentro de un cuadrado y un circulo de radio 0.5']);
axis equal
axis([0 1 0 1])
set(gca,'XTick',[0:0.2:1])
set(gca,'XTickLabel',{'0','0.2','0.4','0.8','1.0'})
xlabel('Coordenada en X')
set(gca,'YTick',[0:0.2:1])
set(gca,'YTickLabel',{'0','0.2','0.4','0.8','1.0'})
set(gca,'Fontsize',10)
ylabel('Coordenada en Y')
for i=1:lg
dt=sqrt((x(i)-p)^2+(y(i)-q)^2); %Calcula la distancia euclidiana de los puntos con respecto al centro
if (dt<=0.5)
cont=cont+1;
plot(x(i),y(i),'.r')% Dibuja los puntos que caen dentro del circulo
else
plot(x(i),y(i),'.b')% Dibuja los puntos que caen fuera del circulo
end
dist=[dist dt];
end
lgd=length(dist);
Pcir=cont/lgd;
Pi=4*Pcir
Funciona bien pero el detalle es que al evaluarlo con N=1000000 el programa tarda demasiado casi media hora para mostrarme la grafica, segun me comentaron hay forma para trabajar esto de manera que solo toma unos dos minutos los calculos, me mencionaron algo de vectorizacion del problema, pero no entiendo la manera de hacerlo.
Espero alguien pudiera darme alguna sugerencia para manejar tales cantidades de datos
Valora esta pregunta


0