cm5
.pdfМинистерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждение высшего образования
ТОМСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ СИСТЕМ УПРАВЛЕНИЯ И РАДИОЭЛЕКТРОНИКИ (ТУСУР)
Кафедра безопасности информационных систем (КИБЭВС)
ЧИСЛЕННОЕ ИНТЕГРИРОВАНИЕ
Отчет по лабораторной работе №5 по дисциплине ¾Численные методы¿
Студент гр. 730-2 Подойницын К.В. 11.11.2021
Доцент каф.КИБЭВС Якимук А.Ю. 11.11.2021
Томск 2021
2
1 Введение
6
R
Вариант работы: sin(0; 94x) ln(0; 02x) dx
4
Задание: Необходимо рассчитать значение данного интеграла следующими методами:
1)методом левых прямоугольников;
2)методом правых прямоугольников; 3)методом трапеций; 4)методом Симпсона.
3
2 Ход работы
2.1 Решение интеграла
Для дальнейшей проверки правильности расчетов посчитаем
интеграл:
6
R
sin(0; 94x) ln(0; 02x) dx = 3,96468
4
2.2 Метод левого треугольника
xi = xi 1 + h
h = b na
где h шаг сетки.
Формула метода левых прямоугольников:
b |
n 1 |
|
Ra |
P |
f(x) dx h |
f(x) |
|
i=0 |
2.3 Метод правого треугольника
Формула метода правых прямоугольников:
b |
n |
Ra |
P |
|
f(x) dx h f(xi) |
|
i=1 |
2.4 Метод трапеций
Формула метода трапеций:
b |
n 1 |
f(x) dx h2 (f(a) + f(b)) + h |
f(xi) |
Ra |
P |
|
i=1 |
4
2.5 Метод Симпсона
Формула метода Симпсона:
b |
(n 1)=2 |
(n 2)=2 |
f(x) dx h3 (f(x0) + 4 |
f(x2i+1) + 2 |
f(x2i) + f(xn)) |
Ra |
P |
P |
|
i=0 |
i=0 |
2.6 Результаты работы программы
На рисунке 1 представлен результат работы программы.
Рисунок 1 - Скриншот работы программы
5
Таблица 3.1 - Результаты работы
Метод |
n=4 |
n=20 |
n=100 |
n=400 |
|
|
|
|
|
Левых прямоугольников |
3,94 |
4,0986 |
3,9919 |
3,9715 |
|
|
|
|
|
Правых прямоугольникова |
3,8437 |
3,9521 |
3,9626 |
3,9642 |
|
|
|
|
|
Трапеций |
3,8918 |
4,0889 |
3,99 |
3,971 |
|
|
|
|
|
Симпсона |
4,4538 |
4,0623 |
3,9842 |
3,9696 |
|
|
|
|
|
6
3Заключение
Врезультате выполнения данной лабораторной работы были полученны навыки разработки программ, использующих в своей работе методы левых, правых прямоугольников, а также метод трапеций и метод Симпсона.
7
Приложение A
(обязательное)
using System;
namespace laba5_cm
{
class Program
{
private const double a = 4; private const double b = 6; private const int n1 = 4; private const int n2 = 20; private const int n3 = 100; private const int n4 = 400;
private const double h1 = (b - a) / n1; private const double h2 = (b - a) / n2; private const double h3 = (b - a) / n3; private const double h4 = (b - a) / n4; static void Main(string[] args)
{
LTree();
RTree();
Trapeze();
Simpson();
}
static double Fn(double x)
{
return ((Math.Sin(0.94 * x) * Math.Log((0.02 * x) , Math.Exp(1))));
}
static void LTree()
8
{
Console.WriteLine("Метод левого прямоугольника"); double S = 0;
for (double x = a; x < b; x += h1) { S += Fn(x); }
S *= h1;
Console.WriteLine($"n = 4 ответ { Math.Round(S, 4)}"); S = 0;
for (double x = a; x < b; x += h2) S += Fn(x);
S *= h2;
Console.WriteLine($"n = 20 ответ { Math.Round(S, 4)}"); S = 0;
for (double x = a; x < b; x += h3) S += Fn(x);
S *= h3;
Console.WriteLine($"n = 100 ответ { Math.Round(S, 4)}"); S = 0;
for (double x = a; x < b; x += h4) S += Fn(x);
S *= h4;
Console.WriteLine($"n = 400 ответ { Math.Round(S, 4)}");
}
static void RTree()
{
Console.WriteLine();
Console.WriteLine("Метод правого прямоугольника"); double S = 0;
for (double x = a + h1; x <= b; x += h1) S += Fn(x);
S *= h1;
Console.WriteLine($"n = 4 ответ { Math.Round(S, 4)}");
9
S = 0;
for (double x = a + h2; x <= b; x += h2) S += Fn(x);
S *= h2;
Console.WriteLine($"n = 20 ответ { Math.Round(S, 4)}"); S = 0;
for (double x = a + h3; x <= b; x += h3) S += Fn(x);
S *= h3;
Console.WriteLine($"n = 100 ответ { Math.Round(S, 4)}"); S = 0;
for (double x = a + h4; x <= b; x += h4) S += Fn(x);
S *= h4;
Console.WriteLine($"n = 400 ответ { Math.Round(S, 4)}");
}
static void Trapeze()
{
Console.WriteLine(); Console.WriteLine("Метод трапеций"); double SF = 0;
double C;
for (double x = a + h1; x < b; x += h1) SF += Fn(x);
C = h1 / 2 * (Fn(a) + Fn(b)) + h1 * SF; Console.WriteLine($"n = 4 ответ { Math.Round(C, 4)}"); SF = 0;
for (double x = a + h2; x < b; x += h2) SF += Fn(x);
C = h2 / 2 * (Fn(a) + Fn(b)) + h2 * SF; Console.WriteLine($"n = 20 ответ { Math.Round(C, 4)}"); SF = 0;
10
for (double x = a + h3; x < b; x += h3) SF += Fn(x);
C = h3 / 2 * (Fn(a) + Fn(b)) + h3 * SF; Console.WriteLine($"n = 100 ответ { Math.Round(C, 4)}"); SF = 0;
for (double x = a + h4; x < b; x += h4) SF += Fn(x);
C = h4 / 2 * (Fn(a) + Fn(b)) + h4 * SF; Console.WriteLine($"n = 400 ответ { Math.Round(C, 4)}");
}
static void Simpson()
{
Console.WriteLine(); Console.WriteLine("Метод Симпсона"); double x;
double SF1 = 0; double SF2 = 0; double C;
for (int i = 0; i <= (n1 - 1) / 2; i++)
{
x = a + (2 * i + 1) * h1; SF1 += Fn(x);
}
for (int i = 0; i <= (n1 - 2) / 2; i++)
{
x = a + 2 * i * h1; SF2 += Fn(x);
}
C = h1 / 3 * (Fn(a) + 4 * SF1 + 2 * SF2 + Fn(b)); Console.WriteLine($"n = 4 ответ {Math.Round(C, 4)}"); SF1 = 0;
SF2 = 0;