96762

Вычисление определённых интегралов с использованием OpenGL API

Курсовая

Математика и математический анализ

Всякая непрерывная функция имеет первообразную. В том случае, когда первообразная некоторой элементарной функции f(x) является также элементарной функцией, говорят, что интеграл выражается через элементарные функции (или интеграл вычисляется). Если же интеграл не выражается через элементарные функции, то говорят, что интеграл не вычисляется.

Русский

2015-10-09

129.5 KB

1 чел.

МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ

учреждение образования

«Гродненский государственный университет имени Янки Купалы»

Факультет математики и информатики

Кафедра современных технологий программирования

Шестовицкий Алексей Владимирович

Вычисление определённых интегралов с использованием OpenGL API

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

студента 1 курса специальности

1-40 01 01 «Программное обеспечение информационных технологий»

дневной формы получения образования

Научный руководитель

Карканица Анна Викторовна,

старший преподаватель кафедры современных технологий программирования

Гродно, 2015


СОДЕРЖАНИЕ

Введение 3

Глава 1. Проектирование реализации приложения 4

1.1. Выбор технологии и языка программирования 4

1.2. Цветовой портрет художественного произведения 5

1.3. Задача анализа использования цвета в произведениях художественной литературы 5

Глава 2. Программная реализация приложения 6

2.1. Алгоритм обработки текста и построения цветового портрета 6

2.2. Реализация программы 6

Заключение 10

Список используемых источников  10

Приложение 1 11

Введение

Всякая непрерывная функция имеет первообразную. В том случае, когда первообразная некоторой элементарной функции f(x) является также элементарной функцией, говорят, что интеграл выражается через элементарные функции (или интеграл вычисляется). Если же интеграл не выражается через элементарные функции, то говорят, что интеграл не вычисляется.

Однако существует такой математический метод, как численное интегрирование. Численное интегрирование (историческое название: (численная) квадратура) — вычисление значения определённого интеграла (как правило, приближённое). Под численным интегрированием понимают набор численных методов для нахождения значения определённого интеграла.

Численное интегрирование применяется, когда:

  1.  Сама подынтегральная функция не задана аналитически. Например, она представлена в виде таблицы (массива) значений в узлах некоторой расчётной сетки.
  2.  Аналитическое представление подынтегральной функции известно, но её первообразная не выражается через аналитические функции. Например, .

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

Пусть требуется определить значение интеграла функции на отрезке . Этот отрезок делится точками  на  равных отрезков длиной  Обозначим через  значение функции  в точках  Далее составляем суммы  Каждая из сумм — интегральная сумма для  на  и поэтому приближённо выражает интеграл

Если заданная функция — положительная и возрастающая, то эта формула выражает площадь ступенчатой фигуры, составленной из «входящих» прямоугольников, также называемая формулой левых прямоугольников, а формула

выражает площадь ступенчатой фигуры, состоящей из «выходящих» прямоугольников, также называемая формулой правых прямоугольников. Чем меньше длина отрезков, на которые делится отрезок , тем точнее значение, вычисляемое по этой формуле, искомого интеграла.

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

где 

Учитывая априорно бо́льшую точность последней формулы при том же объёме и характере вычислений её называют формулой прямоугольников

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

Площадь трапеции на каждом отрезке:

Погрешность аппроксимации на каждом отрезке:

 где 

Полная формула трапеций в случае деления всего промежутка интегрирования на отрезки одинаковой длины :

 где 

Погрешность формулы трапеций:

 где 

Цель данной работы: разработка алгоритма и соответствующего программного приложения для вычисления определённого интеграла.

Для выполнения поставленной цели необходимо выполнить следующие задачи:

  1.  Изучить морфемный состав слова и способы словообразования в русском     языке.
  2.  Разработать алгоритм поиска в тексте слов, обозначающих цвет на основе метода выделения корня слова.
  3.  Выполнить программную реализацию алгоритма, получить графическую интерпретацию цветового портрета произведения.

   ГЛАВА 1

  1.  Выбор технологии и языка программирования.

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

Си++ (англ. C++) — компилируемый строго типизированный язык программирования общего назначения. Поддерживает разные парадигмы программирования: процедурную, обобщённую, функциональную; наибольшее внимание уделено поддержке объектно-ориентированного программирования. В этом языке, в сравнении со своим предшественником – языком С, – наибольшее внимание уделено поддержке объектно-ориентированного программирования.

Программа должна осуществлять анализ текста, демонстрировать использование тех или иных цветов.  Исходными данными для построения алгоритма являются сам текст произведения, и словарь, по которому и будет осуществляться проверка слов на «наличие в них цвета». (Словарь корней цветных слов, по которому собственно и осуществляется поиск). Все документы в формате txt.

Используемыми структурами данных являются контейнеры, реализованные в библиотеке STL, а именно string, vector. string – это контейнер, содержащий в себе массив элементов типа «char», представляющий собой единую строку. Этот контейнер идеально подходит для работы с текстом. Vector - это массив переменной длины, размер которого определяется объемом исходного текста произведения.

В результате использования программа должна предоставлять пользователю впечатление о некотором художественном произведении на основании визуального восприятия цвета.

  1.  Цветовой портрет художественного произведения.

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

Цветовым портретом художественного произведения считается весь спектр цветов, используемых в тексте. Изображение этого спектра можно представить по-разному. Например, можно, следуя тексту, отмечать все «цветные слова» и считать количество их употреблений для каждого цвета. На основе полученных данных строится цветовая схема или диаграмма, отражающая употребление того или иного цвета. Приведем некоторые пример такого портрета (рис. 1).

рис.  Реализация алгоритма последовательного выделения цветов (Н. В. Гоголь – «Мертвые души»)

1.3. Задача анализа использования цвета в произведениях художественной литературы

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

    ГЛАВА 2

2.1. Алгоритм обработки текста и построения цветового портрета

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

Далее алгоритм выполняет итерацию по всем элементам вектора слов и удаляет после каждого слова знак препинания, если таковой есть. Затем алгоритм в каждом слове пытается выделить его корень.  Полученный корень сравнивается с корнями слов, обозначающих цвет. Если корни совпадают, для него проводится поиск соответствия определенного цвета, и затем итоговый цвет попадает в еще один контейнер vectorline.

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

2.2. Реализация программы

Как уже было написано программа реализована на с++ с помощью библиотеки stl. Также используются библиотека «fstream» для работы с файлами, библиотека «string» для оптимизации работы со строками.

Методы реализованные в программе:

  1.  Программная реализация алгоритма обработки текста
  2.  Освобождение слов текста от знаков препинания
  3.  Нахождение слов, обозначающих цвета
  4.  Вывод кубиков на экран

Программная реализация алгоритма обработки текста:

void Input(string filename)  //Ввод текста из файла

{

string p;

ifstream in(filename);

 while(!in.eof())

{

 in >> p;

 massiv.push_back(p);

}

in.close();

}

void LibraryInput()         //Ввод из файла библиотеки корней

{

string p;

ifstream in("library.txt");

 while(!in.eof())

{

 in >> p;

 library.push_back(p);

}

in.close();

}

void Print()    //Вывод текста на консоль

{

 for(unsigned int i = 0; i < massiv.size(); i++)

{

 cout<<massiv[i]<<" ";

}

cout<<endl;

}

Освобождение слов от знаков препинания:

void WordCorrector()  //Удаление знаков препинания

{

 char punct[]={'.',',','!','?'};

 for(unsigned int i = 0; i < massiv.size(); i++)

{

 for(unsigned int j = 0; j < sizeof(punct); j++)

 {

  if(massiv[i][massiv[i].length()-1]==punct[j])

  {

   massiv[i].erase(massiv[i].size()-1, massiv[i].size());

  }

 }

}

}

Нахождение слов, обозначающих цвета:

void ColorDetector()  //Нахождение словоформ цветов

{

string str;

 for(unsigned int i = 0; i < massiv.size(); i++)

{

 for(unsigned int j = 0; j < massiv[i].length(); j++)

 {

  for(unsigned int k = 0; k < library.size(); k++)

  {

   str = massiv[i].substr(j, library[k].length());

   if(str == library[k])

   {

    line.push_back(ColorFind(str)); //Заполнение вектора цветов значениями из "ColorFind()"

   }

  }

 }

}

}

ConsoleColor ColorFind(string str) //Постановка соответствия цветам

{

 if((str=="Черн") || (str=="черн") || (str=="Чёрн") || (str=="чёрн"))

{

 return Black;

}

 else

 if((str=="Син") || (str=="син"))

{

 return Blue;

}

 else

 if((str=="Сер") || (str=="сер"))

{

 return DarkGray;

}

 else

 if((str=="Коричн") || (str=="коричн"))

{

 return Brown;

}

 else

 if((str=="Красн") || (str=="красн") || (str=="Бордов") || (str=="бордов"))

{

 return Red;

}

 else

 if((str=="Фиолетов") || (str=="фиолетов"))

{

 return Magenta;

}

 else

 if((str=="Желт") || (str=="желт") || (str=="Жёлт") || (str=="жёлт"))

{

 return Yellow;

}

 else

 if((str=="Зелен") || (str=="зелен") || (str=="Зелён") || (str=="зелён"))

{

 return Green;

}

 else

 if((str=="Розов") || (str=="розов"))

{

 return LightMagenta;

}

 else

 if((str=="Бел") || (str=="бел"))

{

 return White;

}

 else

 if((str=="Голуб") || (str=="голуб"))

 {

 return Cyan;

}

}

Вывод «кубиков» на экран:

void PrintLine()  //Отрисовка "квадратиков" на консоли

{

 char item = 219;

 for(unsigned int i = 0; i < line.size(); i++)

{

 SetColor(line[i], Black);

 cout << item;

}

SetColor(LightGray, Black);

}

void SetColor(ConsoleColor text, ConsoleColor background) //Смена цвета шрифта

{

HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));

}

ЗАКЛЮЧЕНИЕ

В ходе работы над проектом было разработано приложение, позволяющее получить цветовой портрет художественного произведения. Используя эту разработку, мы можем получить графическое изображение, которое, возможно, позволит сформировать у читателя первое впечатление о содержании и эмоциональном настроении произведения. Но на самом деле более полную и информацию об эмоциональном содержании текста можно получить, только углубившись и проанализировав филологические исследования по этой теме. Существует ряд филологических исследований, в которых отмечается, что каждому «цветному слову» можно поставить в соответствие числовое значение, обозначающее его вклад в определенную эмоцию.

В будущем, на основе этих исследований, можно будет попытаться вычислить числовое значение каждой эмоции, встречающейся в тексте. И возможно, когда-нибудь в магазинах появятся книги, на которые будет нанесен «цветовой штрих-код», по которому можно будет судить об их содержании.

Использованная литература:

  1.  Справочная система языка С++
  2.  Конспект лекций по дисциплине  ОАиП
  3.  ПавловскаяТ.А., Щупак Ю.А. - C++. Объектно-ориентированное программирование. Практикум - Санкт – Петербург, «Питер», 2006 г
  4.  Форум начинающих и профессиональных программистов - http://www.cyberforum.ru.

Приложение 1: Программная реализация на C++

#include <iostream>

#include <Windows.h>

#include <string>

#include <vector>

#include <fstream>

using namespace std;

enum ConsoleColor  //Перечисление цветов

{

Black         = 0,

Blue          = 1,

Green         = 2,

Cyan          = 3,

Red           = 4,

Magenta       = 5,

Brown         = 6,

LightGray     = 7,

DarkGray      = 8,

LightBlue     = 9,

LightGreen    = 10,

LightCyan     = 11,

LightRed      = 12,

LightMagenta  = 13,

Yellow        = 14,

White         = 15

};

vector <string> massiv;

vector <string> library;

vector <ConsoleColor> line;

void Input(string filename)  //Ввод текста из файла

{

string p;

ifstream in(filename);

 while(!in.eof())

{

 in >> p;

 massiv.push_back(p);

}

in.close();

}

void LibraryInput()         //Ввод из файла библиотеки корней

{

string p;

ifstream in("library.txt");

 while(!in.eof())

{

 in >> p;

 library.push_back(p);

}

in.close();

}

void Print()    //Вывод текста на консоль

{

 for(unsigned int i = 0; i < massiv.size(); i++)

{

 cout<<massiv[i]<<" ";

}

cout<<endl;

}

void WordCorrector()  //Удаление знаков препинания

{

 char punct[]={'.',',','!','?'};

 for(unsigned int i = 0; i < massiv.size(); i++)

{

 for(unsigned int j = 0; j < sizeof(punct); j++)

 {

  if(massiv[i][massiv[i].length()-1]==punct[j])

  {

   massiv[i].erase(massiv[i].size()-1, massiv[i].size());

  }

 }

}

}

ConsoleColor ColorFind(string str) //Постановка соответствия цветам

{

 if((str=="Черн") || (str=="черн") || (str=="Чёрн") || (str=="чёрн"))

{

 return Black;

}

 else

 if((str=="Син") || (str=="син"))

{

 return Blue;

}

 else

 if((str=="Сер") || (str=="сер"))

{

 return DarkGray;

}

 else

 if((str=="Коричн") || (str=="коричн"))

{

 return Brown;

}

 else

 if((str=="Красн") || (str=="красн") || (str=="Бордов") || (str=="бордов"))

{

 return Red;

}

 else

 if((str=="Фиолетов") || (str=="фиолетов"))

{

 return Magenta;

}

 else

 if((str=="Желт") || (str=="желт") || (str=="Жёлт") || (str=="жёлт"))

{

 return Yellow;

}

 else

 if((str=="Зелен") || (str=="зелен") || (str=="Зелён") || (str=="зелён"))

{

 return Green;

}

 else

 if((str=="Розов") || (str=="розов"))

{

 return LightMagenta;

}

 else

 if((str=="Бел") || (str=="бел"))

{

 return White;

}

 else

 if((str=="Голуб") || (str=="голуб"))

{

 return Cyan;

}

}

void ColorDetector()  //Нахождение словоформ цветов

{

string str;

 for(unsigned int i = 0; i < massiv.size(); i++)

{

 for(unsigned int j = 0; j < massiv[i].length(); j++)

 {

  for(unsigned int k = 0; k < library.size(); k++)

  {

   str = massiv[i].substr(j, library[k].length());

   if(str == library[k])

   {

    line.push_back(ColorFind(str)); //Заполнение вектора цветов значениями из "ColorFind()"

   }

  }

 }

}

}

void SetColor(ConsoleColor text, ConsoleColor background) //Смена цвета шрифта

{

HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);

SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));

}

void PrintLine()  //Отрисовка "квадратиков" на консоли

{

 char item = 219;

 for(unsigned int i = 0; i < line.size(); i++)

{

 SetColor(line[i], Black);

 cout << item;

}

SetColor(LightGray, Black);

}

int main()

{

 char item = 219;

string filename;

cout << "Input file name: " << endl;

cin >> filename;

Input(filename);

cout << "Text is loaded." << endl;

WordCorrector();

LibraryInput();

cout << "Library is loaded." << endl;

cout << "Please wait..." << endl;

ColorDetector();

PrintLine();

cout << endl;

 return 0;

}

 

PAGE   \* MERGEFORMAT 1


 

А также другие работы, которые могут Вас заинтересовать

25555. Учение Платона о душе 28.5 KB
  Вожделеющая и страстная души должны подчиняться разум ной которая одна может сделать поведение нравственным. И наконец разумную часть души Платон отождествляет с возницей который ищет правильный путь и направляет по нему колесницу управляя конем. В описании души Платон придерживается четких чернобелых критериев доказывая что есть плохие и хорошие части души: разумная часть для него является однозначно хорошей в то время как вожделеющая и страстная плохими более низкими. У человека Платон выделял два уровня души высший и низший.
25556. Аристотель о душе и ее способностях 30.5 KB
  Форма придает материи качественную определенность составляет сущность вещей. Материя не может быть бесформенной форма не может не иметь материальной основы. Душа форма живой материи. Душа и тело связаны как материя и форма т.
25557. Неоплатонизм и томизм в философии и психологии Средневекового периода 30.5 KB
  Развитие мира постоянное восхождение или нисхождение божественного Ступени: Божественное первоначало Божественный ум Божественная душа Природа По мере нисхождения верховного начала оно передается во множество умов и душ. Первично божественное материя последняя стадия дробления первоначала Душа человека происходит из мировой души она нематериальна непространственна едина. Уровни или части души: Умопостигаемая душа Чувственная душа Тело Деятельность души функции Обращение к мировому разуму Обращение к чувственному миру и...
25558. Развитие средневековой психологии на востоке. Авиценна, Альгазен, Аверроэс 26.5 KB
  Авиценн согласен с Аристотелем в том что душа это форма тела и о трех способностях души растительной рост животной ощущения аффекты движения и разумной воображение память разум. Авиценн выделил чистые разумные акты независимые от тела. Причины выделения индивидуального разума 1. чувства и разум разобщены самостоятельны по отношению друг к другу независимы.
25559. Психология в эпоху Возрождения: основные тенденции в развитии философо-психологических взглядов 27.5 KB
  Поскольку человек есть часть природы то и душа его есть лишь проявление природы. Стремления и удовольствия требования природы человек должен их удовлетворять. Помпонацци 14621524 О бессмертии души Бог в делах природы участия не принимает. Человек есть результат развития природы причем у него как и у всего живого появляется психическое душевное названное термином дух захваченное из окружающей среды наиболее совершенное материальное вещество.
25560. Общие черты в развитии психологии Нового времени 26 KB
  : Рост производства Переход к капитализму Мануфактуры Тенденции характерные для философов: Отделение науки от религии: отказ от веры светский характер науки для того чтобы ускорить прогресс Источник познания: Сенсуализм родоначальник Ф.Бэкон Источник познания чувственный опыт. Источник познания мышление разум. Способы научного познания: Индуктивный: от частногоопыта к общему правилу Дедуктивный: от общего теории к частному частным ситуациям Что первично: психика или телесный мир Сенсуализм: сначала...
25561. Ф. Бэкон и оформление эмпирического принципа в философии и психологии 41.5 KB
  Бэкон и оформление эмпирического принципа в философии и психологии Ф. Бэкон 1561 1626 английский философ историк политический деятель основоположник эмпиризма. Бэкон родоначальник английского материализма и эмпирического направления в философии и психологии. Человек: Чувственная часть души проявляется в теле занимается наука Разум божественный занимается теология Суть основной философской идеи Френсиса Бэкона эмпиризма в том что в основе познания лежит исключительно опыт.
25562. Р. Декарт о «страстях души» 34 KB
  Декарт о страстях души Рене Декарт 15961650 лат. В трактате Страсти души 1649 представлена вся система философскопсихологических взглядов Декарта Картезианский дуализм: существует 2 субстанции: Протяженная телесная физика материализм в учении Мыслящая духовная метафизика светский идеализм в учении осн. Страсти тип или уровень деятельности который является продуктом взаимодействия тела и души. Состояния души кот.
25563. Детерминистическое учение Б. Спинозы о психике 31.5 KB
  Учение о единой субстанции ее атрибутах и модусах Стремился объяснить природу из самой себя. Ее сущность раскрывается в атрибутах Атрибуты такие существенные и всеобщие аспекты субстанции которые ей не тождественны и по отношению к которой они вторичные и производные. конкретные фундаментальные свойства субстанции Человеку доступны только 2 атрибута: мышления и протяжения Кстати Декарт Модусы частные состояния и видоизменения субстанции все многообразие мира различные явления и события По отношению к атрибуту протяжения каждый...