Нахождение значения определенного интеграла с помощью метода трапеций в C++

Разработка программы нахождения значения определенного интеграла с помощью метода трапеций. Оценка абсолютной погрешности метода. Использование среды программирования Visual Studio Community 2015 для написания программы. Работа с графическим интерфейсом.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 17.03.2016
Размер файла 573,8 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Старооскольский технологический институт им. А.А. Угарова

"Национальный исследовательский технологический университет "МИСиС"

Кафедра автоматизированных и информационных системы управления

Курсовая работа

по дисциплине «Технология программирования»

Старый Оскол, 2015 уч. год

1. Геометрический смысл

Определённый интеграл как площадь фигуры численно равен площади фигуры, ограниченной осью абсцисс, прямыми x = a и x = b и графиком функции f(x).

Рисунок 1

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

Виды:

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

· Метод парабол (формула Симпсона)

· Метод трапеций

· Метод Монте Карло

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

Рисунок 2

Таким образом, наша площадь (синяя штриховка) приближается суммой площадей трапеций (красный цвет). Отсюда и название метода. Легко заметить, что метод трапеций даёт значительно лучшее приближение, чем метод прямоугольников (при одинаковом количестве отрезков разбиения). И, естественно, чем больше более мелких промежуточных отрезков мы рассмотрим, тем будет выше точность.

2. Суть метода трапеций

Поставим перед собой следующую задачу: пусть нам требуется приближенно вычислить определенный интеграл , где подынтегральная функция y=f(x) непрерывна на отрезке[a; b].

Разобьем отрезок [a; b] на n равных интервалов длины h точками. В этом случае шаг разбиения находим каки узлы определяем из равенства.

Рассмотрим подынтегральную функцию на элементарных отрезках.

Возможны четыре случая (на рисунке показаны простейшие из них, к которым все сводится при бесконечном увеличении n):

Рисунок 3

На каждом отрезке заменим функцию y=f(x) отрезком прямой, проходящей через точки с координатами и. Изобразим их на рисунке синими линиями:

Рисунок 4

В качестве приближенного значения интеграла возьмем выражение , то есть, примем .

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

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

Рисунок 5

Таким образом, мы подошли к сути метода трапеций, которая состоит в представлении определенного интеграла в виде суммы интегралов вида на каждом элементарном отрезке и в последующей приближенной замене

.

3. Оценка абсолютной погрешности метода трапеций

Абсолютная погрешность метода трапеций оценивается как

.

Рисунок 6

Рисунок 7

3. Программа

Calc.cpp

#include "calc.h"

#include "math.h"

using namespace std;

double func(double x)

{

double y = (3 * tan(x) + 2) / (x*x + 4 * x + 1);

return y;

}

double IntegeralBS(double a, double b, int n)

{

double h = (b - a) / n;

double result = (func(a) + func(b)) / 2;

double x;

for (int j = 1; j <= n - 1; j++)

{

x = a + j*h;

result = result + func(x);

}

result = result*h;

return result;

}

Calc.h

//Мы объявлем здесь ф-ии. А тело их в cpp

//Потому что компилируются h файлы, а выполняются cpp файлы

double func(double x);

double IntegeralBS(double a, double b, int n);

MyForm.h

#include "Calc.h"; //Подключаем файл с функциями для рассчета интеграла

namespace CalcIntegralForm {

//Подключаем библиотеки (пространства имен) для работы с формой

using namespace System;

using namespace System::Windows::Forms;

/// <summary>

/// Summary for MyForm

/// </summary>

//Класс нашей формы

public ref class MyForm: public System::Windows::Forms::Form

{

public:

MyForm(void)

{

InitializeComponent(); //Создание компонентов (элементов на форме)

//

//TODO: Add the constructor code here

//

}

protected:

/// <summary>

/// Clean up any resources being used.

/// </summary>

~MyForm()

{

if (components)

{

delete components;

}

}

//Объявлены компоненты

// ^ - указатель

private: System::Windows::Forms::Label^ label1;

private: System::Windows::Forms::NumericUpDown^ numericUpDownA;

private: System::Windows::Forms::NumericUpDown^ numericUpDownB;

protected:

private: System::Windows::Forms::Label^ label2;

private: System::Windows::Forms::NumericUpDown^ numericUpDownN;

private: System::Windows::Forms::Label^ label3;

private: System::Windows::Forms::Button^ button1;

private: System::Windows::Forms::Label^ labelRes;

private:

/// <summary>

/// Required designer variable.

/// </summary>

System::ComponentModel::Container ^components;

//region для группировки кода

#pragma region Windows Form Designer generated code

/// <summary>

/// Required method for Designer support - do not modify

/// the contents of this method with the code editor.

/// </summary>

//Создание компонентов

void InitializeComponent(void)

{

System::ComponentModel::ComponentResourceManager^ resources = (gcnew System::ComponentModel::ComponentResourceManager(MyForm::typeid));

this->label1 = (gcnew System::Windows::Forms::Label());

this->numericUpDownA = (gcnew System::Windows::Forms::NumericUpDown());

this->numericUpDownB = (gcnew System::Windows::Forms::NumericUpDown());

this->label2 = (gcnew System::Windows::Forms::Label());

this->numericUpDownN = (gcnew System::Windows::Forms::NumericUpDown());

this->label3 = (gcnew System::Windows::Forms::Label());

this->button1 = (gcnew System::Windows::Forms::Button());

this->labelRes = (gcnew System::Windows::Forms::Label());

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->numericUpDownA))->BeginInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->numericUpDownB))->BeginInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->numericUpDownN))->BeginInit();

this->SuspendLayout();

//

// label1

//

this->label1->AutoSize = true;

this->label1->Location = System::Drawing::Point(12, 9);

this->label1->Name = L"label1";

this->label1->Size = System::Drawing::Size(16, 13);

this->label1->TabIndex = 0;

this->label1->Text = L"a:";

//

// numericUpDownA

//

this->numericUpDownA->DecimalPlaces = 5;

this->numericUpDownA->Location = System::Drawing::Point(34, 7);

this->numericUpDownA->Maximum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1000, 0, 0, 0 });

this->numericUpDownA->Minimum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1000, 0, 0, System::Int32::MinValue });

this->numericUpDownA->Name = L"numericUpDownA";

this->numericUpDownA->Size = System::Drawing::Size(68, 20);

this->numericUpDownA->TabIndex = 1;

//

// numericUpDownB

//

this->numericUpDownB->DecimalPlaces = 5;

this->numericUpDownB->Location = System::Drawing::Point(34, 33);

this->numericUpDownB->Maximum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 2000, 0, 0, 0 });

this->numericUpDownB->Minimum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1000, 0, 0, System::Int32::MinValue });

this->numericUpDownB->Name = L"numericUpDownB";

this->numericUpDownB->Size = System::Drawing::Size(68, 20);

this->numericUpDownB->TabIndex = 3;

this->numericUpDownB->Value = System::Decimal(gcnew cli::array< System::Int32 >(4) { 15, 0, 0, 0 });

//

// label2

//

this->label2->AutoSize = true;

this->label2->Location = System::Drawing::Point(12, 35);

this->label2->Name = L"label2";

this->label2->Size = System::Drawing::Size(16, 13);

this->label2->TabIndex = 2;

this->label2->Text = L"b:";

//

// numericUpDownN

//

this->numericUpDownN->Location = System::Drawing::Point(34, 59);

this->numericUpDownN->Maximum = System::Decimal(gcnew cli::array< System::Int32 >(4) { 1000000, 0, 0, 0 });

this->numericUpDownN->Name = L"numericUpDownN";

this->numericUpDownN->Size = System::Drawing::Size(68, 20);

this->numericUpDownN->TabIndex = 5;

this->numericUpDownN->Value = System::Decimal(gcnew cli::array< System::Int32 >(4) { 10000, 0, 0, 0 });

//

// label3

//

this->label3->AutoSize = true;

this->label3->Location = System::Drawing::Point(12, 61);

this->label3->Name = L"label3";

this->label3->Size = System::Drawing::Size(16, 13);

this->label3->TabIndex = 4;

this->label3->Text = L"n:";

//

// button1

//

this->button1->Location = System::Drawing::Point(12, 85);

this->button1->Name = L"button1";

this->button1->Size = System::Drawing::Size(90, 23);

this->button1->TabIndex = 6;

this->button1->Text = L"Рассчет";

this->button1->UseVisualStyleBackColor = true;

this->button1->Click += gcnew System::EventHandler(this, &MyForm::button1_Click);

//

// labelRes

//

this->labelRes->AutoSize = true;

this->labelRes->Location = System::Drawing::Point(12, 121);

this->labelRes->Name = L"labelRes";

this->labelRes->Size = System::Drawing::Size(65, 13);

this->labelRes->TabIndex = 7;

this->labelRes->Text = L"Результат: ";

//

// MyForm

//

this->AutoScaleDimensions = System::Drawing::SizeF(6, 13);

this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font;

this->ClientSize = System::Drawing::Size(216, 152);

this->Controls->Add(this->labelRes);

this->Controls->Add(this->button1);

this->Controls->Add(this->numericUpDownN);

this->Controls->Add(this->label3);

this->Controls->Add(this->numericUpDownB);

this->Controls->Add(this->label2);

this->Controls->Add(this->numericUpDownA);

this->Controls->Add(this->label1);

this->FormBorderStyle = System::Windows::Forms::FormBorderStyle::Fixed3D;

this->Icon = (cli::safe_cast<System::Drawing::Icon^>(resources->GetObject(L"$this.Icon")));

this->MaximizeBox = false;

this->Name = L"MyForm";

this->Text = L"Integral";

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->numericUpDownA))->EndInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->numericUpDownB))->EndInit();

(cli::safe_cast<System::ComponentModel::ISupportInitialize^>(this->numericUpDownN))->EndInit();

this->ResumeLayout(false);

this->PerformLayout();

}

#pragma endregion

//Это основной расчет

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {

double a = (double)numericUpDownA->Value;

double b = (double)numericUpDownB->Value;

if (b > a)

{

int n = (int)numericUpDownN->Value;

double result = IntegeralBS(a, b, n);

labelRes->Text = result.ToString();

}

else

{

MessageBox::Show ("Неверно заданы пределы интегрирования (a должно быть меньше b)");

}

}

};

}

MyForm.cpp

#include "MyForm.h"

using namespace CalcIntegralForm;

[STAThreadAttribute] //Атрибут указывает, что программа будет начинаться с метода main (точка входа)

int main(array<System::String ^> ^args)

{

// Application - это класс приложения

Application::EnableVisualStyles(); //Включаеям визуальные стили (форма рисовалась)

Application::SetCompatibleTextRenderingDefault(false); //Текст обрабатывает с помощью.net

// Создаем экземпляр формы (этого класса MyForm) и передаем эту форму в приложение и оно её рисует

//gcnew создание экземпляра класса

Application::Run(gcnew MyForm());

return 0;

}

программа интеграл трапеция интерфейс

Таблица 1. Результат выполнения программы:

a

b

n

result

1

0

15

1000

2,15746161654175

2

0

14

999

5,74822536767904

3

1

11

1000

4,97019203763698

4

3

15

250

0,946253773264964

Вывод

Для написания данной программы я использовала язык C++ и среду программирования Visual Studio Community 2015. C++-- чрезвычайно мощный язык, содержащий средства создания эффективных программ практически любого назначения, от низкоуровневых утилит и драйверов до сложных программных комплексов. Visual Studio Community 2015 -- это полнофункциональная интегрированная среда разработки. Эта среда программирования имеет ряд преимуществ. Мощные, эффективные возможности для кодирования, инструментами кроссплатформенных разработок для Windows. В ней находится большое количество различных библиотек, в которых содержится множество полезных функций. Также, здесь очень удобно работать с графическим интерфейсом. Это осуществлено с помощью программная платформа, Visual Studio.NET Framework. Данные преимущества существенно облегчают процесс написания программы.

Размещено на Allbest.ru


Подобные документы

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

    курсовая работа [834,6 K], добавлен 14.04.2019

  • Сущность и особенности применения метода средних треугольников. Порядок расчета по методу трапеций и Ньютона-Котеса. Формула Чебышева и значения узлов ее квадратуры. Составление блок-схемы программы и ее основных процедур различными численными методами.

    курсовая работа [482,7 K], добавлен 03.01.2010

  • Формулирование и создание программы по вычислению определенного интеграла по формуле трапеций с тремя десятичными знаками и по формуле Симпсона. Выбор Delphi как программного средства разработки программы. Создание алгоритма и листинг программы.

    курсовая работа [990,9 K], добавлен 15.06.2009

  • Математическое описание, алгоритм и программа вычисления определенного интеграла методом трапеций. Расчет n-значений исследуемой функции и вывод их в виде таблицы. Технические и программные средства. Входные и выходные данные, функциональное назначение.

    курсовая работа [21,0 K], добавлен 03.01.2010

  • Разработка алгоритма решения определенного интеграла методом трапеций для подынтегральной функции и моделирования задачи вынужденных колебаний без затухания. Описание интерфейса программы в среде Delphi и MathCad; идентификаторы, модули и приложения.

    курсовая работа [500,4 K], добавлен 28.05.2013

  • Методика и основные этапы нахождения интеграла функции sin (x+10)+x4=0 с помощью двух подходов: метод прямоугольников и метод трапеций. Составление соответствующей программы в среде Pascal. Оценка возможностей пользователя при решении данного задания.

    лабораторная работа [134,0 K], добавлен 24.09.2010

  • Идея численного интегрирования. Создание программы, вычисляющей определенный интеграл методом трапеций. Листинг программы, результаты работы. Проверка в среде Mathcad. Зависимость точности вычисления от количества отрезков разбиения, расчет погрешности.

    отчет по практике [106,8 K], добавлен 28.04.2013

  • Требования к аппаратным ресурсам персонального компьютера. Расчет цены и прибыли на программное средство. Процедура нахождения значения интеграла методом Симпсона, трапеции, прямоугольников. Формы для ввода и вывода данных с доступным интерфейсом.

    дипломная работа [7,4 M], добавлен 11.06.2012

  • Создание схем алгоритмов и составление программы на языке Pascal для вычисления значений заданных функций. Сущность и порядок нахождения значения определенного интеграла. Анализ работы подпрограмм. Разработка тестов для проверки правильности алгоритмов.

    контрольная работа [831,0 K], добавлен 24.11.2013

  • Разработка программы, выполняющей интегрирование методом входящих прямоугольников с кратностями и методом Симпсона. Расчет определённого интеграла приближенным и точным методами. Оценка погрешности при вычислении приблизительного значения интеграла.

    контрольная работа [71,7 K], добавлен 13.02.2016

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.