ВУЗ:
Составители:
Рубрика:
- 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
- …
- следующая ›
- последняя »
