чм 3
.docxФедеральное агентство связи
Ордена Трудового Красного Знамени федеральное государственное бюджетное
образовательное учреждение высшего образования
“Московский технический университет связи и информатики”
Кафедра информатики
ЛАБОРАТОРНАЯ РАБОТА №3
«Численное интегрирование»
Выполнил: Ядринцев С.М.
Проверил: Сосновиков Г.К.
Москва 2022
Общее задание к работе
1. Создать функцию для вычисления интеграла по 1-му заданному методу, определяя значения (столбец m), с шагом h0 и h0/2
2. Провести оценку погрешностей полученных результатов по правилу Рунге.
3. Написать и выполнить программу вычисления интеграла по 2-му
заданному методу с точностью 10-4.
4. Вычислить заданный интеграл с использованием функции intg пакета
Scilab.
Индивидуальный вариант задания
Рисунок 1 – Индивидуальный вариант №23
Интегрирование методом средних прямоугольников – на компьютере
Интегрирование методом Симпсона – ручной расчет
1. Задания для численного интегрирования:
- подынтегральная функция;
a = 2, b = 3 –пределы интегрирования;
метод интегрирования – Интегрирование методом средних прямоугольников
начальный шаг интегрирования =0.25.
2. Вычисление интегралов с шагом и /2 ( и ) и оценка его погрешности по правилу Рунге.
Правило Рунге применяют для вычисления погрешности путём двойного
просчёта интеграла с шагами h/2 и h, при этом погрешность вычисляется по формуле
Считается, что интеграл вычислен с точностью Е, если |R| E; тогда
I R , где I – уточненное значение интеграла, p – порядок метода.
Вычислим интеграл по формуле средних прямоугольников и оценим погрешность интегрирования методом двойного просчёта:
1.726925
=1.699363375
R= = =-0.0095; |R|<E;
I= + R = 0.578622 - 0.00095 = 1.6901
Вычислим интеграл по формуле Симпсона и оценим погрешность интегрирования методом двойного просчета:
y(0)+y(4)+4( y(1)+y(3) )+2( y(2) )) = 1.6900
y(0)+y(8)+4( y(1)+y(3) + y(5) +y(7) )+2( y(2) + y(4) +y(6) )) = 1.6902
R= = =6*10^-5
I= + R =1.6902
3.Программа вычисления интеграла по методу средних прямоугольников с точностью . #include <iostream>
#include <math.h>
using namespace std;
double f (double x)
{
return 1+sin(4*x)/log(x);
}
double rectangle (int n, double a, double b)
{
double h = (b-a)/n;
double res = 0;
for (int i=0; i < n-1; i++)
{
double x = a+(h/2)+i*h;
res = res + f(x);
}
res = res*h;
return res;
}
int main()
{
setlocale(LC_ALL,"rus");
double a,b,n,s, Ih, Ih2, eps = 1E-3, d = 1;
cout«" Введите левую и правую границу интеграла a b"«endl;
cin»a»b;
cout«"Введите количество отрезков n"«endl;
cin»n;
do {
Ih = rectangle(n,a,b);
n = n*2;
Ih2 = rectangle(n,a,b);
d = abs(Ih-Ih2)/3;
} while (d > eps);
s = Ih2 + d;
cout«"Значение интеграла - "«s«endl;
cout«"Погрешность вычисления - "«d«endl;
return 0;
}
Рис. 2 – Результат работы программы
Вывод:Значение интеграла соответствует значению интеграла при вычислении с помощью средств Scilab с точностью .
4. Результаты решения, полученные с помощью функции пакета Scilab.