Методы и средства объектно-ориентированного программирования
Разработка программы для решения уравнений с 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