Временная функция
Существуют различные методы решения полиномов. Один из них — разложение полинома по схеме Горнера2. PlaySound («D:\Programs\Borland C++ Builder 6.0 Enterprise\Курсовой проект\Трубачев А. А\Основная программа 2\Sta.wav», 0, SND_ASYNC); PlaySound («D:\Programs\Borland C++ Builder 6.0 Enterprise\Курсовой проект\Трубачев А. А\Основная программа 2\Sta.wav», 0, SND_ASYNC); PlaySound… Читать ещё >
Временная функция (реферат, курсовая, диплом, контрольная)
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
#pragma hdrstop
#include
#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=123 456;
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
#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
временный программа функция алгоритм