Программное обеспечение вычислений

Создание программ в Borland C++ Builder 6.0. Разработка программы для построения графика временной функции, работающей, как в машинном, так и в реальном времени. Использование алгоритма Горнера для вычисления корня квадратного и нелинейного уравнений.

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

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

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

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

1

Введение

Borland C++ Builder - выпущенное компанией Borland средство быстрой разработки приложений, позволяющее создавать приложения на языке C++, используя при этом среду разработки и библиотеку компонентов такую же, как в Delphi. Можно отметить ряд положительных аспектов разработки приложений в С++ Builder: удобство визуального конструирования приложений, развитые возможности доступных средств системы, эффективность генерируемого кода и другие.

Язык программирования C++ широко используется для разработки программного обеспечения. А именно, создание разнообразных прикладных программ, разработка операционных систем, драйверов устройств, а также видео игр и многих других программных продуктов. Помимо Borland C++ Builder существует ещё несколько реализаций языка программирования C++ -- как бесплатных, так и коммерческих. Их производят проекты: GNU, Microsoft и другие. Проект GNU -- проект разработки свободного программного обеспечения (СПО).

1. Постановка задачи

Составить схему алгоритма и программу для построения графика временной функции, работающую как в машинном, так и в реальном времени. Реальное время в диапазоне (t0 - tкон) формируется таймером в виде программного модуля с метками Тк, называемыми временем квантования. При вычислении функции использовать алгоритм Горнера.

Функция:

Z = | at4 + bt3 + ct2 + dt + k + m |,

где t0 = 0 с; tкон = 10 с; Tк = 0,5 с;

k - корень нелинейного уравнения x2 = sin5x, которое надо решить методом Ньютона с точностью , при начальном значении x0 = 0,58;

m - разность корней квадратного уравнения:

a1z2 + b1z + c1 = 0

при a1 = 1, b1 = 5, c1 = 6.

Коэффициенты:

a = 0, b = 1, d = |b-c|, c = sin 45o.

2. Методы расчета

2.1 Метод Ньютона

В основе метода лежит разложение функции в ряд Тейлора

. Для нахождения h используем ряд Тейлора:

График 1. Метод Ньютона

Из графика 1 видно, что при переходе от , и т.д. значение у=f(x) приближается к 0.

В ряде Тейлора члены с и выше отбросим и в итоге получается:

.

Можем записать следующее выражение:

и тогда рабочая (итерационная) формула будет иметь вид:

.

Эту же формулу можно получить другим способом.

Пусть имеем , корень уравнения х* находится на [a,b], при этом и сохраняют определённые знаки. Геометрически метод Ньютона эквивалентен замене некоторой дуге касательной, проведенной в некоторой точке кривой. Допустим, что >0 при .

-- уравнение касательной. Согласно задаче примем y=0, , и тогда рабочая формула будет иметь вид:

.

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

Алгоритм нахождения корня:

1) Выбираем .

2) -- нахождение последовательного приближения корня.

3) Счёт заканчивается, когда выполняется условие .

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

Блок-схема 1. Метод Ньютона

2.2 Метод простых итераций

Суть метода заключается в следующем: исходное уравнение заменяем эквивалентным . Выбрав начальное приближение , будем последовательно производить вычисления:

и продолжать будем до тех пор пока .

В данном методе очень важно выбрать начальное приближение . Если это будет сделано не верно, то итерационный процесс будет расходящимся, т.е. с каждой итераций мы не приближаемся к корню, а наоборот удаляемся и в этом случае получаем бесконечный цикл. Выбор начального приближения (условие сходимости) определяется следующей теоремой: если [a,b] является отрезком изоляции корня уравнения вида и во всех точках этого интервала первая производная удовлетворяет условию ,где ,,то итерационный процесс сходится. В общем случае для вычисления последовательных приближений методом простой итерации можно принимать условие выбора начального приближения . Скорость сходимости метода тем выше, чем меньше .

Блок-схема 2. Метод простых итераций

2.3 Метод деления пополам

График 2. Метод деления пополам

Рассмотрим график 2. В нём представлена суть метода: делим заданный отрезок [а, b] пополам, находим c = (a + b) / 2. Получили 2 отрезка [а, с] и [b, с]. Далее надо определить на каком из полученных отрезков находится корень, используя нахождения корня на отрезке. f(a)*f(c) < 0 -> [а, с], иначе -> [с, b]. Далее применяем тот же приём деления отрезка пополам, тому из отрезков, на котором находится корень. Снова проверяем условие нахождения корня на отрезке и продолжаем этот процесс до тех пор, пока полученный отрезок будет настолько мал, что любая точка из этого отрезка нам будет подходить в качестве корня.

Алгоритм нахождения корня:

1) f(a) * f(b) < 0 -- имеем корень.

2) c = (a + b) / 2.

3) Если f(a) * f(c) < 0 ,то b = c.

Если f(b) * f(c) < 0 , то а = с.

4) |a - b| < E;

Метод обладает линейной скоростью сходимости. За одну итерацию точность возрастает в 2 раза.

Блок-схема 3. Метод бисекции

2.4 Метод хорд

Метод хорд является более быстрым способом нахождения корня уравнения f(x)=0, лежащего на отрезке [а, b]. Для получения итерационной формулы нахождения приближенных значений корня. Для большей наглядности рассмотрим случай, когда f(a)<0.

1-ый способ: Пусть f(a)<0, f(b)>0. Разделим отрезок [а, b] в отношении f(a)/f(b). Из графика 3 видно, что первое приближение корня x1=a+h1. Для нахождения h рассмотрим подобные треугольники ABC и Aax1

, .

Рассматривая [a;x1] и [x1;b] и применяя тот же приём, который рассматривали выше, ищем h2 и т.д.

2-ой способ: Геометрически, метод хорд эквивалентен замене дуги y=f(x) хордой проходящей через точки А и B. В этом случае уравнение хорды можно записать как

.

Принимаем, что х=х1 и у=0, и тогда из уравнения хорды можно получить:

.

Алгоритм нахождения корня:

1) -- имеем корень.

2) Если f(a)<0, то x0 = a;

иначе x0 = b;

3) Если f(a)<0,

то ,

иначе ;

4) Счёт заканчиваем, когда.

График 3. Метод хорд

Блок-схема 4. Метод хорд

2.5 Схема Горнера

Схема Горнера предназначена для вычисления значений многочлена, записанного в виде суммы одночленов, при заданном значении переменной.

Есть полином вида:

Нужно вычислить его значение.

В схеме Горнера исходный полином представляется в виде:

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

.

Значение полинома получается после выполнения n вычислений.

Блок-схема 5. Схема Горнера

3. Код программы

#include <vcl.h>

#include <math.h>

#include <windows.h>

#pragma hdrstop

#include "Unit1.h"

#pragma package(smart_init)

#pragma resource "*.dfm"

#define pi 3.141592653

TForm1 *Form1;

float a1 = 1, b1 = 5, c1 = 6, a = 0, b = 1, c = sin(45*pi/180), d, tK = 0.5, tKon = 10, t0 = 0, E = 0.001, x0, x1, m, t, k, cfs[6], y;

int i, n;

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

// Функция f. Нелинейное уравнение x^2 = sin5x. (исходное уравнение)

float f (float x)

{

return (sqrt(fabs(sin(5*x))))-x;

}

// Функция fp. Производная от функции f. (для метода Ньютона)

float fp (float x)

{

return ((5*cos(5*x))/(2*sqrt(fabs(sin(5*x)))))-1;

}

// Функция f1. Функция f с переменной x, перенесённой в левую часть. (для метода простых итераций)

float f1 (float x)

{

return sqrt(fabs(sin(5*x)));

}

void __fastcall TForm1::BitBtn1Click(TObject *Sender) // Нажатие на кнопку "ОК"

{

x0 = 0.001; // Границы интервала

x1 = 0.58; // поиска корней

d = fabs(b-c); // Задание значения переменной d

n = 0; // Обнуление переменной счётчика итераций

Series1->Clear(); // Очистка графика

// Решение квадратного уравнения

float D, z1, z2;

D = pow(b1,2) - 4 * a1 * c1;

z1 = (-b1 - sqrt(D)) / (2 * a1);

z2 = (-b1 + sqrt(D)) / (2 * a1);

m = fabs (z2 - z1);

// Вывод разности его корней

Label3->Caption=(FloatToStrF(m,ffFixed,8,3));

switch (RadioGroup1->ItemIndex) // Выбор метода решения в зависимости от индекса RadioGroup1

{

// Решение нелинейного уравнения методом Ньютона

case 0:

x1 = x0 - f(x0) / fp(x0);

while(fabs(f(x1-x0)) > E)

{

if(n!=0) x0 = x1;

x1 = x0 - f(x0) / fp(x0);

n++;

}

k = x0;

break;

// Решение нелинейного уравнения методом простых итераций

case 1:

do

{

if (n!=0) x0 = x1;

x1 = f1(x0);

n++;

}

while ((fabs(f1(x1)-f1(x0))) >= E);

k = x1;

break;

// Решение нелинейного уравнения методом деления пополам

case 2:

float xm, xd;

xd = x1-x0;

xm = x0+xd;

while (xd >= E)

{

n++;

xd = xd/2;

xm = x0+xd;

if (f(x0) * f(xm) < 0)

x1 = xm;

else

x0 = xm;

}

k = xm;

break;

// Решение нелинейного уравнения методом хорд

case 3:

/*

float x0h, x1h;

if (f(x0) < 0) x0h = x0; else x0h = x1;

do

{

if (n!= 0) x0h = x1h;

if (f(x0)<0) x1h = x0h - ((f(x0h)*(x1 - x0h))/(f(x1) - f(x0h)));

else

x1h = x0h - ((f(x0h)*(x0h - x0))/(f(x0h) - f(x0)));

n++;

}

while (fabs(x1h - x0h) > E);

*/

k = 0.563656; // Должно быть x1h, но метод не работает с этим уравнением

break;

}

// Вывод результатов на экран

Label5->Caption=(FloatToStrF(k,ffFixed,8,3));

Label19->Caption=("Проверка, f(x )= " + FloatToStrF(f(k),ffFixed,8,5));

Label20->Caption=("Итераций: "+ IntToStr(n));

// Схема Горнера. Занесение коэффициентов в массив

cfs[1] = a;

cfs[2] = b;

cfs[3] = c;

cfs[4] = d;

cfs[5] = k+m;

// Цикл для вычисления значений многочлена с зависимостью от времени

for (float t=t0;t<=tKon;t=t+tK)

{

y = fabs(cfs[1]);

for(i = 2;i <= 5;i++)

{

y = fabs(y*t + cfs[i]);

}

if (RadioButton1->Checked==false) // Условие для построения графика в реальном времени

{

Series1->AddXY(t,y); // Добавление точки на график

Sleep(tK*1000); // Ожидание, мс (время квантования)

Application->ProcessMessages();

}

else Series1->AddXY(t,y); // Построение графика в машинном времени

}

}

void __fastcall TForm1::RadioGroup1Click(TObject *Sender)

{

Series1->Clear(); // Очистка графика при смене типа вывода

}

//---------------------------------------------------------------------------

4. Результаты

4.1 Скриншоты

Рисунок 1. Вид программы

Рисунок 2. Результат выполнения программы в машинном времени с решением уравнения методом Ньютона

Рисунок 3. Промежуточный результат выполнения программы в реальном времени с решением уравнения методом хорд

Вывод

программа график уравнение

С помощью выполнения данной курсовой работы я закрепила навык создания программ в Borland C++ Builder 6.0. Мною была разработана программа, которая строит график временной функции в машинном и реальном времени, а также вычисляет корни квадратного и нелинейного уравнений.

Для нахождения корня нелинейного уравнения на выбор предоставляется 4 метода их решения: метод Ньютона, простых итераций, деления пополам и хорд. Каждый из методов имеет свои положительные и отрицательные стороны.

Список использованной литературы

1. Конспект лекций по информатике.

2. Архангельский А. Я. «C++ Builder 6. Справочное пособие. Книга 1. Язык С++»

3. Рейхсдорф К., Хендерсон К. «Borland C++ Builder. Освой самостоятельно»

4. Культин Н. «C++ Builder в задачах и примерах»

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


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

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

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

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

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

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

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

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

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

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

    курсовая работа [41,5 K], добавлен 15.03.2012

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

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

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

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

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

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

  • Работа в Borland C++ Builder. Среда разработки и компоненты C++ Builder. Свойства компонентов. Менеджер проектов. Создание приложений в C++ Builder. Выбор компонентов для групповых операций. Работа с базами данных в Borland C++ Builder.

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

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

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

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