Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая работа по информатике. Отчет. Холодков...docx
Скачиваний:
1
Добавлен:
01.05.2025
Размер:
262.14 Кб
Скачать

Вычисление определенного интеграла методом прямоугольников.

Задание: Вычислить определенный интеграл с заданной точностью по методу прямоугольников. Проверить правильность результата, вычисляя тот же интеграл с использованием первообразной функции по формуле Ньютона-Лейбница.

Теоретическое введение:

Метод прямоугольников — метод численного интегрирования функции одной переменной, заключающийся в замене подынтегральной функции на многочлен нулевой степени, то есть константу, на каждом элементарном отрезке. Если рассмотреть график подынтегральной функции, то метод будет заключаться в приближённом вычислении площади под графиком суммированием площадей конечного числа прямоугольников, ширина которых будет определяться расстоянием между соответствующими соседними узлами интегрирования, а высота — значением подынтегральной функции в этих узлах. Формула нахождения интеграла методом средних прямоугольников: , где x1 и x2 – концы элементарного отрезка (см рис.2).

Формула Ньютона-Лейбница:

Текст программы:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

class Program

{

//Преобразуем функцию в переменную типа делегат, для получения к ней доступа другими методами//

delegate double fx(double i);

static double f1(double x)

{

return (Math.Sin(1 / x) / (x * x));

}

//Создаем метод, вычисляющий интеграл методом прямоугольников //

static double rectangle(fx f, double a, double b, double n)

{

double s = 0, h;

while (a < b)

{

h = (f(a) + f(a + n)) / 2;

s = s + h * n;

a = a + n;

}

return s;

}

// Создаем метод вычисляющий интеграл методом Ньютона//

static double newton(double a, double b)

{

a = Math.Cos(1 / a) - Math.Cos(1);

b = Math.Cos(1 / b) - Math.Cos(1);

double d = b - a;

return (d);

}

static void Main(string[] args)

{

//Вызываем метод rectangle и вводим значения пределов интегрирования a,b и шаг n//

double s = rectangle(f1, 1, 2.5, 0.1);

//Вызываем метод newton и вводим значения пределов интегрирования//

double d = newton(1, 2.5);

Console.WriteLine("Рассчет интеграла методом прямоугольников S=" + "{0,6:f3}", s);

Console.WriteLine("Рассчет интеграла методом Ньютона - Лейбница S=" + "{0,6:f3}", d);

Console.ReadKey();

}

}

}

Результат:

Вывод: Данная программа позволяет рассчитывать интегралы с точностью до тысячных (расхождения в результатах по методу прямоугольников и методу Ньютона - Лейбница).

Интерполирование функции методом линейной интерполяции.

Задание: Используя линейную интерполяцию, найти значение функции в любой точке,

заключенной между минимальным и максимальным значениями аргумента и не

совпадающей с табличным значением. Самостоятельно задать для проверки 2-3 контроль-

ные точки.

Таблица 1. Начальные данные.

Х

927

1077

1227

1377

1527

1677

1827

1977

2120

2125

2127

У

3

4

5

23

40

39

38

29

20,5

20

20

Теоретическое введение:

Простейшим и часто используемым видом локальной интерполяции является линейная интерполяция. Она состоит в том, что заданные точки М(xi, yi) (i = 0, 1, ..., n) соединяются прямолинейными отрезками, и функция f(x) приближается к ломаной с вершинами в данных точках

Уравнения каждого отрезка ломаной линии в общем случае разные. Поскольку имеется n интервалов (xi , xi + 1), то для каждого из них в качестве уравнения интерполяционного полинома используется уравнение прямой, проходящей через две точки. В частности, для i - го интервала можно написать уравнение прямой, проходящей через точки (xi , yi) и (xi + 1, yi + 1), в виде:

Отсюда

Следовательно, при использовании линейной интерполяции сначала нужно определить интервал, в который попадает значение аргумента x, а затем подставить его в формулу и найти приближенное значение функций в этой точке.

Текст программы:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace ConsoleApplication1

{

class Program

{

//Создаем метод для нахождения интерполирующей линейной функции между узлами, который так же будет рассчитывать значения функции в заданных точках//

static void asd(double[] x, double[] y, ref double z)

{

double xmax, xmin, ymax, ymin;

for (int i = 0; i < x.Length; i++)

{

if (x[i] > z)

{

xmax = x[i];

xmin = x[i - 1];

ymax = y[i];

ymin = y[i - 1];

double b = ((ymax - ymin) / (xmax - xmin)) * (z - xmax) + ymax;

Console.WriteLine("При х=" + z + " у=" + "{0:#.##}", b); Console.WriteLine();

break;

}

}

}

static void Main(string[] args)

{

//Вводим значения узлов, в массив а - значения х, соответственно, в массив m - значения у//

double[] a = new double[] { 927, 1077, 1227, 1377, 1527, 1677, 1827, 1977, 2120, 2125, 2127 };

double[] m = new double[] { 75, 69, 63, 41, 20, 14, 8, 6, 4.2, 4, 4 };

//Выводим на экран данные узлов//

Console.WriteLine("Исходные данные ");

for (int i = 0; i < a.Length; i++)

{

Console.WriteLine("x=" + a[i] + " " + "y=" + m[i]);

}

Console.WriteLine();

double z = 2;

while (z != 1)

{

Console.WriteLine("Введите значение из отрезка [927;2127] , для выхода введите 0");

// Задаем любую точку не принадлежащую узлу//

z = double.Parse(Console.ReadLine());

if (z == 0)

break;

//Вызываем метод интерполяции, задавая значения массивов x=a, y=m, требуемой точки z//

asd(a, m, ref z);

}

}

}

}

Результат:

Вывод: Данная программа позволяет найти приблизительные значения функции в точках, не заданных таблично, методом линейной интерполяции.