ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 10.03.2021

Просмотров: 247

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

Pi.wxm

1 / 3

Вычисление

числа

 Pi 

методом

Монте

-

Карло

(%i1) 

/*  Вычисление числа Pi 
методом Монте-Карло  */

kill(all);

ntmax:10000;
m:0$
for n:1 thru ntmax step 1 do
(
  x:random(1.0), y:random(1.0),
  if x*x+y*y <= 1.0 then m:m+1,
  res:float(4*m/n),
  if ((n=10) or (n=100) or (n=1000) or 
   (n=10000) or (n=ntmax)) then 
   print ("n=",n, "   m=",m, "    res=",res)
);
print ("Exact value of Pi=",float(%pi))$

(%o0) 

done

(%o1) 

10000

n=

10

   m=

9

    res=

3.6

n=

100

   m=

83

    res=

3.32

n=

1000

   m=

800

    res=

3.2

n=

10000

   m=

7864

    res=

3.1456

(%o3) 

done

Exact value of Pi=

3.141592653589793


background image

Pi.wxm

2 / 3

(%i5) 

kill(all);

funpi(ntmax):=block([n,m,x,y,res],
m:0,
for n:1 thru ntmax step 1 do
(
  x:random(1.0), y:random(1.0),
  if x*x+y*y <= 1.0 then m:m+1,
  res:float(4*m/n),
  if ((n=10) or (n=100) or (n=1000) or 
   (n=10000) or (n=ntmax)) then 
   print ("n=",n, "   m=",m, "    res=",res)
)
                             )$
/* Returns the number of seconds since midnight, 
January 1, 1900 UTC. The return value is an integer */
t0:absolute_real_time ()$  
funpi(100000);
t1:absolute_real_time ()-t0$
print ("t1=",t1)$

(%o0) 

done

n=

10

   m=

8

    res=

3.2

n=

100

   m=

74

    res=

2.96

n=

1000

   m=

772

    res=

3.088

n=

10000

   m=

7797

    res=

3.1188

n=

100000

   m=

78437

    res=

3.13748

(%o3) 

done

t1=

7

(%i6) 

translate(funpi);
/* Returns the number of seconds since midnight, 
January 1, 1900 UTC. The return value is an integer */
t0:absolute_real_time ()$  
funpi(100000);
t2:absolute_real_time ()-t0$
print ("t2=",t2)$

(%o6) 

[

funpi

]

n=

10

   m=

7

    res=

2.8

n=

100

   m=

81

    res=

3.24

n=

1000

   m=

786

    res=

3.144

n=

10000

   m=

7882

    res=

3.1528

n=

100000

   m=

78302

    res=

3.13208

(%o8) 

done

t2=

4


background image

Pi.wxm

3 / 3

(%i11) 

compile(funpi);
/* Returns the number of seconds since midnight, 
January 1, 1900 UTC. The return value is an integer */
t0:absolute_real_time ()$  
funpi(100000);
t3:absolute_real_time ()-t0$
print ("t3=",t3)$

Compiling C:/Users/Green/AppData/Local/Temp/gazonk_3936_0.lsp.
End of Pass 1.  
End of Pass 2.  

OPTIMIZE levels: Safety=2, Space=3, Speed=3
Finished compiling C:/Users/Green/AppData/Local/Temp/gazonk_3936_0.lsp.

(%o11) 

[

funpi

]

n=

10

   m=

9

    res=

3.6

n=

100

   m=

81

    res=

3.24

n=

1000

   m=

766

    res=

3.064

n=

10000

   m=

7838

    res=

3.1352

n=

100000

   m=

78829

    res=

3.15316

(%o13) 

done

t3=

4

(%i16) 

kill(all);

(%o0) 

done