Вопрос 5. Разработать многопоточное приложение для вычисления интеграла от заданной функции в заданных пределах.
Добавил: | DMT |
Дата создания: | 30 декабря 2007, 18:22 |
Дата обновления: | 30 декабря 2007, 18:22 |
Просмотров: | 5704 последний вчера, 19:31 |
Комментариев: | 3 |
Вопрос 5. Разработать многопоточное приложение для вычисления интеграла от заданной функции в заданных пределах. |
Комментарии для "Вопрос 5. Разработать многопоточное приложение для вычисления интеграла от заданной функции в заданных пределах. "
Пользователь: ruslan Сообщений: 23 Статус: Незримый Зарегистрирован: 5 января 2008, 2:42 Был:29 января 2008, 21:23 | Дата: 14 января 2008, 0:38 Сообщение № 1 |
Вариант 1 (из РГЗ по ПП). Вычислить при 0<=a<=1. Решение. Число из диапазона 0<=a<=1 будем вводить с помощью генератора целых чисел, полагая a = random(1000)/1000. Разработаем подпрограмму (функцию) потока. Она будет вычислять . Это вычисление производится со случайной задержкой с помощью вызова функции sleep(random(3)). Подпрограмма имеет один параметр k, который будет передаваться в нее через LPVOID ps. Затем подпрограмма захватывает с помощью семафора внешнюю переменную s, в которой накапливается приближенное значение интеграла, прибавляет к s вычисленное значение и освобождает переменную s. Главная программа ожидает выполнения всех n потоков с помощью оператора while (j < n). Для проверки вычисленного значения приведём функцию, вычисляющую это значение с помощью одного цикла.
|
Пользователь: ruslan Сообщений: 23 Статус: Незримый Зарегистрирован: 5 января 2008, 2:42 Был:29 января 2008, 21:23 | Дата: 14 января 2008, 0:51 Сообщение № 2 |
Вариант 2 (мой вариант... вспоминаем выч.мат. ). Вычислить интеграл по формуле Симпсона при n = 8, где n - это число интервалов. Формулу Симпсона (составную квадратичную формулу Симпсона) можно применять при четных n. В нашем случае n четно. a = 1.2, b = 2.7, h = (b – a) / n, n = 8, m = n / 2 = 4, xi = x0 + i * h, 0<=i<=n, x0 = a. Q1 – приближенное значение интеграла при n = 8.
|
Пользователь: lilo Сообщений: 38 Статус: Незримый Зарегистрирован: 8 января 2008, 12:39 Был:9 апреля 2008, 19:55 | Дата: 31 января 2008, 10:38 Сообщение № 3 |
в первом примере ошибка со скобками в 21 строке, должно быть double w = (double)(1./(1.+(a*(*k)) /n* (a*(*k))) /n); |