лаба4
.docxМИНИСТЕРСТВО ЦИФРОВОГО РАЗВИТИЯ, СВЯЗИ И МАССОВЫХ КОММУНИКАЦИЙ РОССИЙСКОЙ ФЕДЕРАЦИИ
Ордена Трудового Красного Знамени федеральное государственное бюджетное образовательное учреждение высшего образования
«Московский технический университет связи и информатики»
Кафедра «Информатика»
Лабораторная работа №4
«Численное интегрирование»
Выполнил: ---------------------------------------------
Проверил:
Москва, 2023 г.
Пример индивидуального задания
№ |
Подынтегральная функция |
a |
b |
t |
m |
|
8 |
f(x) = x sin(x+1) – cos(x-5) |
1 |
2 |
1 |
2 |
0.25 |
Задания для численного интегрирования:
x*sin(x+1) – cos(x-5) - подынтегральная функция;
a=1, b=2 – пределы интегрирования;
методы интегрирования – средних прямоугольников, трапеций;
начальный шаг интегрирования
Вычисление интегралов с шагом и /2 ( и /2) и оценка его погрешности по правилу Рунге
Правило Рунге применяют для вычисления погрешности путём двойного просчёта интеграла с шагом h/2 и h, при этом погрешность вычисляется по формуле .
Полагаю, что интеграл вычислен с точностью E, если ; тогда I= , где I – уточнённое значение интеграла, p – порядок метода.
Вычислим интеграл по формуле
трапеций и оценим погрешность интегрирования методом двойного просчёта:
Шаг =0.25:
n = = = 4
=
Шаг = 0.125:
n = = = 8
=
Теперь мы можем посчитать оценку погрешности метода трапеций:
= = 0.319 – оценка погрешности метода трапеций.
I = ; I = 1.924 + 0.319 = 2.243
Метод средних прямоугольников методом на языке C++ #include <iostream>
#include <math.h>
#include <cmath>
#include <iomanip>
using namespace std;
double f(double x) {
return x * sin(x + 1) - cos(x - 5);
}
double RectangleIntegral(double a, double b, double h) {
double x, fx;
double sum = 0;
double n = (b - a) / h;
for (int i = 0; i < n; i++) {
x = a + i * h;
fx = f(x + h / 2);
sum += fx;
}
return sum * h;
}
int main() {
setlocale(LC_ALL, "Russian");
cout.setf(ios::left | ios::fixed);
double a = 1, b = 2, eps = 0.319, h = 0.25;
double IPrev, I, R, IRefined;
IPrev = RectangleIntegral(a, b, h);
do {
h = h / 2;
I = RectangleIntegral(a, b, h);
R = (I - IPrev) / 3;
IRefined = I + R;
cout << "I(h=" << h * 2 << ")" << " I(h = " << h << ")" << " R" << " I" << endl;
cout << setw(15) << IPrev << setw(15) << I << setw(15) << R << IRefined << endl;
IPrev = I;
} while (abs(R) >= eps);
system("PAUSE");
}
Результат работы программы
Расчёт в среде Scilab