Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

ВычМат / ВычМат(7)

.docx
Скачиваний:
6
Добавлен:
31.05.2018
Размер:
185.04 Кб
Скачать

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РФ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ АВТОНОМНОЕ

ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ПРОФЕССИОНАЛЬНОГО ОБРАЗОВАНИЯ

«КАЗАНСКИЙ (ПРИВОЛЖСКИЙ) ФЕДЕРАЛЬНЫЙ УНИВЕРСИТЕТ»

НАБЕРЕЖНОЧЕЛНИНСКИЙ ИНСТИТУТ (ФИЛИАЛ)

КАФЕДРА ИНФОРМАЦИОННЫХ СИСТЕМ

ЛАБОРАТОРНАЯ РАБОТА № 7

«Численное интегрирование»

По дисциплине

«Вычислительная математика»

Выполнил:

Студент группы 2161121

Золотых С.В.

Проверил:

Мингалеева Л.Б.

Набережные Челны

2018

Цель

Решить интегралы тремя методами: метод прямоугольников, метод трапеций, метод Симпсона.

  1. ,

  2. .

Точное решение интегралов:

Реализация в Excel

Решение представлено сначала первого интеграла с числом шагов n=8, второго интеграла с числом шагов n=6, для более точного решения.

Можно заметить, что решение методом прямоугольников сильно отличается от точного значения интеграла.

Методом трапеций получилось найти более приближённое значение второго интеграла, первое же отличается на 0,00004.

Методом Симпсона получилось найти наиболее точный результат первого интеграла, но и второй так же приближён к точному результату.

Реализация на языке C#

namespace интеграл

{

public partial class Form1 : Form

{

public Form1()

{

InitializeComponent();

}

//первая формула

static double Form_1(double x)

{

double m = 0.5 * x + 2;

double k = 2 * Math.Pow(x, 2) + 1 + 0.8;

return Math.Sqrt(m) / Math.Sqrt(k);

}

//вторая формула

double Form_2(double x)

{

double m = 0.8 * x + 1.2;

double k = Math.Pow(x, 2) + 0.6;

return Math.Cos(m)/ (1.5 + Math.Sin(k));

}

private void button1_Click(object sender, EventArgs e)

{

int n1 = Convert.ToInt16(textBox1.Text);

int n2 = Convert.ToInt16(textBox2.Text);

textBox3.Text = "Решение первого интеграла";

textBox4.Text = "Решение второго интеграла";

textBox3.Text += "\r\nМетод прямоугольников: " + Pr(0.4,1.2,n1, Form_1);

textBox4.Text += "\r\nМетод прямоугольников: " + Pr(0.3, 0.9, n2, Form_2);

textBox3.Text += "\r\nМетод трапеций: " + Tr(0.4, 1.2, n1, Form_1);

textBox4.Text += "\r\nМетод трапеций: " + Tr(0.3, 0.9, n2, Form_2);

textBox3.Text += "\r\nМетод Симпсона: " + Par(0.4, 1.2, n1, Form_1);

textBox4.Text += "\r\nМетод Симпсона: " + Par(0.3, 0.9, n2, Form_2);

}

//метод прямоугольников

public double Pr(double a, double b, int n, Func<double, double> Form)

{

double S = 0;

double h = (b - a) / n;

double[] X = new double[n];

double[] F = new double[n];

X[0] = a;

for (int i = 1; i < n; i++)

{

X[i] = X[i-1]+h;

F[i] = Form(X[i]+h/2);

S += F[i];

}

S = (S + Form(b + h / 2) + Form(a + h / 2)) * h;

return Math.Round(S,6);

}

//метод трапеций

public double Tr(double a, double b, int n, Func<double, double> Form)

{

double S = 0;

double h = (b - a) / n;//шаг

double[] X = new double[n];

double[] F = new double[n];

X[0] = a;

for (int i = 1; i < n; i++)

{

X[i] = X[i - 1] + h;

F[i] = Form(X[i]);

S += F[i];

}

S = (S+ (Form(a)+Form(b))/2) * h;

return Math.Round(S, 6);

}

//метод Симпсона

public double Par(double a, double b, int n, Func<double, double> Form)

{

double S = 0,S1 = 0, S2 = 0;

double h = (b - a) / n;//шаг

double[] X = new double[n];

double[] F = new double[n];

X[0] = a;

for (int i = 1; i < n; i++)

{

X[i] = X[i - 1] + h;

F[i] = Form(X[i]);

if (i % 2 == 0)

S1 += F[i];

else

S2 += F[i];

}

S = (Form(a) + Form(b) + 2 * S1 + 4 * S2) * (h / 3);

return Math.Round(S, 6);

}

}

}

Результат выполнения программы

Вывод

Применила на практике знания о решении интегралов численными методами: метод прямоугольников, метод трапеций и метод Симпсона. В результате проверок можно утверждать, что решение методом Симпсона является наиболее точным. Метод трапеций также является применимым, как и метод Симпсона. Метод прямоугольников является наиболее не точным, результаты сильно отличаются от точных.

Соседние файлы в папке ВычМат