Вычисление значения с заданной точностью методом прямоугольников
Использованием циклов для решения задач численными методами. Цель работы: Научиться применять циклические алгоритмы для решения задач, использующих численные методы. Теоретические сведения Вычисление значения с заданной точностью методом прямоугольников Для вычисления первого приближения интеграла разделим отрезок [a,b], отвечающий пределам интегрирования (рис.4.1), на n равных частей (n = 4), определим значения xi = a+h*i-h/2; h = (b-a)/n. Вычислим площадь одного прямоугольника si=h*f(xi). Сумма si Однако одно приближение не позволяет оценить точность, с которой вычислено значение интеграла, необходимо найти следующее приближение. Для этого увеличим n в два раза, т.е. n = 2n. Аналогично найдем Рис.4.1 Вычисление интеграла методом прямоугольников Требуется вычислить значение интеграла с точностью e, поэтому проверим условие |S1 - S2|<e. Если условие выполняется, то S2 принимается за искомое значение интеграла; если не выполняется, то последнее выполненное значение S2 считается предыдущим, т.е. S1 = S2. После этого удвоим число точек деления отрезка и вычислим новое значение S2. Процесс удвоения n и вычисления S2 будем продолжать до тех пор, пока модуль разности S1 и S2 не станет меньше e. Пример 4.1. Вычисление интеграла #include <iostream> #include <conio.h> #include <math.h> using namespace std;
#define Pi 3.14159
int main() {unsigned long i, n = 4; float a,b,x,h,S1,S2,eps,exact; a = 0; b = 3/(2*Pi); eps = 0.001; S1 = 0; h = (b – a)/n; //Вычисляем сумму в первом приближении for (i = 1; i<=n; i++) { x = a + i*h – h/2; S1 = S1+ (1/(5–3*cos(x)))*h; } //Вычисляем текущее приближение и сравниваем его с предыдущим do {n = 2*n; h = (b – a)/n; S2 = 0; for (i = 1; i<=n; i++) {x = a + i*h – h/2; S2 = S2 + (1/(5–3*cos(x)))*h; } exact = fabs(S1 – S2); S1 = S2; } while(exact>eps); cout << "S = " << S2; return 0; }
|