Временная функция
Составление схемы алгоритма и программы для построения графика временной функции, работающей как в машинном, так и в реальном времени. Выбор и обоснование методов расчета. Разработка основной программы. Блок-схемы алгоритмов. Распечатка листинга.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 21.11.2013 |
Размер файла | 1,5 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
1. Постановка задачи
Составить схему алгоритма и программу для построения графика временной функции, работающую как в машинном, так и в реальном времени. Реальное время в диапазоне (t0-tкон) формируется таймером в виде программного модуля с метками Tk, называемыми временем квантования. При вычислении функции использовать алгоритм Горнера (схему Горнера).
Функция:
Где t0=0 c; tкон = 10 c; Tk =0.5 c;
е - корень нелинейного уравнения 0,1a2 + ln a = 0, которое надо решить методом простых итераций с точностью ?=0,001, при начальном значении корня, лежащего в диапазоне [1,2]; n=z+v - сумма корней системы уравнений:
при a1=5; b1=3; d1= - 4; Коэффициенты: a=0.5, m=cos30?
a2=3; b2=5; d2=7;
2. Выбор и обоснование методов расчета
Существуют различные методы решения полиномов. Один из них - разложение полинома по схеме Горнера2.
Полином:
Y=a0 + a1t +a2t2+ a3t3+ a4t4+ … + antn
по схеме Горнера представляется в виде:
Y=a0 + t(a1 + t(a2 +t(a3 +… + t(an-1 + tan)…))),
где a0, a1, a2, a3,…. an - коэффициенты полинома;
t - время.
Данное разложение полинома удобно тем, что в нём отсутствует возведение в степень, что значительно ускоряет вычисление полинома.
На рисунке 2.1 представлена процедура вычисления полинома по схеме Горнера.
Рисунок 2.1 - Процедура вычисления полинома по схеме Горнера
3. Разработка основной программы
3.1 Таблица идентификаторов
Список переменных (идентификаторов), использованных в основной программе и их характеристики представлены в таблице 3.1.
Таблица 3.1
Идентификатор |
Характеристика идентификатора |
|
a |
Координата начала интервала нелинейного уравнения |
|
b |
Координата конца интервала нелинейного уравнения |
|
e |
Точность вычисления нелинейного уравнения |
|
x0 |
Начальное приближение корня нелинейного уравнения |
|
i |
Счетчик цикла схемы Горнера |
|
si |
Коэффициенты функции |
|
Y |
Значение функции |
|
t |
Время (аргумент функции) |
|
Tn |
Начальное значение времени аргумента функции |
|
Tk |
Конечное значение времени аргумента функции |
|
T |
Время квантования |
|
a1, b1, d1, a2, b2, d2 |
Коэффициенты системы уравнений |
|
z, v |
Корни системы уравнений |
|
n |
Сумма корней системы уравнений |
3.2 Блок-схемы алгоритмов
Поиск коэффициента e осуществляется с помощью решения нелинейного уравнения одним из следующих методов:
- деления отрезка пополам (биссекции);
- хорд;
- Ньютона;
- простой итерации.
На рисунке 3.2 представлена процедура решения нелинейного уравнения методом деления отрезка пополам. Предполагается, что функция f(x) непрерывна и ограничена в заданном интервале [a; b], также предполагается, что значение функции на концах интервала f(a) и f(b) имеют разные знаки, то есть f(a)*f(b)<0.
Рисунок 3.2 - Процедура решения нелинейного уравнения методом деления отрезка пополам (биссекции)
Процедура решения нелинейного уравнения методом деления отрезка пополам (биссекции) заключается в последовательном выполнении следующих операций:
1) задать интервал [a; b] и точность вычисленияe;
2) проверить условие, если оно выполняется, то делить интервал пополам;
3) вычислитьf(a)*f((a+b)/2), если это значение меньше нуля, то необходимо рассмотреть интервал [a; d], иначе-интервал [d; b], где с = (a + b)/2;
4) деление отрезка выполнять до тех пор, пока не выполняется условие |a - b|<=e.
На рисунке 3.3 представлена процедура решения линейного уравнения методом хорд.
Рисунок 3.3 - Процедура решения нелинейного уравнения методом хорд
Процедура решения нелинейного уравнения методом хорд заключается в последовательном выполнении следующих операций:
1) задать интервал [a; b] и точность вычисления;
2) проверить выполнение условия f(a)<0 для того чтобы присвоить приближенному значению корня x0 значение конца интервала;
3) в зависимости от выполнения условияf(a)<0 выбрать формулу расчета приближенного значения корня уравнения;
4) деление отрезка выполнять до тех пор, пока не выполняется условие |xn+1 - xn|<=e.
На рисунке 3.4 представлена процедура решения нелинейного уравнения методом Ньютона.
Рисунок 3.4 - Процедура решения нелинейного уравнения методом Ньютона
Процедура решения нелинейного уравнения методом Ньютона заключается в последовательном выполнении следующих операций:
1) выбрать приближенное значение корня x0и точность вычисленияe;
2) проверить выполнение условия сходимости|?' (xn)|<1;
3) найти значение корня уравнения путем последовательного приближения по формуле xn+1=xn-f(xn)/f' (xn).
На рисунке 3.5 представлена процедура решения нелинейного уравнения методом простой итерации.
Рисунок 3.5 - Процедура решения нелинейного уравнения методом простой итерации
Процедура решения нелинейного уравнения методом простой итерации заключается в последовательном выполнении следующих операций:
1) выбрать приближенное значение корня x0 и точность вычисленияe;
2) проверить выполнение условия сходимости, где? (х) - функция, выраженная из данного нелинейного уравнения;
3) найти значение корня уравнения путем последовательного приближения по формуле xn+1=?(xn).
3.3 Распечатка листинга программы
#include <vcl.h>
#pragma hdrstop
#include <stdio.h>
#include «Unit1.h»
#include «Unit2.h»
#include «Unit3.h»
#include «mmsystem.h»
// -
#pragma package (smart_init)
#pragma link «CGAUGES»
#pragma resource «*.dfm»
TForm1 *Form1;
// -
__fastcall TForm1:TForm1 (TComponent* Owner)
: TForm(Owner)
{
}
// -
void __fastcall TForm1: FormActivate (TObject *Sender)
{PlaySound («D:\\Programs\\Borland C++ Builder 6.0 Enterprise\\Курсовой проект\\Трубачев А.А\\ Kursach.wav», 0, SND_ASYNC);
int W, L, t;
W=10; L=43;
for (int i=1; i<=129; i++)
{t=8; if (L<=583) {
for (int T=0; T<=20; T++)
{t=t++; Imagekar->Top=t; Application->ProcessMessages(); Sleep (5);}
for (int T=0; T<=20; T++)
{t=t-1; Imagekar->Top=t; Application->ProcessMessages(); Sleep (5);}
W=W+12;
L=L+12;
Imagekar->Left=L; Label1->Width=W; Application->ProcessMessages(); Sleep (10);
}}
for (t=t; t<=72; t++)
{
Imagekar->Top=t; Application->ProcessMessages(); Sleep (10);
}
Image2->Visible=true;
Imagekar->Height=137; int q;
for (t=t; t>=40; t-)
{q=q+5;
Imagekar->Top=t-3; Image3->Height=q; Application->ProcessMessages(); Sleep (20);}
Imagekar->Visible=false;
int t2, t3;
t3=Image2->Top; t2=Label1->Top;
for (int i=0; i<=100; i++)
{
t2=t2-; t3=t3 -;
Image2->Top=t3; Label1->Top=t2; Application->ProcessMessages(); Sleep (15);
}
Image1->Visible=true; CGauge1->Visible=true; MaskEdit1->Visible=true;
} // -
void __fastcall TForm1: Timer1Timer (TObject *Sender)
{
for (int i=0; i<=100; i++)
{
CGauge1->Progress=i;
Sleep (50);
if (CGauge1->Progress == CGauge1->MaxValue) Timer1->Enabled = false;
}
Form2->Show ();
Form1->Hide();
PlaySound («D:\\Programs\\Borland C++ Builder 6.0 Enterprise\\Курсовой проект\\Трубачев А.А\\ 2.wav», 0, SND_ASYNC);
}
// -
void __fastcall TForm1: MaskEdit1MouseMove (TObject *Sender,
TShiftState Shift, int X, int Y)
{
Imagepar->Visible=true;
}
// -
void __fastcall TForm1: FormMouseMove (TObject *Sender, TShiftState Shift,
int X, int Y)
{
Imagepar->Visible=false;
}
// -
void __fastcall TForm1: Image1Click (TObject *Sender)
{
PlaySound («D:\\Programs\\Borland C++ Builder 6.0 Enterprise\\Курсовой проект\\Трубачев А.А\\ 1.wav», 0, SND_ASYNC);
float parol=123456;
MaskEdit1->Font->Color=clBlack;
float s=StrToFloat (MaskEdit1->Text); if (parol==s) {
MaskEdit1->Font->Color=clGreen;
CGauge1->Progress=0;
CGauge1->MaxValue = 100; Timer1->Interval = 100; Timer1->Enabled = true;
}
else
{char s[40]; sprintf (s, «%s», MaskEdit1->Text); MaskEdit1->Font->Color=clRed; MaskEdit1->Text=s;}
}
// -
// -
#include <vcl.h>
#pragma hdrstop
#include «Unit1.h»
#include «Unit2.h»
#include «Unit3.h»
#include «math.h»
#include «Math.hpp»
#include «windows.h»
#include «mmsystem.h»
// -
#pragma package (smart_init)
#pragma resource «*.dfm»
TForm2 *Form2;
// -
__fastcall TForm2:TForm2 (TComponent* Owner)
: TForm(Owner)
{
int r;
}
// -
float F (float x) {
return 0.1*x*x+log(x);
}
// -
float F1 (float x) {
return exp (-0.1*x*x);
}
// -
float F2 (float x) {
return -0.2*x*exp (-0.1*x*x);
}
// -
float F3 (float x) {
return 0.2*x+(1/x);
}
// -
float F4 (float x) {
return 0.2*x - (1/(x*x));
}
// -
void __fastcall TForm2: Edita1Change (TObject *Sender)
{
if (Edita1->SelStart>=1)
{Editb1->Visible=true; Imageb->Visible=true;}
}
// -
void __fastcall TForm2: Editb1Change (TObject *Sender)
{
if (Editb1->SelStart>=1)
{Editeps->Left=440; Editeps->Visible=true; Imageeps->Left=440; Imageeps->Visible=true;}
}
// -
void __fastcall TForm2: EditepsChange (TObject *Sender)
{
if (Editeps->SelStart>=1)
{if ((r==3)|(r==4)) {Editx0->Visible=true; Imagex0->Visible=true;}
else
{Editx0->Visible=false; Imagex0->Visible=false;}
}
}
// -
int r;
void __fastcall TForm2: NbisClick (TObject *Sender)
{
r=1;
Image5->Visible=false; Label1->Visible=false; Label2->Visible=false; Label3->Visible=false;
Label4->Visible=false; Imagebis->Visible=true; Imagehord->Visible=false; Imageiter->Visible=false;
Imagenut->Visible=false; Edita1->Visible=true; Editx0->Visible=false; Editb1->Visible=false;
Edita1->Text=»»; Editb1->Text=»»; Editx0->Text=»»; Editeps->Text=»»;
Editeps->Left=440; Editeps->Visible=false; Imagea->Visible=true; Imageb->Visible=false;
Imageeps->Left=440; Imageeps->Visible=false; Imagex0->Visible=false; BitBtn1->Visible=true;
BitBtn2->Visible=false; BitBtn3->Visible=false; BitBtn4->Visible=false;
}
// -
void __fastcall TForm2: NxordClick (TObject *Sender)
{
r=2;
Image5->Visible=false; Label1->Visible=false; Label2->Visible=false; Label3->Visible=false;
Label4->Visible=false; Imagebis->Visible=false; Imagehord->Visible=true; Imageiter->Visible=false;
Imagenut->Visible=false; Edita1->Visible=true; Editx0->Visible=false; Editb1->Visible=false;
Edita1->Text=»»; Editb1->Text=»»; Editx0->Text=»»; Editeps->Text=»»; Editeps->Left=440;
Editeps->Visible=false; Imagea->Visible=true; Imageb->Visible=false;
Imageeps->Left=440; Imageeps->Visible=false; Imagex0->Visible=false;
BitBtn1->Visible=false; BitBtn2->Visible=true; BitBtn3->Visible=false; BitBtn4->Visible=false;
}
// -
void __fastcall TForm2: NiterClick (TObject *Sender)
{
r=3;
Image5->Visible=false; Label1->Visible=false; Label2->Visible=false; Label3->Visible=false;
Label4->Visible=false; Imagebis->Visible=false; Imagehord->Visible=false; Imageiter->Visible=true;
Imagenut->Visible=false; Edita1->Visible=false; Editx0->Visible=false; Editb1->Visible=false;
Edita1->Text=»»; Editb1->Text=»»; Editx0->Text=»»; Editeps->Text=»»; Editeps->Left=8;
Editeps->Visible=true; Imagea->Visible=false; Imageb->Visible=false; Imageeps->Left=8;
Imageeps->Visible=true; Imagex0->Visible=false;
BitBtn1->Visible=false; BitBtn2->Visible=false; BitBtn3->Visible=true; BitBtn4->Visible=false;
}
// -
void __fastcall TForm2: NnutClick (TObject *Sender)
{r=4;
Image5->Visible=false; Label1->Visible=false; Label2->Visible=false; Label3->Visible=false;
Label4->Visible=false; Imagebis->Visible=false; Imagehord->Visible=false; Imageiter->Visible=false; Imagenut->Visible=true; Edita1->Visible=false; Editx0->Visible=false; Editb1->Visible=false;
Edita1->Text=»»; Editb1->Text=»»; Editx0->Text=»»; Editeps->Text=»»;
Editeps->Left=8; Editeps->Visible=true; Imagea->Visible=false; Imageb->Visible=false;
Imageeps->Left=8; Imageeps->Visible=true; Imagex0->Visible=false;
BitBtn1->Visible=false; BitBtn2->Visible=false; BitBtn3->Visible=false; BitBtn4->Visible=true;
}
// -
void __fastcall TForm2: BitBtn1Click (TObject *Sender)
{
float a1=StrToFloat (Edita1->Text);
float b1=StrToFloat (Editb1->Text);
float eps=StrToFloat (Editeps->Text);
float c1; int i1=0;
do
{
i1++;
c1=(a1+b1)/2;
if (F(a1)*F(c1)<0) b1=c1;
else a1=c1;
}
while (fabs(a1-b1)>=e);
PlaySound («D:\\Programs\\Borland C++ Builder 6.0 Enterprise\\Курсовой проект\\Трубачев А.А\\Основная программа 2\\Sta.wav», 0, SND_ASYNC);
Image5->Visible=true;
Application->ProcessMessages();
Sleep(550);
Label1->Visible=true; Label2->Visible=true; Label3->Visible=true; Label4->Visible=true;
Label1->Font->Color=clSilver; Label2->Font->Color=clSilver; Label3->Font->Color=clSilver;
Label4->Font->Color=clSilver;
Label3->Caption= «i=»;
Label4->Caption= «e=»;
Label1->Caption=i1;
Label2->Caption=SimpleRoundTo (c1, -5);
Application->ProcessMessages();
Sleep(750);
Label1->Font->Color=clBlack; Label2->Font->Color=clBlack; Label3->Font->Color=clBlack;
Label4->Font->Color=clBlack;
Label3->Caption= «i=»;
Label4->Caption= «e=»;
Label1->Caption=i1;
Label2->Caption=SimpleRoundTo (c1, -5);
}
// -
void __fastcall TForm2: BitBtn2Click (TObject *Sender)
{
float x0, x1;
float a2=StrToFloat (Edita1->Text);
float b2=StrToFloat (Editb1->Text);
float e=StrToFloat (Editeps->Text); int i1=0;
if (F(a2)<0) x0=a2; else x0=b2;
x1=x0;
do
{
i1++;
x0=x1;
if (F(a2)<0) x1=x0-F(x0)*(b2-x0)/(F(b2) - F(x0));
else x1=x0-F(x0)*(x0-a2)/(F(x0) - F(a2));
}
while (fabs (x1-x0)>e);
PlaySound («D:\\Programs\\Borland C++ Builder 6.0 Enterprise\\Курсовой проект\\Трубачев А.А\\Основная программа 2\\Sta.wav», 0, SND_ASYNC);
Image5->Visible=true;
Application->ProcessMessages();
Sleep(550);
Label1->Visible=true; Label2->Visible=true; Label3->Visible=true; Label4->Visible=true;
Label1->Font->Color=clSilver; Label2->Font->Color=clSilver; Label3->Font->Color=clSilver;
Label4->Font->Color=clSilver;
Label3->Caption= «i=»; Label4->Caption= «e=»; Label1->Caption=i1;
Label2->Caption=SimpleRoundTo (x1, -5);
Application->ProcessMessages();
Sleep(550);
Label1->Font->Color=clBlack; Label2->Font->Color=clBlack; Label3->Font->Color=clBlack;
Label4->Font->Color=clBlack;
Label3->Caption= «i=»; Label4->Caption= «e=»; Label1->Caption=i1;
Label2->Caption=SimpleRoundTo (x1, -5);
}
// -
void __fastcall TForm2: BitBtn3Click (TObject *Sender)
{
int i1=0;
float x0=StrToFloat (Editx0->Text);
float e=StrToFloat (Editeps->Text);
float x1;
x1=x0;
do {
i1++;
x0=x1;
x1=F1 (x0);}
while (fabs (x1-x0)>e);
PlaySound («D:\\Programs\\Borland C++ Builder 6.0 Enterprise\\Курсовой проект\\Трубачев А.А\\Основная программа 2\\Sta.wav», 0, SND_ASYNC);
Image5->Visible=true;
Application->ProcessMessages();
Sleep(550);
Label1->Visible=true;
Label2->Visible=true;
Label3->Visible=true;
Label4->Visible=true;
Label1->Font->Color=clSilver; Label2->Font->Color=clSilver; Label3->Font->Color=clSilver;
Label4->Font->Color=clSilver;
Label3->Caption= «i=»; Label4->Caption= «e=»; Label1->Caption=i1;
Label2->Caption=SimpleRoundTo (x1, -5);
Application->ProcessMessages();
Sleep(750);
Label1->Font->Color=clBlack; Label2->Font->Color=clBlack; Label3->Font->Color=clBlack;
Label4->Font->Color=clBlack;
Label3->Caption= «i=»; Label4->Caption= «e=»; Label1->Caption=i1;
Label2->Caption=SimpleRoundTo (x1, -5);
// -
void __fastcall TForm2: BitBtn4Click (TObject *Sender)
{
int i1=0; float x1; float e=StrToFloat (Editeps->Text);
float x0;
L1:x0=StrToFloat (Editx0->Text); if (F(x0)*F4 (x0)<0) {
x1=x0;
do
{
i1++;
x0=x1;
x1=x0 - (F(x0)/F3 (x0));}
while (fabs (x1-x0)>e);
PlaySound («D:\\Programs\\Borland C++ Builder 6.0 Enterprise\\Курсовой проект\\Трубачев А.А\\Основная программа 2\\Sta.wav», 0, SND_ASYNC);
Image5->Visible=true;
Application->ProcessMessages();
Sleep(550);
Label1->Visible=true;
Label2->Visible=true;
Label3->Visible=true;
Label4->Visible=true;
Label1->Font->Color=clSilver; Label2->Font->Color=clSilver; Label3->Font->Color=clSilver;
Label4->Font->Color=clSilver.
Список литературы
1. А.Я. Архангельский. Программирование в C++ Builder 6 М: «Издательство БИНОМ», 2003
2. 1. Архангельский А.Я. C++ Builder 6. Справочное пособие. - М: «Издательство БИНОМ», 2002
временный программа функция алгоритм
Размещено на Allbest.ru
Подобные документы
Выбор и обоснование методов составления схемы алгоритма и разработки программы для построения графика временной функции, работающей как в машинном, так и в реальном времени. Алгоритм Горнера. Программа на языке Quick BASIC (с распечаткой листинга).
курсовая работа [55,1 K], добавлен 21.11.2012Построение схемы алгоритма и программы для создания графика временной функции, работающей в машинном и реальном времени. Выбор методов решения и их обоснование. Значение коэффициентов и временной функции. Реализация временных задержек в программе.
курсовая работа [6,2 M], добавлен 09.03.2012Составление схемы алгоритма и программы для построения графика временной функции, работающей как в машинном, так и в реальном времени. Пример вычисления степенного ряда с помощью схемы Горнера. Описание переменных программы, листинг, процедуры и функции.
курсовая работа [67,6 K], добавлен 20.11.2012Программирование на алгоритмическом языке Turbo Pascal на примере разработки алгоритма и программы расчета временной функции. Выбор, обоснование методов решения. Схемы алгоритмов основной программы и подпрограмм. Распечатка исходных и вычисленных величин.
реферат [154,8 K], добавлен 15.03.2012Общие сведения об алгоритмическом языке PASCAL. Схема алгоритма и программы для построения графика временной функции, работающей как в машинном, так и в реальном времени. Применение метода простой итерации, метода решения полинома на языке PASCAL.
курсовая работа [41,5 K], добавлен 15.03.2012Понятие машинного и реального времени, дискретизация времени. Реализация временных задержек в программе. Вычисление значения многочлена методом Горнера. Разработка схем алгоритмов, основной программы и подпрограмм. Построение графика временной функции.
курсовая работа [40,7 K], добавлен 18.04.2012Создание программ в Borland C++ Builder 6.0. Разработка программы для построения графика временной функции, работающей, как в машинном, так и в реальном времени. Использование алгоритма Горнера для вычисления корня квадратного и нелинейного уравнений.
контрольная работа [925,2 K], добавлен 05.01.2016Cтpyктypнaя модель функционирования пapикмaxepcкoй: описание временной диаграммы и Q-схемы системы. Разработка машинной имитационной модели на специализированном языке GPSS: составление блок-схемы, детализированного алгоритма и листинга программы.
курсовая работа [425,1 K], добавлен 02.07.2011Разработка программы построения графика экспериментальных точек и полинома регрессии второй степени в среде Turbo Pascal. Блок-схемы алгоритмов используемых процедур. Листинг программы. Составление вектора свободных членов и матрицы коэффициентов.
курсовая работа [46,6 K], добавлен 24.11.2013Функция записи в сжатое представление массива. Распечатка внутреннего представления матрицы. Результат работы программы при Xm=4. Построение графика зависимости T=F(Xm) по начальному значению времени выполнения алгоритма. Запись элементов в массив.
лабораторная работа [471,8 K], добавлен 05.12.2015