Написание данной программы (как, впрочем, и любой в среде С++) начинается с ввода заголовочных файлов необходимых в ходе выполнения программы библиотек:
#include<iostream.h> (ввод-вывод)
#include<math.h> (функции)
#include<stdlib.h> (стандартная библиотека)
#include<conio.h> (консольный ввод-вывод)
#include<stdio.h> (ввод-вывод)
Объявляем точку вхождения в программу - в соответствии со стандартом это функция без аргументов, возвращающая целочисленное значение:
int main()
{
В ходе выполнения программе потребуется работать с точными вещественными числами, поэтому для ввода исходных данных будем использовать тип данных float. Объявим необходимые переменные:
float i, a, b, E, n, d, tmp, ftmp, result, result2;
Присвоим некоторым из них начальные значения: присвоим n значение «1000» для достижения высокой точности и обнулим переменные result и result2:
n = 1000;
result = result2 = 0;
Выведем на экран сообщение о том, что необходимо ввести некоторые данные, являющимися входными, и выведем символ новой строки, т.е перепишем содержимое буфера на соответствующее устройство:
cout «"Vvedite a, b, E" «endl;
Позволим пользователю ввести эти данные:
cin» a» b» E;
Затем необходимо открыть внешний цикл do…while с проверкой после выполнения операции – пока не достигнута нужна точность, разбиваем промежуток на большее число отрезков и считаем для них интеграл
do
{
Присвоим промежуточному значению интеграла конечное значение, затем обнулим конечный результат интегрирования, чтобы можно было сравнивать каждое новое значение интеграла с предыдущим:
result2 = result;
result = 0;
Вычислим d:
d = (b - a) / n;
Вычислим значение функции в точке a, чтобы облегчить последующие вычисления:
ftmp = 1.0 / sqrt(2*M_PI) * exp(-a * a/ 2.0);
Откроем внутренний цикл for для вычисления интеграла:
for(i = a + d; i < b + d; i=i+d)
{
Последовательно вычислим значения функции для каждой точки и просуммируем результат:
tmp = 1.0 / sqrt(2*M_PI) * exp(-i * i / 2.0);
result= result + (tmp + ftmp) * d / 2.0;
ftmp = tmp;
}
n++;
Закроем внешний цикл, обозначив условия: продолжать вычисления, пока не достигнем необходимой точности:
} while((result > result2? result - result2: result2 - result) > E);
Мы сделали все необходимые вычисления и готовы вывести на экран ответ и закончить программу:
cout «"Integral raven " «result «endl;
getch ();
return 0;
}
Конечный вид программы (листинг)
#include <iostream.h>
#include <math.h>
#include <stdlib.h>
#include<conio.h>
#include<stdio.h>
int main()
{
float i, a, b, E, n, d, tmp, ftmp, result,result2;
n = 1000;
result = result2 = 0;
cout «"Vvedite a, b, E" «endl;
cin» a» b» E;
do
{
result2 = result;
result = 0;
d = (b - a) / n;
ftmp = 1.0 / sqrt(2*M_PI) * exp(-a * a/ 2.0);
for(i = a + d; i < b + d; i=i+d)
{
tmp = 1.0 / sqrt(2*M_PI) * exp(-i * i / 2.0);
result= result + (tmp + ftmp) * d / 2.0;
ftmp = tmp;
}
n++;
} while((result > result2? result - result2: result2 - result) > E);
cout «"Integral raven " «result «endl;
getch();
return 0;
}
Результаты тестовых расчетов
Номер расчета | Значение a | Значение b | Значение E | Результат программы | Результат математических вычислений |
0.001 | 0.135958 | 0.135905 | |||
0.0001 | 0.5 | 0.5 | |||
-5 | -2 | 0.01 | 0.0229084 | 0.0227498 | |
-2 | 0.01 | 0.975918 | 0.9759 | ||
-1 | 0.1 | 0.682689 | 0.682689 |
Сравнивая эти данные можно сделать вывод, что программа достаточно точно (погрешность в общем случае не превышает 0,001) вычисляет значение определенного интеграла.
Заключение
Результатом выполнения данной курсовой работы является программа, позволяющая высчитать значение интеграла с необходимыми пределами. Программа работает корректно, производя необходимые вычисления и сообщая пользователю ответ.