ВУЗ:
Составители:
Рубрика:
- 49 -
Часть 2 работы. Для вычисления значения
π
можно использовать метод
‘стрельбы’ (рис.4.1) – вариант метод Монте-Карло. В применении к данному
случаю метод заключается в генерации равномерно распределенных на дву-
мерной области [0
≤
x
≤
1, 0
≤
y
≤
1] точек и определении
darts
score
44
S
S
OAB
C
OAC
××
≈=π
,
где S – площади фигур на рис.4.1,
score
–
число попавших внутрь четверти окружно-
сти (фигура
0AC
) точек (условие x
2
+y
2
≤
1.0,
на рис.4.1 удовлетворяющие этому условию
точки обозначены квадратами),
darts
– об-
щее число точек (‘выстрелов’,
throws
). Вы-
численное таким образом значение
π
явля-
ется приближенным, в общем случае точ-
ность вычисления искомого значения по-
вышается с увеличением числа ‘выстрелов’
и качества датчика случайных чисел; по-
добные методы используются в случае
трудностей точной числовой оценки (на-
пример, для вычисления определенных ин-
тегралов большой кратности).
Именно функция
dboard
(‘мишень’) генерирует
DARTS
пар равномерно
распределенных на отрезке [0
÷
1] случайных чисел, проверяет принадлеж-
ность нахождения точки (определяемой координатами последней двойки
случайных чисел) внутренней области четверти окружности и вычисляет те-
кущее значение
π
; расчеты проводятся при начальном значении
DARTS
c
последующим увеличением
ROUNDS
раз (заданы посредством
#define
).
Последовательный вариант программ вычисления
π
методом ‘стрельбы’
приведен ниже (файл
PI_SER.C,
функция
DBOARD
расположена в файле
dboard.c
и подключается посредством
#include ‘dboard.c’
):
// source code PI_SER.C program
#include <stdio.h>
#include <math.h>
#include <sys/timeb.h> // for ftime
double f_time(void); /* define real time by ftime function */
void srandom (unsigned seed);
long random(void);
double dboard (int darts);
#include “dboard.c” // including dboard.c file
#include “f_time.c” // including f_time.c file
#define DARTS 10000 /* number of throws at dartboard */
#define ROUNDS 100 /* number of times “darts” is iterated */
int main(int argc, char *argv[])
Рисунок 4.1 — Определение вели-
чины
π
методом ‘стрельбы’
- 49 - Часть 2 работы. Для вычисления значения π можно использовать метод ‘стрельбы’ (рис.4.1) – вариант метод Монте-Карло. В применении к данному случаю метод заключается в генерации равномерно распределенных на дву- мерной области [0 ≤ x ≤ 1, 0 ≤ y ≤ 1] точек и определении π = 4 × S OAC ≈ 4 × score , S OABC darts где S – площади фигур на рис.4.1, score – число попавших внутрь четверти окружно- 2 2 сти (фигура 0AC) точек (условие x +y ≤ 1.0, на рис.4.1 удовлетворяющие этому условию точки обозначены квадратами), darts – об- щее число точек (‘выстрелов’, throws). Вы- численное таким образом значение π явля- ется приближенным, в общем случае точ- ность вычисления искомого значения по- вышается с увеличением числа ‘выстрелов’ и качества датчика случайных чисел; по- добные методы используются в случае трудностей точной числовой оценки (на- Рисунок 4.1 — Определение вели- чины π методом ‘стрельбы’ пример, для вычисления определенных ин- тегралов большой кратности). Именно функция dboard (‘мишень’) генерирует DARTS пар равномерно распределенных на отрезке [0 ÷ 1] случайных чисел, проверяет принадлеж- ность нахождения точки (определяемой координатами последней двойки случайных чисел) внутренней области четверти окружности и вычисляет те- кущее значение π ; расчеты проводятся при начальном значении DARTS c последующим увеличением ROUNDS раз (заданы посредством #define). Последовательный вариант программ вычисления π методом ‘стрельбы’ приведен ниже (файл PI_SER.C, функция DBOARD расположена в файле dboard.c и подключается посредством #include ‘dboard.c’): // source code PI_SER.C program #include#include #include // for ftime double f_time(void); /* define real time by ftime function */ void srandom (unsigned seed); long random(void); double dboard (int darts); #include “dboard.c” // including dboard.c file #include “f_time.c” // including f_time.c file #define DARTS 10000 /* number of throws at dartboard */ #define ROUNDS 100 /* number of times “darts” is iterated */ int main(int argc, char *argv[])
Страницы
- « первая
- ‹ предыдущая
- …
- 47
- 48
- 49
- 50
- 51
- …
- следующая ›
- последняя »