Реферат Разработка программы, вычисляющей интеграл
Работа добавлена на сайт bukvasha.net: 2015-10-28Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.

Предоплата всего
от 25%

Подписываем
договор
Государственное образовательное учреждение высшего профессионального образования
Кубанский государственный технологический университет
(КубГТУ)
Кафедра ________________________________________
(наименование кафедры)
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
к курсовому проекту (работе)
по ____________________________________________________________
наименование дисциплины)
на тему _______________________________________________________
(тема курсового проекта (работы))
Выполнил (а) студент (ка) группы ________________________________
_____________________________________________________________
(ф.и.о.)
Допущен к защите______________________________________________
Руководитель проекта___________________________________________
Нормоконтролер _______________________________________________
Защищен _____________________ Оценка _______________________
(дата)
Члены комиссии __________________________________________________
(подпись, дата, расшифровка подписи)
Краснодар
2010
Государственное образовательное учреждение высшего профессионального образования
Кубанский государственный технологический университет
(КубГТУ)
Кафедра ________________________________________
(наименование кафедры)
УТВЕРЖДАЮ
Зав. кафедрой ___________________
_______________________________
З А Д А Н И Е
на курсовое проектирование
Студенту:_________________________ группы__________________ курса
(Ф.И.О.) (№ группы и курса)
факультета ______________________________________________________
специальности __________________________________________________
________________________________________________________________
(шифр и наименование)
Тема проекта:____________________________________________________
Содержание задания:______________________________________________
________________________________________________________________
Объем работы:
а) пояснительная записка к проекту _____________ с.
б) программы.
Рекомендуемая литература:_________________________________________
Срок выполнения проекта: с "___" ______по"___"____20__г.
Срок защиты: "___"____20__г.
Дата выдачи задания: "___"____20__г.
Дата сдачи проекта на кафедру: "___"____20__г.
Руководитель проекта _________________________________
(подпись, ф.и.о., звание, степень)
Задание принял студент _______________________________
(подпись, дата)
Государственное образовательное учреждение высшего профессионального образования
Кубанский государственный технологический университет
(КубГТУ)
Реферат
Пояснительная записка курсового проекта (работы) 33 с., 16 рис., 4 источника.
ОПРЕДЕЛЕННЫЙ ИНТЕГРАЛ, МЕТОД ПРЯМОУГОЛЬНИКОВ, МЕТОД КРИВОЛИНЕЙНЫХ ТРАПЕЦИЙ, МЕТОД СИМПСОНА (ПАРАБОЛ), ПОСТРОЕНИЕ ГРАФИКА.
Объектом исследования является численное интегрирование с применением языка C# и применение принципов объектно-ориентированного программирования.
Цель работы состоит в разработке программы на языке C# демонстрирующей интегрирование различными методами и получении результатов.
К полученным результатам относятся построенный график функции с отображенными пределами интегрирования, численные значения интеграла, вычисленного разными способами, определенные погрешности вычислений.
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
1 Спецификации задачи 6
2 Формулировка задачи 7
3 Описание методов вычислительной математики, используемых при решении 8
3.1 Численное интегрирование 8
3.1.1 Метод прямоугольников 8
3.1.2 Математический вывод формулы метода прямоугольников 10
3.1.3 Метод криволинейных трапеций 12
3.2 Метод Симпсона (парабол) 12
4 Описание методов программирования, примененных в работе 16
4.1 Среда разработки и организация решения 16
4.2 Проект библиотеки классов «IntegralClassLibrary» 16
4.3 Проект «Курсовая работа по ООП» 17
5 Листинги программы 19
5.1 Листинг файла «Integrals.cs» 19
5.2 Листинг файла «MainForm.cs» 21
6 Описание программы 27
7 Результаты тестирования программы 30
8 Заключение 31
Нормативные ссылки
Список используемой литературы
ВВЕДЕНИЕ
Цель курсовой работы является приобретение и углубление знаний в области высокоуровневых методов информатики и программирования, получения дополнительных практических навыков в использовании основных приёмов обработки экспериментальных данных, численного решения определенных интегралов.
Численное интегральное исчисление – часто используемая тема в математике. При решении ряда актуальных физических и технических задач встречаются определенные интегралы от функций, первообразные которых не выражаются через элементарные функции. Кроме того, в приложениях приходится иметь дело с определенными интегралами, сами подынтегральные функции которых не являются элементарными. Это приводит к необходимости использования приближенных методов вычисления определенных интегралов.
1 Спецификации задачи
Разрабатываемая программа должна обладать следующими качествами:
Производить интегрирование заданной функции методом прямоугольников, трапеций, парабол на основе входных данных и выводить результат;
Иметь графический интерфейс, позволяющий вводить исходные данные, а также визуализировать результаты вычислений, выводя на экран график подынтегральной функции, значения вычисленных интегралов и погрешности их вычислений.
При написании исходных текстов программы необходимым условием является использование основных принципов объектно-ориентированного программирования, обработки исключительных ситуаций, потоков выполнения, наличие подключаемых библиотек.
2Формулировка задачи
Данная курсовая работа посвящена разработке программы на языке C#, которая вычисляет определенный интеграл от функции, имеющей первообразную, которую можно вычислить с помощью той или иной приближенной формулы. Для решения этой задачи применяются методы прямоугольников, трапеций и парабол (Симпсона).
Задача курсового проекта – разработать программу на языке C#, такую, чтобы при работе с этой программой пользователь имел возможность:
a) Найти определенный интеграл выше упомянутыми методами от следующей функции:
б) ввести с клавиатуры пределы интегрирования и количество интервалов разбиения (a, b и n);
в) увидеть результаты вычислений на экране в удобном для восприятия виде с отображением графика функции, на введенном с клавиатуры отрезке.
При помощи данной программы нетрудно будет сравнить результаты вычислений одного и того же определенного интеграла найденные разными методами.
Программа должна отвечать следующим требованиям:
a) иметь простой интерфейс;
б) иметь защиту от некорректно введенных данных.
Актуальность реализации программы на компьютере заключается в простом использовании и возможности доработки дизайна и программного кода.
3Описание методов вычислительной математики, используемых при решении
3.1Численное интегрирование
Определенный интеграл
-
(1)
с пределами интегрирования a и b можно трактовать как площадь фигуры, ограниченной ординатами a и b, осью абсцисс x и графиком подынтегральной функции
На практике часто встречаются интегралы, которые не выражаются через элементарные функции или выражаются очень сложно. Нередко подынтегральная функция задается таблицей или графиком. В этих случаях интегралы находятся приближенными методами, которые заключаются в интерполяции
3.1.1Метод прямоугольников
Промежуток интегрирования
Для единообразия полагаем
Формулой прямоугольников называются следующие приближенные равенства:
| (2) |
| (3) |
| (4) |
Выражения (2), (3), (4) дают площади ступенчатых фигур, изображенных на рисунках 1, 2, 3 соответственно. В большинстве случаев при данном n формула (4) точнее, чем (2) и (3). С увеличением n точность формул (2), (3), (4) неограниченно возрастает.
Предельная погрешность формулы (4) составляет:
где
Рисунок 1 – Ступенчатая фигура, полученная по методу левых прямоугольников
Рисунок 2 – Ступенчатая фигура, полученная по методу правых прямоугольников
Рисунок 3 – Ступенчатая фигура, полученная по методу средних прямоугольников
Формула (4) наиболее точная, и погрешность по сравнению с формулами (2) и (3) уменьшается в приблизительно 50 раз. Отметим, что для линейной функции
3.1.2Математический вывод формулы метода прямоугольников
Пусть на отрезке
Рисунок 4 – Ступенчатая фигура, состоящая из элементарных прямоугольников
Разобьем основание этой трапеции, т.е. отрезок
В середине
Тогда сумма площадей всех n прямоугольников дает площадь ступенчатой фигуры, представляющую собой приближенное значение искомого определенного интеграла
| (5) |
Рисунок 5 – Блок-схема к алгоритму решения определенных интегралов по методу прямоугольников
3.1.3Метод криволинейных трапеций
Формула трапеций выводится аналогично формуле прямоугольников: на каждом частичном отрезке криволинейная трапеция заменяется обычной.
Рисунок 6 – Криволинейная фигура, полученная по методу криволинейных трапеций
Разобьем промежуток
Заменим кривую
или | (6) |
| (7) |
Абсолютная погрешность
3.2Метод Симпсона (парабол)
Если заменить график функции
Предварительно найдем площадь S криволинейной трапеции, ограниченной сверху графиком параболы
Рисунок 7 – Криволинейная фигура, ограниченная по сторонам прямыми
Пусть парабола проходит через три точки
Площадь криволинейной фигуры, показанной на рисунке 7 равна
| (8) |
Выразим эту площадь через
Подставляя эти значения c и a в равенство (8), получаем
| (9) |
Получим теперь формулу парабол для вычисления интеграла
Для этого отрезок
Рисунок 8 – Криволинейная фигура, полученная по методу Симпсона (парабол)
Заменяем каждую пару соседних элементарных криволинейных трапеций с основаниями, равным h, одной элементарной параболической трапецией с основанием, равным 2h. На отрезке
Аналогично находим
Сложив полученные равенства, имеем
или
| (10) |
Формула (10) называется формулой Симпсона (парабол). Абсолютная погрешность вычисления по формуле (10) оценивается соотношением
Отметим, что формула (9) дает точное значение интеграла
Рисунок 9 – Блок-схема к алгоритму решения определенных интегралов по методу Симпсона (парабол)
4Описание методов программирования, примененных в работе
4.1Среда разработки и организация решения
Курсовая работа выполнена в интегрированной среде программирования MS Visual Studio 2008.
Решение состоит из 2-х проектов:
IntegralClassLibrary;
Курсовая работа по ООП.
4.2Проект библиотеки классов «IntegralClassLibrary»
Проект включает в себя файл «Integrals.cs», в котором определены классы, содержащие методы для осуществления вычислений и свойства для получения результатов расчетов и погрешностей. Этот проект представляет собой библиотеку классов, после компиляции, которой образуется файл «IntegralClassLibrary.dll». Данный файл должен находиться в одной папке с запускаемым файлом программы.
В рамках библиотеки разработана иерархия классов с наследованием.
Базовым классом определен абстрактный класс Integral, в котором объявлены и реализованы все поля, свойства и методы общие для всех классов-наследников.
Рисунок 10 – Схема класса Integral
Accuracy – Свойство для получения погрешности интегрирования;
Square – Свойство для получения вычисленного значения интеграла;
Exact_value( ) – статический метод вычисления точного значения интеграла на основе аналитической формулы;
F( ) – статический метод для вычисления значения функции;
Integral(double a, double b, int n) – конструктор класса, в котором инициализируются поля и вызывается метод Solve( );
Solve( ) – абстрактный метод определяющий общий интерфейс для всех потомков класса, определяется в наследниках содержит алгоритм вычисления уникальный для каждого метода вычисляющего интеграл;
ToString( ) – возвращает текстовую строку, с результатами.
Базовый класс Integral порождает наследников, в которых реализуется абстрактный метод Solve( ), и передаются параметры вычислений конструктору базового класса.
Рисунок 11 – Схема реализации наследования от класса Integral
Каждый класс-наследник содержит конструктор, совпадающий с именем своего класса, а также реализует уже описанный метод Solve( ).
Таким образом, весь код логически общий для всех классов-наследников помещен в базовый класс Integral при помощи механизма наследования.
Реализация вычислений скрыта от пользователей классов Trapezoids, Rectangles, Simpsons, благодаря механизму инкапсуляции.
Полиморфизм проявляется при вызове метода Solve( ) имеющего разные реализации в каждом классе-наследнике. Данный метод не вызывается напрямую пользователем класса, вызов происходит в конструкторе каждого класса. Все три класса имеют одинаковый интерфейс для получения результатов вычисления.
4.3Проект «Курсовая работа по ООП»
Второй проект состоит из файлов:
«MainForm.cs», в котором определен класс главного окна приложения, а также методы и события, отвечающие за взаимодействие разных частей программы;
«SettingsForm.cs» – в файле определен класс окна настроек отображения графики;
«AboutBox.cs» – файл содержит класс окна «О программе».
Обязательным условием успешного построения проекта является соблюдение зависимостей, а именно наличие ссылок на библиотеки DLL: IntegralClassLibrary.dll и ZedGraph.dll. Первая, из которых разрабатывается в рамках первого рассмотренного проекта библиотеки «IntegralClassLibrary». Вторая представляет собой сторонний элемент управления не входящий в комплект поставки MS VS 2008, содержит классы позволяющие выводить графику в пространство указанного компонента, который в свою очередь располагается на главной форме приложения. Файл ZedGraph.dll должен находиться в папке с программой.
5Листинги программы
5.1Листинг файла «Integrals.cs»
using System;
namespace Patsev.Integrals
{
public abstract class Integral //базовый класс
{
public Integral(double a, double b, int n)
{
this.a = a; this.b = b; this.n = n;
//вычисление интеграла
Solve();
//вычисление погрешности
accuracy = Math.Abs(Exact_value(a, b) - square);
}
public static double F(double x) //возвращает значение подинтегральной функции
{
return 1 / Math.Sqrt(1 + x * x);
}
protected static double Exact_value(double a, double b) //точное значение определенного интеграла
{
return Math.Log(Math.Abs(b + Math.Sqrt(1 + b * b))) -
Math.Log(Math.Abs(a + Math.Sqrt(1 + a * a)));
}
abstract protected void Solve(); //{ } //метод, содержащий алгоритм вычислений
public double Square //значение интеграла
{
get
{
return square;
}
}
public double Accuracy //погрешность вычислений
{
get
{
return accuracy;
}
}
public static volatile bool Killed; //Позволяет остановить цикл вычислений
public static bool operator <(Integral x1, Integral x2)
{
if (x1.accuracy < x2.accuracy) return true;
return false;
}
public static bool operator >(Integral x1, Integral x2)
{
if (x1.accuracy > x2.accuracy) return true;
return false;
}
public override string ToString()
{
//return base.ToString();
string s;
if (Killed) return "";
s = Square.ToString() + " / " + Accuracy.ToString();
return s;
}
protected double square, accuracy, a, b;
protected int n;
}
public sealed class Rectangles : Integral //метод прямоугольников
{
public Rectangles(double a, double b, int n) : base(a, b, n){ }
override protected void Solve()
{
double yn = 0, y0, x0 = a, Delta = (b - a) / n;
for (int i = 0; i < n; i++, yn += y0, x0 += Delta)
{
if (Killed) { square = -1; return; }
y0 = F((2 * x0 + Delta) / 2);
}
square = yn * Delta;
}
}
public sealed class Trapezoids : Integral //метод трапеций
{
public Trapezoids(double a, double b, int n) : base(a, b, n){ }
override protected void Solve()
{
double yn = 0, y0, Delta = (b - a) / n, x0 = a + Delta;
for (int i = 1; i < n; i++, yn += y0, x0 += Delta)
{
if (Killed) { square = -1; return; }
y0 = F(x0);
}
square = Delta * ((F(a) + F(b)) / 2 + yn);
}
}
public sealed class Simpsons : Integral //метод парабол
{
public Simpsons(double a, double b, int n) : base(a, b, n) { }
override protected void Solve()
{
double yn1 = 0, yn2 = 0, y0, Delta = (b - a) / n, x0 = a + Delta;
for (int i = 1; i < n; i += 2, yn1 += y0, x0 += 2 * Delta)
{
if (Killed == true) { square = -1; return; }
y0 = F(x0);
}
x0 = a + 2 * Delta;
for (int i = 2; i < n - 1; i += 2, yn2 += y0, x0 += 2 * Delta)
{
if (Killed == true) { square = -1; return; }
y0 = F(x0);
}
square = (b - a) / 3 / n * (F(a) + F(b) + 4 * yn1 + 2 * yn2);
}
}
}
5.2Листинг файла «MainForm.cs»
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using Курсовая_работа_по_ООП;
using ZedGraph;
using Patsev.Integrals;
namespace Курсовая_работа_по_ООП
{
public partial class MainForm : Form
{
public int PointsQuantity { get; set; }
public int PointsSize { get; set; }
public Single LineWidth { get; set; }
double x1 { get; set; }
double x2 { get; set; }
int n { get; set; }
string strMethodRectangles, strTrapezoids, strSimpsons; //Строки для хранения результатов
string strCalcStatus; //информационная строка
public MainForm()
{
InitializeComponent();
}
private void DisambleButtons()
{
StartBtn.Enabled = false;
SettingsBtn.Enabled = false;
txtBoxX1.Enabled = false;
txtBoxX2.Enabled = false;
txtBoxN.Enabled = false;
strMethodRectangles = "";
strTrapezoids = "";
strSimpsons = "";
strCalcStatus = "Вычисление...\nНажмите 'x'\n для отмены.";
DrawGraph();
}
private void EnableButtons(object sender, RunWorkerCompletedEventArgs e)
{
StartBtn.Enabled = true;
SettingsBtn.Enabled = true;
txtBoxX1.Enabled = true;
txtBoxX2.Enabled = true;
txtBoxN.Enabled = true;
strCalcStatus = "";
DrawGraph();
}
private void Integration(object sender, DoWorkEventArgs e)
{
Integral myIntegral;
Patsev.Integrals.Integral.Killed = false;
myIntegral = new Patsev.Integrals.Rectangles(x1, x2, n);
strMethodRectangles = myIntegral.ToString();
myIntegral = new Patsev.Integrals.Trapezoids(x1, x2, n);
strTrapezoids = myIntegral.ToString();
myIntegral = new Patsev.Integrals.Simpsons(x1, x2, n);
strSimpsons = myIntegral.ToString();
}//интегрирование
private void DrawGraph() //вывод графика функции
{
// Получим панель для рисования
GraphPane pane = zedGraph.GraphPane;
// Очистим список текстов и кривых на тот случай, если до этого сигналы уже были нарисованы
pane.CurveList.Clear();
pane.GraphObjList.Clear();
// Печать заголовка
TextObj headline = new TextObj("Значение интеграла / Погрешность", 0.27F, 0.04F);
headline.FontSpec.FontColor = Color.DarkBlue;
headline.FontSpec.IsBold = true;
headline.FontSpec.Size = 8;
headline.FontSpec.IsAntiAlias = true;
// Disable the border and background fill options for the text
headline.FontSpec.Border.IsVisible = false;
headline.FontSpec.Fill.IsVisible = false;
headline.FontSpec.IsUnderline = true;
// Align the text such the the Left-Bottom corner is at the specified coordinates
// use AxisFraction coordinates so the text is placed relative to the ChartRect
headline.Location.CoordinateFrame = CoordType.ChartFraction;
headline.Location.AlignH = AlignH.Left;
headline.Location.AlignV = AlignV.Bottom;
pane.GraphObjList.Add(headline);
//Печать подписей к результатам
string textline = "Метод прямоугольников: \nМетод трапеций: \nМетод парабол:";
TextObj textresults = new TextObj(textline, 0.04F, 0.15F);
textresults.Location.CoordinateFrame = CoordType.ChartFraction;
textresults.FontSpec.Border.IsVisible = false;
textresults.FontSpec.Fill.IsVisible = false;
textresults.FontSpec.IsAntiAlias = true;
textresults.FontSpec.Size = 8;
textresults.Location.AlignH = AlignH.Left;
textresults.Location.AlignV = AlignV.Bottom;
textresults.FontSpec.StringAlignment = StringAlignment.Near;
pane.GraphObjList.Add(textresults);
//Печать результатов
string strresults = strMethodRectangles + "\n" + strTrapezoids + "\n" + strSimpsons;
TextObj results = new TextObj(strresults, 0.27F, 0.15F);
results.Location.CoordinateFrame = CoordType.ChartFraction;
results.FontSpec.FontColor = Color.DarkGreen;
results.FontSpec.Border.IsVisible = false;
results.FontSpec.Fill.IsVisible = false;
results.FontSpec.IsAntiAlias = true;
results.FontSpec.Size = 8;
results.Location.AlignH = AlignH.Left;
results.Location.AlignV = AlignV.Bottom;
results.FontSpec.StringAlignment = StringAlignment.Near;
pane.GraphObjList.Add(results);
//Печать надписи "Вычисление..."
TextObj txtCalc = new TextObj(strCalcStatus, 0.8F, 0.05F);
// use AxisFraction coordinates so the text is placed relative to the ChartRect
txtCalc.Location.CoordinateFrame = CoordType.ChartFraction;
// rotate the text 15 degrees
txtCalc.FontSpec.Angle = -45.0F;
// Text will be red, bold, and 16 point
txtCalc.FontSpec.FontColor = Color.Red;
txtCalc.FontSpec.IsBold = true;
txtCalc.FontSpec.Size = 16;
// Disable the border and background fill options for the text
txtCalc.FontSpec.Border.IsVisible = false;
txtCalc.FontSpec.Fill.IsVisible = false;
// Align the text such the the Left-Bottom corner is at the specified coordinates
txtCalc.Location.AlignH = AlignH.Left;
txtCalc.Location.AlignV = AlignV.Bottom;
pane.GraphObjList.Add(txtCalc);
//Вывод графика:
// Создадим список точек
PointPairList list = new PointPairList();
PointPairList plist = new PointPairList();
double xmin = x1;
double xmax = x2;
// Заполняем список точек
plist.Add(xmin, Integral.F(xmin));
double xp = Math.Max(Math.Abs(xmin) , Math.Abs(xmax));
double dx = 2 * xp * 1.2 / this.PointsQuantity;
for (double x = -xp * 1.2; x <= xp * 1.2; x += dx)
{
// добавим в список точку
list.Add(x, Integral.F(x));
if (x >= xmin && x <= xmax)
plist.Add(x, Integral.F(x));
}
plist.Add(xmax, Integral.F(xmax));
// Set the titles and axis labels
pane.Title.Text = "Интегрируемая функция f(x) = Sqrt(1 + x^2)";
pane.XAxis.Title.Text = "X";
pane.YAxis.Title.Text = "Y";
// Hide the legend
pane.Legend.IsVisible = false;
// Add a curve
LineItem curve = pane.AddCurve("label", list, Color.Red, SymbolType.Circle);
curve.Line.IsSmooth = true;
curve.Line.Width = this.LineWidth;
curve.Symbol.Fill = new Fill(Color.White);
curve.Symbol.Size = this.PointsSize;
// Fill the area under the curves
LineItem pcurve = pane.AddCurve("", plist, Color.Blue, SymbolType.None);
pcurve.Line.IsSmooth = true;
pcurve.Line.Fill = new Fill(Color.White, Color.Blue, 95.0F);
// Fill the axis background with a gradient
pane.Chart.Fill = new Fill(Color.White, Color.SteelBlue, 90.0F);
// Включим отображение сетки
pane.XAxis.MajorGrid.IsVisible = true;
pane.YAxis.MajorGrid.IsVisible = true;
/* Вызываем метод AxisChange (), чтобы обновить данные об осях.
В противном случае на рисунке будет показана только часть графика, которая умещается в интервалы по осям, установленные по умолчанию*/
zedGraph.AxisChange();
// Обновляем график
zedGraph.Invalidate();
}//прорисовка графика
private void ExitBtn_Click(object sender, EventArgs e)
{
Close();
}
private void AboutBtn_Click(object sender, EventArgs e)
{
AboutBox frmAbout = new AboutBox();
frmAbout.ShowDialog();
}
private void StartBtn_Click(object sender, EventArgs e)//запуск потоков вычислений
{
//проверка корректности вводимых значений
try
{
try
{
x1 = Convert.ToDouble(txtBoxX1.Text);
}
catch
{
txtBoxX1.Focus();
txtBoxX1.SelectAll();
throw new Exception("Ошибка при вводе x1");
}
try
{
x2 = Convert.ToDouble(txtBoxX2.Text);
}
catch
{
txtBoxX2.Focus();
txtBoxX2.SelectAll();
throw new Exception("Ошибка при вводе x2");
}
try
{
n = Convert.ToInt32(txtBoxN.Text);
}
catch
{
txtBoxN.Focus();
txtBoxN.SelectAll();
throw new Exception("Ошибка при вводе n");
}
DisambleButtons();
BackgroundWorker bw = new BackgroundWorker();
bw.WorkerSupportsCancellation = true;
bw.DoWork += Integration;
bw.RunWorkerCompleted += EnableButtons;
bw.RunWorkerAsync(null);
}
catch (Exception myexcepton)
{
MessageBox.Show(myexcepton.Message, "Ошибка ввода данных.");
}
}
private void zedGraph_DoubleClick(object sender, EventArgs e)
{
zedGraph.GraphPane.CurveList.Clear();
zedGraph.GraphPane.GraphObjList.Clear();
zedGraph.Invalidate();
}
private void MainForm_Shown(object sender, EventArgs e)
{
x1 = Convert.ToDouble(txtBoxX1.Text);
x2 = Convert.ToDouble(txtBoxX2.Text);
n = Convert.ToInt32(txtBoxN.Text);
DrawGraph();
}
private void SettingsBtn_Click(object sender, EventArgs e) //изменение настроек графика
{
SettingsForm SettingsFrm = new SettingsForm();
SettingsFrm.txtPointsQuantity = this.PointsQuantity.ToString();
SettingsFrm.txtPointsSize = this.PointsSize.ToString();
SettingsFrm.txtLineWidth = this.LineWidth.ToString();
if (SettingsFrm.ShowDialog() == DialogResult.OK)
{
try
{
try
{
this.PointsQuantity = Convert.ToInt32(SettingsFrm.txtPointsQuantity);
}
catch
{
throw new Exception("Ошибка при вводе количества точек на графике");
}
try
{
this.PointsSize = Convert.ToInt32(SettingsFrm.txtPointsSize);
}
catch
{
throw new Exception("Ошибка при вводе размера точек");
}
try
{
this.LineWidth = Convert.ToSingle(SettingsFrm.txtLineWidth);
}
catch
{
throw new Exception("Ошибка при вводе толщины линии");
}
DrawGraph();
}
catch (Exception myexcepton)
{
MessageBox.Show(myexcepton.Message + "\nОшибочные изменения не будут произведены."
, "Ошибка ввода данных.");
}
}
}
private void MainForm_KeyPress(object sender, KeyPressEventArgs e)
{
if (e.KeyChar == 120 || e.KeyChar == 1095) //отмена вычислений при нажатии 'x'
{
Patsev.Integrals.Integral.Killed = true;
strMethodRectangles = "";
strTrapezoids = "";
strSimpsons = "";
}
}
}
}
6Описание программы
При запуске программы на экран выводится главное окно программы с отображенными и доступными элементами управления (см. рисунок 12). Текстовые поля исходных данных заполнены значениями по умолчанию, которые можно изменить.
Рисунок 12 – Главное окно программы после запуска
После нажатия кнопки «Расчет» организуется поток выполнения вычислений, при длительных расчетах вычисления можно остановить, нажав клавишу, ‘x’ на клавиатуре (рисунок 13). Во время расчетов программа продолжает реагировать на действия пользователя, возможно минимизировать главное окно, изменить его размер, открыть окно «О программе» (рисунок 14), изменить ориентацию и масштаб графика, а также закрыть программу нажав кнопку «Выход». После проведения расчетов результаты отображаются в левом верхнем углу графика (рисунок 15). Программа допускает изменение отображения графика функции, соответствующие настройки можно изменить при нажатии кнопки «Настройки» (рисунок 16).
Рисунок 13 – Главное окно программы в процессе вычисления интегралов
Рисунок 14 – Окно «О программе»
Рисунок 15 – Главное окно программы после проведения расчетов
Рисунок 16 – Окно «настройки»
7Результаты тестирования программы
Согласно вычисленным результатам приведенным на рисунке 15, разработанная программа выполняет заданный расчет с достаточной точностью. Результат согласуется с расчетами, проведенными вручную или при применении математических пакетов. Согласно приведенным результатам наибольшая точность вычислений достигается при интегрировании методом парабол, наибольшая погрешность наблюдается при интегрировании методом прямоугольников.
В результате тестирования установлено, что разработанная программа отвечает всем основным требованиям, заложенным в поставленную задачу, а именно:
Имеет простой, интуитивно понятный интерфейс пользователя;
Визуализирует вычисления, показывает область интегрирования;
Изменение некоторых параметров прорисовки графика;
Устойчива к вводу некорректных данных;
Позволяет корректно останавливать затяжные вычисления;
Имеется возможность сохранять результаты работы в графической форме;
8Заключение
Итогом данной курсовой работы является программа, реализованная на языке C#, с помощью которой вычисляются определенный интеграл на заданном пользователем отрезке [a, b], разбитом на n равных частей с наглядным графиком функции от которой считается определенный интеграл, построенной на этом отрезке [a, b].
В качестве перспектив развития данной программы можно отметить такие нереализованные возможности как самостоятельный ввод пользователем нужной ему функции, расширение списка методов вычисления определенных интегралов, а так же визуальное улучшение интерфейса программы.
Нормативные ссылки
ГОСТ 2.105-95 ЕСКД. Общие требования к текстовым документам
ГОСТ 2.301-68 ЕСКД. Форматы
ГОСТ 7.1-2003.
Р 50-77-88 Рекомендации. ЕСКД. Правила выполнения диаграмм
Список используемой литературы
Павловская
Ильин В.А., Позняк Э.Г. Основы математического анализа. Часть I. Учебник для физических специальностей и др. Изд. 4.– М.: Наука. Главная редакция физ-мат литературы. 1982, 616 с.
Пискунов Н.С. Дифференциальное и интегральное исчисление. – М.: Наука, 1978-1980, т.т.1, 2
Ильин В. А., Поздняк Э. Г. Основы математического анализа. — М.: Дрофа, 2001.