Методы и средства объектно-ориентированного программирования

Разработка программы для решения уравнений с n-ым количеством неизвестных и нахождения площади геометрических фигур заданных этими уравнениями. Использование численного метода решения нелинейных уравнений и метода вычисления определенного интеграла.

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

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

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

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

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

ПЕНЗЕНСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ

Кафедра « Автоматика и телемеханика»

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

По дисциплине « Программирование и основы алгоритмизации»

на тему «Методы и средства объектно-ориентированного программирования»

Выполнил студент: Жаркова А.В.

Группа: 16ПН1

Руководитель: к.т.н.. доцент Берестень М.П.

2017

Оглавление

Введение

1. Описание метода решения

2. Схема алгоритма

3. Описание программы

3.1 Общие сведения

3.2 Функциональное назначение

3.3 Описание логической структуры

3.4 Вызов и загрузка

3.5 Входные и выходные данные

4. Описание применения

Заключение

Список использованных источников

Приложение А

Приложение Б

Введение

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

Вычислительные (численные) методы -- методы решения математических задач в численном виде.

Представление как исходных данных в задаче, так и её решения -- в виде числа или набора чисел.

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

В курсовой работе разрабатывалась программа для решения уравнений с n-ым количеством неизвестных; нахождения площади геометрических фигур заданных этими уравнениями и их построения.

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

1. Описание метода решения

программа уравнение численный интеграл

Нахождение площади фигуры проводится в несколько этапов.

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

Для функций:

y=k1ex

y = k2

Выберем следующие значение: k1 = 2, k2 = 1, k3 =3

Построим график данных функции (воспользуемся интернет ресурсом www.yotx.com):

Рисунок 1.1 График функций

По графику найдем начальные приближения:

- точка пересечения графиков y=2ex и y = 1 принадлежит интервалу

[-1; -0.5]

- точка пересечения графиков y=2ex и принадлежит интервалу

[0; 0.3]

- точка пересечения графиков и y = 1 принадлежит интервалу

[0; 0.5]

Шаг 2. Нахождение точек пересечения функций.

Рассмотрим задачу нахождения корней нелинейного уравнения

f(x)=0 (1)

Корнями уравнения (1) называются такие значения х, которые при подстановке обращают его в тождество. Только для простейших уравнений удается найти решение в виде формул. Чаще приходится решать уравнения приближенными методами, наибольшее распространение среди которых, численные методы.

Алгоритм нахождения корней приближенными методами можно разбить на два этапа. На первом изучается расположение корней и проводится их разделение. Находится область [a, b], в которой существует корень уравнения или начальное приближение к корню x0. Простейший способ решения этой задачи является исследование графика функции f(x). В общем же случае для её решения необходимо привлекать все средства математического анализа.

Существование на найденном отрезке [a, b], по крайней мере, одного корня уравнения (1) следует из условия Больцано:

f(a)*f(b)<0 (2)

При этом подразумевается, что функция f(x) непрерывна на данном отрезке. Однако данное условие не отвечает на вопрос о количестве корней уравнения на заданном отрезке [a,b]. Если же требование непрерывности функции дополнить ещё требованием её монотонности, а это следует из знакопостоянства первой производной , то можно утверждать о существовании единственного корня на заданном отрезке. При локализации корней важно так же знание свойств данного типа уравнения. К примеру, напомним, некоторые свойства алгебраических уравнений:

, (3)

где вещественные коэффициенты.

а) Уравнение степени n имеет n корней, среди которых могут быть как вещественные, так и комплексные. Комплексные корни образуют комплексно-сопряженные пары и уравнение имеет четное число таких корней. При нечетном значении n имеется, по меньшей мере, один вещественный корень.

б) Число положительных вещественных корней меньше или равно числа переменных знаков в последовательности коэффициентов . Замена х на - х в уравнении (3) позволяет таким же способом оценить число отрицательных корней.

На втором этапе решения уравнения (1), используя полученное начальное приближение, строится итерационный процесс, позволяющий уточнять значение корня с некоторой, наперед заданной точностью . Итерационный процесс состоит в последовательном уточнении начального приближения. Каждый такой шаг называется итерацией. В результате процесса итерации находится последовательность приближенных значений корней уравнения . Если эта последовательность с ростом n приближается к истинному значению корня x, то итерационный процесс сходится. Говорят, что итерационный процесс сходится, по меньшей мере, с порядком m, если выполнено условие:

, (4)

где С > 0 некоторая константа. Если m = 1, то говорят о сходимости первого порядка ; m = 2 - о квадратичной, m = 3 - о кубической сходимостях.

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

; , (5,6)

или малости невязки:

, (7)

Шаг 3. Вычисление площади геометрической фигуры

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

Разобьем отрезок [a ; b] на n равных интервалов длины h , точками

. В этом случае шаг разбиения находим как

h =(b-a) / n и узлы определяем из равенства .

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

2. Описание алгоритма

Алгоритм основной программы приведен на рисунке А1 (Приложение А).

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

Затем по найденным точкам пересечения становится возможным вычислить площадь фигуры, заданной графиками функций, используя подпрограмму trap. Сначала вычисляется площадь ограниченная y=2ex и y = 1 до точки пересечения графика y=2ex с графиком , потом от этой точки вычисляется площадь фигуры ограниченная и y = 1. Затем эти значения суммируются, что и будет соответствовать площади ограниченной 3-мя функциями. Алгоритм работы подпрограммы trap приведен в рисунке А3(Приложение А).

3. Описание программы

3.1 Общие сведения

Разработанная программа имеет название CalcSquare. Программа написана на языке Object-Pascal в среде Delphi версии 7.0. Текст содержится в файле Unit1.pas и приведён в приложении Б.

3.2 Функциональное назначение

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

3.3 Описание логической структуры

В программе можно выделить блоки, выполняющие следующие действия:

- ввод ограничений;

-вызов подпрограммы CalcNewton для нахождения точек пересечения графиков

- вызов подпрограммы trap для нахождения площади фигуры

- построение графиков функций;

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

Подпрограммы trap содержат цикл в котором вычисляется площадь функций на заданном отрезке (в нашем случает отрезков найденных с помощью подпрограммы CalcNewton).

3.4 Вызов и загрузка

Для вызова программы на выполнение необходимо перейти в каталог, в котором расположен файл CalcSquare.exe, и запустить его на выполнение.

3.5 Входные и выходные данные

Входными данными являются значения точность вычислений и количество интервалов разбиения.

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

4. Описание применения

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

Программа предназначена для выполнения на персональных компьютерах типа IBM PC стандартной комплектации.

Размер файла с исполняемым модулем программы составляет 551 Кбайт.

Порядок работы с программой:

- запустить CalcSquare.exe

- если необходимо, изменить точность вычислений

Рисунок 4.1 окно программы

- нажмите кнопку «Найти площадь». Поиск корней может занять некоторое время.

Рисунок 4.1 результат работы программы

Обработка ошибок:

Рисунок 4.3 обработка ошибок

Рисунок 4.4 обработка ошибок

Заключение

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

Все требования, предъявляемые к данной программе, были выполнены.

Были решены следующие задачи:

1.Изучена необходимая литература.

2.Обзорно рассмотрены существующие методы по решению нелинейных уравнений.

3.Изучен метод ньютона для решения нелинейных уравнений.

4.Изучен метод трапеций для нахождения площади фигуры

5.Проведены тестирование и отладка программы.

Список использованных источников

1. В.М. Вержбицкий. Численные методы (линейная алгебра и нелинейные уравнения). Москва, «Высшая школа»; 2000.

2. Н.С. Бахвалов, А.В. Лапин, Е.В. Чижонков. Численные методы в задачах и упражнениях. Москва, «Высшая школа»; 2000.

Приложение А

(обязательное)

Схема программы

Рисунок А.1 блок-схема

Рисунок А.2 блок-схема trap

Рисунок А.3 блок-схема CalcNewton

Приложение Б

(обязательное)

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

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, TeEngine, Series, ExtCtrls, TeeProcs, Chart, BubbleCh;

const

k1 = 2;

k2 = 1;

k3 = 3;

type

tFunc = function (x: real): real;

TFunctCalc = class

f1, f2: tFunc;

public

constructor Create(_f1,_f2: tFunc);

function Calc(x: Real): real;

end;

TForm1 = class(TForm)

Button1: TButton;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

edE: TEdit;

Label6: TLabel;

edN: TEdit;

Label7: TLabel;

Chart1: TChart;

Series1: TFastLineSeries;

Series2: TFastLineSeries;

Series3: TFastLineSeries;

procedure Button1Click(Sender: TObject);

procedure edEKeyPress(Sender: TObject; var Key: Char);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

e: Double;

N: integer;

implementation

{$R *.dfm}

function f1(x:real): Real;

begin

Result:= k1 * exp(x);

end;

// первая производная

function f2(x:Real): Real;

begin

Result:= k1 * exp(x);

end;

// вторая производная

function f3(x:Real): Real;

begin

Result:= k1 * exp(x);

end;

function ff1(x: Real): Real;

begin

Result:= k2;

end;

function ff2(x: Real): Real;

begin

Result:= 0;

end;

function fff1(x: Real): Real;

begin

if (x = 0) then Result:= 0

else Result:= 1/(k3*x);

end;

function fff2(x: Real): Real;

begin

if (x = 0) then Result:= e

else Result:= - 1/(k3*sqr(x));

end;

function fff3(x: real): Real;

begin

if (x = 0) then Result:= e

else Result:= 2/(k3*x*x*x)

end;

//метод ньютона для решения системы нелинейных ур-ий

// [a, b] - интервал на котором ищем корни

// funct - основная функция, func1 - первая производная, func2 - вторая производная

function CalcNewton(fun, fun1, fun2: TFunctCalc; a, b: real): Real;

var

x1,x2:real;

begin

repeat

if fun1.Calc(a)*fun2.Calc(a)>0 then

begin

x1:=a-(fun.Calc(a)*(b-a))/(fun.Calc(b)-fun.Calc(a));

x2:=x1-(fun.Calc(x1)*(b-x1)/(fun.Calc(B)-fun.Calc(x1)));

a:=x2;

end

else

begin

x1:=b-(fun.Calc(b)*(b-a))/(fun.Calc(b)-fun.Calc(a));

x2:=x1-fun.Calc(x1)*(x1-a)/(fun.Calc(x1)-fun.Calc(a));

b:=x2;

end;

until abs(x2-x1)<=e;

CalcNewton:= x2;

end;

// точка пересечения первой и второй функции

function OneTwoPoint: Real;

var func1, func2, func3: TFunctCalc;

a, b: real;

begin

//

a:= -1;

b:= -0.5;

func1:= TFunctCalc.Create(f1, ff1);

func2:= TFunctCalc.Create(f2, ff2);

func3:= TFunctCalc.Create(f3, ff2);

Result:= CalcNewton(func1, func2, func3,a,b);

end;

// точка пересечения первой и третьей функции

function OneThreePoint: Real;

var func1, func2, func3: TFunctCalc;

a, b: real;

begin

a:= e;

b:= 0.3;

func1:= TFunctCalc.Create(f1, fff1);

func2:= TFunctCalc.Create(f2, fff2);

func3:= TFunctCalc.Create(f3, fff2);

Result:= CalcNewton(func1, func2, func3,a,b);

end;

// точка пересечения второй и третьей функции

function TwoThreePoint: Real;

var func1, func2, func3: TFunctCalc;

a, b: real;

begin

//

a:= e;

b:= 0.5;

func1:= TFunctCalc.Create(ff1, fff1);

func2:= TFunctCalc.Create(ff2, fff2);

func3:= TFunctCalc.Create(ff2, fff2);

Result:= CalcNewton(func1, func2, func3,a,b);

end;

{ TFunctCalc }

function TFunctCalc.Calc(x: Real): Real;

begin

Result:= f1(x) - f2(x);

end;

constructor TFunctCalc.Create(_f1, _f2: tFunc);

begin

f1:= _f1;

f2:= _f2;

end;

// подсчет интеграла методом трапеций

function trap(f: TFunctCalc; a, b: real): Real;

// чем количество разбиений интервала значение больше - тем точнее результат

var i: integer;

S, h: Real;

begin

h:= abs(a-b)/n;

s:= 0;

for i:= 0 to n - 1 do

s:= S + f.Calc(a + h*i);

Result:= abs(h*( (f.Calc(a) + f.Calc(b))/2 + S));

end;

procedure TForm1.Button1Click(Sender: TObject);

var s1, s2,

i, x1, x2, x3: Real;

func, func2: TFunctCalc;

begin

if not (TryStrToFloat(edE.Text, e)) then

begin

ShowMessage('Некорректно введена точность');

edE.SetFocus;

Exit;

end;

if not (TryStrToInt(edN.Text, N)) then

begin

ShowMessage('Некорректно введено значение кол-ва итераций');

edN.SetFocus;

Exit;

end;

x1:= OneTwoPoint;

x2:= OneThreePoint;

x3:= TwoThreePoint;

func:= TFunctCalc.Create(ff1,f1);

s1:= trap(func, x1, x2);

func2:= TFunctCalc.Create(ff1,f3);

s2:= trap(func2, x2, x3);

Label7.Caption:= 'Площадь геометрической фигуры ровна ' + FloatToStr(S1 + S2) ;

i:= x1 - 1;

while i < (x3 + 1) do

begin

Series1.AddXY(i, f1(i), '');

Series2.AddXY(i, k2, '');

if i >= e then

Series3.AddXY(i, fff1(i), '');

i:= i + 0.001;

end;

end;

procedure TForm1.edEKeyPress(Sender: TObject; var Key: Char);

begin

if not (key in ['0'..'9',',',#8]) then key:= #0;

end;

end.

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

...

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

  • Метод хорд решения нелинейных уравнений. Вычисление интеграла методом Симпсона. Процесс численного решения уравнения. Окно программы расчета корней уравнения методом хорд. Алгоритм вычисления интеграла в виде блок-схемы. Выбор алгоритма для вычислений.

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

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

    курсовая работа [539,2 K], добавлен 15.06.2013

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

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

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

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

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

    курсовая работа [573,8 K], добавлен 17.03.2016

  • Особенности решения уравнений с одной переменной методом половинного деления. Оценка погрешности метода простой итерации. Суть решения уравнений в пакете Mathcad. Векторная запись нелинейных систем. Метод Ньютона решения систем нелинейных уравнений.

    курсовая работа [2,1 M], добавлен 12.12.2013

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

    курсовая работа [435,8 K], добавлен 15.06.2013

  • Разработка проекта по вычислению корней нелинейных уравнений методом итераций, в среде программирования Delphi. Интерфейс программы и ее программный код, визуализация метода. Сравнение результатов решения, полученных в Mathcad 14 и методом итераций.

    контрольная работа [1,9 M], добавлен 10.12.2010

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

    методичка [185,7 K], добавлен 18.12.2014

  • Итерационные методы решения нелинейных уравнений, системы линейных алгебраических уравнений (СЛАУ). Решение нелинейных уравнений методом интерполирования. Программная реализация итерационных методов решения СЛАУ. Практическое применение метода Эйлера.

    курсовая работа [1,6 M], добавлен 20.01.2010

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

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

  • Применение объектно-ориентированного программирования для написания нескольких модулей программы. Вычисление алгебраического уравнения методом половинного деления. Применение метода Эйлера в теории численных методов общих дифференциальных уравнений.

    курсовая работа [398,1 K], добавлен 26.02.2015

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

    реферат [95,0 K], добавлен 06.03.2011

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

    курсовая работа [1,0 M], добавлен 27.09.2014

  • Метод половинного деления как один из методов решения нелинейных уравнений, его основа на последовательном сужении интервала, содержащего единственный корень уравнения. Алгоритм решения задачи. Описание программы, структура входных и выходных данных.

    лабораторная работа [454,1 K], добавлен 09.11.2012

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

    курсовая работа [849,1 K], добавлен 15.06.2013

  • Автоматизация решения системы уравнения методом Гаусса (классического метода решения системы линейных алгебраических уравнений, остоящего в постепенном понижении порядка системы и исключении неизвестных) и решения уравнения методами хорд и Ньютона.

    курсовая работа [578,2 K], добавлен 10.02.2011

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

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

  • Математическое обоснование метода решения задачи: определенный интеграл, квадратурная формула Симпсона (формула парабол). Словесное описание алгоритма и составление его блок-схемы. Выбор языка программирования. Текст программы решения задачи, ее листинг.

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

  • Методы решения систем линейных алгебраических уравнений. Метод простых итераций и метод Зейделя. разработка программы для решения СЛАУ с произвольным количеством уравнений. Реализация методов Зейделя и простых итераций для получения вектора решений СЛАУ.

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

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