Построение временной функции
Метод простой итерации Суть метода простой итерации состоит в том, что уравнение y=f (x) заменяется на выражение x=ц (x). Условие, при котором данный процесс сходится, определяется теоремой: если интервал (a;b) является интервалом изоляции корня уравнения x=ц (x) и во всех точках данного интервала выполняется условие |ц'(x)|<1, то процесс нахождения корня данным методом будет сходящимся… Читать ещё >
Построение временной функции (реферат, курсовая, диплом, контрольная)
МИНИСТЕРСТВО ОБРАЗОВАНИЯ РЕСПУБЛИКИ БЕЛАРУСЬ
БЕЛОРУССКИЙ НАЦИОНАЛЬНЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ
Кафедра «ТЭС»
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
К КУРСОВОЙ РАБОТЕ
ПО ДИСЦИПЛИНЕ Информатика
Тема Построение временной функции Минск 2011
Введение
программа временная функция Алгоритмический язык «Паскаль» был разработан профессором ВТУ в Цюрихе Н. Виртом. Свой алгоритмический язык он назвал в честь французского ученого Блэза Паскаля.
Язык Паскаль получил широкое распространение во всем мире благодаря простоте и доступности широкому кругу людей, работающих в различных отраслях народного хозяйства.
Успеху языка способствовало и то, что по своей идеологии Паскаль наиболее близок к современной теории и технологии программирования, так как довольно полно отражает идеи структурного программирования. Кроме того, он приспособлен для применения общепризнанной в настоящее время технологии разработки программ методом пошаговой детализации (нисходящего программирования). И, наконец, язык предоставляет гибкие возможности в отношении используемых структур данных.
Язык Паскаль позволяет создавать не только несложные программы, но и структурированные программы трудоемких и сложных вычислений предоставляя возможности работы, как с числовой, так и символьной информацией.
Язык Паскаль постоянно совершенствовался. Для персональных компьютеров появились революционные по своей сущности компиляторы с языка Паскаль для IBM PC (главным образом фирм Microsoft и Borland), представляющие диалоговые системы, называемые интегрированными средами (Turbo Pascal). К настоящему времени существуют ряд версий интегрированных сред языка Turbo Pascal 5.0, 5.5, 6.0, 7.0, 8.0, причем соблюдается принцип их совместимости снизу вверх.
1. Постановка задачи
Составить схему алгоритма и программу для построения графика временной функции, работающую как в машинном, так и в реальном времени. Реальное время в диапазоне (t0-tкон) формируется таймером в виде программного модуля с метками Тк, называемыми временем квантования. При вычислении функции использовать алгоритм Горнера.
Функция: y=
где t0=0 с, tкон=10 с, Тк=0.5 с;
x — корень нелинейного уравнения tgx-1/3(tgx)+1/5(tgx)-1/3=0, которое надо решить методом Ньютона с точностью, при начальном значении корня, лежащего в диапазоне [0;0.8]; m-наименьший по абсолютному значению корень квадратного уравнения
az+bz+c= 0
При a=1,5
b=2
c=-2
Коэффициенты a = 1.5, b = 4.3, d = sin 60.
2.Описание методов решения
2.1 Метод простой итерации Суть метода простой итерации состоит в том, что уравнение y=f (x) заменяется на выражение x=ц (x). Условие, при котором данный процесс сходится, определяется теоремой: если интервал (a;b) является интервалом изоляции корня уравнения x=ц (x) и во всех точках данного интервала выполняется условие |ц'(x)|<1, то процесс нахождения корня данным методом будет сходящимся.
Алгоритм нахождения корня:
x1= ц (x0);
x2= ц (x1);
xn= ц (xn-1);
Счёт заканчивается, когда |xn+1 — xn|n+1)|
2.2 Схема Горнера Существуют различные методы решения полиномов на языке PASCAL. Один из них — разложение полинома по схеме Горнера.
Полином:
y = a0 + a1t + a2t2+ a3t3+ a4t4+ … + antn
по схеме Горнера представляется в виде
y = a0 + t (a1 + t (a2 +t (a3 +… + t (an-1 + t an)…)))
Данное разложение полинома удобно тем, что в нём отсутствует возведение в степень, что значительно ускоряет вычисление полинома.
3. Таблица идентификаторов
Идентификаторы | Наименование | |
a1, b1, с1 | Коэффициенты квадратного уравнения | |
z1,z2 | Корни квадратного уравнения | |
m | Наименьший по абсолютному значению корень квадратного уравнения | |
е | Точность вычисления корня | |
x | Корень нелинейного уравнения | |
x0 | Начальное приближение | |
t | Время | |
y | Значение временной функции | |
4.Схемы алгоритмов
4.1 Схема алгоритма метода простых итераций
начало
нет
да
4.2 Схема Горнера
начало
a, m, l, n
4.3 Схема основной программы начало Решение квадратного уравнения Метод простых итераций Схема Горнера конец
5.Текст программы
{$N+}
program Kursovoj;
uses crt, dos, graph;
const
MAXLEV=5;{ максимально возможный уровень сложности }
CURLEV=3;{ текущий уровень сложности }
K_ENTER=13;
K_ESC=27;
e=1e-3;
k=5; {kol-vo rezhimov}
NameRegime: array [1.k]of string[36] =
('1 — reshenie kvadratnogo yravnenija',
'2 — reshenie nelinejnogo yravnenija',
'3 — metod Gornera',
'4 — Grafik',
'5 — Vyxod');
type
ArOfint=array[1.MAXLEV]of integer;
Var
I, j: byte;
y, d, r, v, x, x0, a, b, a1,b1,c1,z, m: real;
n, t, gd, gm, h: integer;
t0:word;
Procedure zastavka;
const max =50;
xs = [27,28,29,31,32,33,35,36,37,39,40,41,43,44,45,47,48,49,51,52,53];
ys = [22,23,24,25,26];
xy: array[1.55,1.2] of integer =
((27,22),(27,23),(27,24),(27,25),(27,26),(28,22),(29,22),(29,23),(29,24),(29,25),(29,26),
(31,23),(31,24),(31,25),(32,22),(32,26),(33,23),(33,24),(33,25),
(35,22),(35,23),(35,24),(35,25),(35,26),(36,22),(36,24),(36,26),(37,23),(37,25),
(39,22),(40,22),(40,23),(40,24),(40,25),(40,26),(41,22),
(47,23),(47,24),(47,25),(48,22),(48,26),(49,23),(49,24),(49,25),
(51,23),(52,22),(53,23),(53,24),(52,25),(51,26),(52,26),(53,26),
(43,24),(44,24),(45,24));
type matx= record
s: string[255];
x, y, l: integer;
end;
var
sym: array[1.max] of matx;
a, b, n:integer;
c1,c2,c3: byte;
procedure writex (x, y: integer; s: string);
var i, d: integer;k:longint;
begin for k:= 1 to 100 000 do;
for i:=0 to length (s)-1 do
if ((i+y)<50)and ((i+y)>0) then
begin
gotoxy (x, i+y);
if odd (random (2)) then textcolor (c1)
else textcolor (c2);
{ for d:=1 to 55 do
if (x=xy[d, 1])and ((y+i)=xy[d, 2]) then begin textbackground (c3);
textcolor (c3);end; }
{ delay (2);}
write (s[i+1]);
{ textbackground (black);}
end;
end;
procedure init;
var i, j: integer;
begin
c1:=lightgreen;
c2:=green;
c3:=white;
textmode (c80+font8x8);
highvideo;
clrscr;
randomize;
for i:=1 to max do begin
sym[i]. l:=random (20)+200;
for j:=0 to sym[i]. l do sym[i]. s[j]:=chr (random (143)+32);
sym[i].x:=random (80)+1;
sym[i].y:=-random (100);
end;
end;
begin
init;
for a:=1 to max do
with sym[a] do begin
writex (x, y,' '+s);
end;
{ delay (1); {150}
y:=y+1;
if y>50 then begin
x:=random (80)+1;
y:=-random (100);
end;
delay (65 000);
end;
Procedure nelinyr;
{——AAA—-}
function f1(a:extended):extended;
var k: real;
begin
k:=sin (a)/cos (a);
f1:=arctan (1/3*(k*k*k)-1/5*(k*k*k*k*k)+1/3)
end;
function f2(a:extended):extended;
var k, g: real;
begin
k:=sin (a)/cos (a);
g:=cos (a)/sin (a);
f2:=-g+k-(k*k*k);
end;
function f (a:extended):extended;
var k: real;
begin
k:=sin (a)/cos (a);
f:=k-1/3*(k*k*k)+1/5*(k*k*k*k*k)-1/3;
end;
{—-AAAA—-}
begin
{——- reshenie nelinejnogo yravnenija ——-}
clrscr;
writeln (' //____ Reshenie nelinejnogo yravnenija ____//');
writeln;
writeln (' Trebuetsa reshit nelinejnoe yravnenie metodom prostoj iteracii ');
writeln (' s zadannoj tochnostju e = ', e:4:3);
writeln (' ———————————————————————');
writeln ('Nelinejnoe yravnenie imeet vid :¦tg (x) — 1/3(tg (x)^3) + 1/5(tg (x)^5) — 1/3 = 0¦');
writeln (' L———————————————————————');
writeln ('Введите границы отрезка изолирующего корень');
write (' a = ');readln (x0);
write (' b = ');readln (b);
writeln;
if (f (x0)*f (b)<0) and (f2(x0)<1) then begin
repeat
x:=f1(x0); x0:=x;
n:=n+1;
until
abs (f (x))
writeln (' г========');
writeln ('Koren nelinejnogo yravnenija raven ¦x = ', x:3:2,'¦');
writeln (' L========-');
writeln ('Kolichestvo proizvedennyx iteracij n = ', n);
writeln ('Znachenie fynkcii v tochke X ravno f (x) = ', f (x):3:6);end
else
writeln ('Фиг вам');
writeln;
writeln (' //_________________________________________//');
readkey;
writeln ('privet expertint');
readkey;
end;
Procedure kvyravn;
begin
clrscr;
{——- reshenie kvadratnogo yravnenija ———}
writeln (' //____ Reshenie kvadratnogo yravnenija ____//');
writeln;
writeln ('vvedite koeficienti a1, b1,c1');
write ('a1 = '); readln (a1);
write ('b1 = '); readln (b1);
write ('c1 = '); readln (c1);
Writeln;
Writeln (' ————————————-');
Writeln ('Kvadratnoe yravnenie imeet vid: ¦ a1*z2 + b1*z + c1 = 0 ¦');
Writeln (' L————————————-');
writeln ('Diskreminant raven : — d = b12 — 4*a1*c1 —, gde a1, b1,c1 — koeficienti; ');
writeln (' d — diskreminant.');
d:=sqr (b1)-4*a1*c1;
Writeln (' - d = ', d:0:0,' -');
if d>=0 then begin
z:=((-b1)+sqrt (d))/(2*a1);
v:=((-b1)-sqrt (d))/(2*a1);
Writeln;
writeln (' Korni kvadratnogo yravnenija :');
writeln (' г============');
writeln (' ¦ z1 = ', z:4:3,' ¦');
writeln (' ¦ z2 = ', v:0:0, ' ¦');
m:=z;
writeln (' L============-');
end;
if abs (z)>abs (v) then
m:=v;
Writeln;
writeln (' г———————-');
writeln ('Naimen6ii po modulu koren kv. yr-ija : — m = z = ', m:4:3,' -');
writeln (' L————————');
writeln (' //__________________________________________//');
readkey;
end;
Procedure Graffik;
begin
clrscr;
gd:=detect;
initgraph (gd, gm,'');
line (0,240,640,240);
line (320,0,320,480);
t0:=0;
while t0<=20 do begin
y:=abs (1.5*t0*t0*t0+4.3*t0*t0+(sqrt (3)/2)*t0+x+m);
h:=round (y/20);
delay (250);
putpixel (t0*2+320,240-h, 15);
t0:=t0+0.001;
end;
writeln ('graffik');
end;
Procedure gorner;
begin
clrscr;
r:=0.5;
t:=0;
d:=(sqrt (3))/2;
writeln (' //____________Tablica Gornera____________//');
writeln;
writeln (' г============T============');
for t:=0 to 20 do begin
r:=t/2;
y:=abs (a*r*r*r+b*r*r+d*r+x+m);
write (' ¦t = ', r:4:1);
writeln (' ¦ y = ', y:6:2,'¦');
end;
writeln (' L============¦============-');
writeln;
writeln (' //_________________________________________//');
readkey;
end;
{—————————————-}
{—————————————-}
procedure igra;
var
igrok:ArOfint;{ комбинация игрока }
comp:ArOfint;{ комбинация компьютера }
level:integer;{ уровень сложности ¦ число цифр в числе }
nu:integer;{ угадано чисел }
nm:integer;{ из них на своих местах }
KeyCode:integer;{ код клавиши, нажатием которой игрок завершил ввод }
otl:boolean;
i:integer;
{ «получить «строку цифр у компьютера }
procedure GetComp (var a: ArOfInt;n:integer);
var
i:integer;
begin
randomize;
for i:=1 to n do
a[i]: =random (10);
if otl then begin
writeln;
write ('Комбинация компьютера: ');
for i:=1 to n do write (a[i]);
writeln;
end;
end;
{ Сколько цифр угадано? }
function ugad (comp, igrok: ArOfInt;n:integer):integer;
var
u:integer;{ угадано цифр }
i, j: integer;
found:boolean;{ TRUE, если igrok[i]=comp[j]}
begin
u:=0;
for i:=1 to n do { проверим каждую цифру игрока }
begin
j:=1;
found:=FALSE;
{ будем igrok[i]последовательно сравнивать с числами компьютера }
repeat
if igrok[i]=comp[j] then
begin
comp[j]: =-1;{ пометим найденное число }
u:=u+1;
found:=TRUE;
end
else j:=j+1;
until (j>n)or found
end;
ugad:=u;
end;
{ Сколько цифр на своих местах? }
function mesto (comp, igrok: ArOfInt;n:integer):integer;
var
m:integer;
i:integer;
begin
m:=0;
for i:=1 to n do
if comp[i]=igrok[i]
then m:=m+1;
mesto:=m;
end;
{ Процедура вводит с клавиатуры строку цифр заданной длины.}
{ Используя клавишу, можно исправлять введенные цифры.}
{ Процедура завершает работу, если введено заданное количество цифр }
{ и нажата клавиша .}
function GetIgrok (var a: ArOfint;n:integer;mes:string):integer;
var
ch:char;{ символ }
dec:integer;{ десятичный код символа }
x, y: integer;{ положение курсора }
i:integer;
code:integer;
begin
i:=1;
write (mes);
repeat
ch:=readkey;
dec:=ord (ch);
if (ch >='0') and (ch<='9') and (i<=n)
then begin
write (ch);
val (ch, a[i], code);
i:=i+1;
end
else
if (dec=8) and (i > 1)
then begin
i:=i-1;
x:=whereX;
y:=whereY;
gotoXY (x-1,y);
write (' ');
gotoXY (x-1,y);
end;
until ((i>n) and (dec=K_ENTER)) or (dec=K_ESC);
getigrok:=dec;
end;{ GeIgrok }
procedure pravila (n:integer);
begin
writeln;
writeln;
writeln ('Компьютер задумал число из ', n,' цифр. Вы должны его отгадать.');
writeln ('После ввода очередного числа программа сообщает');
writeln ('сколько цифр');
writeln ('угадано, и сколько из них находятся на своих местах.');
writeln (' Например,');
writeln ('если задумано число 4345 и введено 4251,');
writeln (' то угаданы две цифры,');
writeln ('и одна цифра находится на своем месте.');
writeln ('При вводе можно использовать .');
writeln (' После ввода числа');
writeln ('следует нажать клавишу или -');
writeln (' для прекращения игры.');
writeln;
end;
begin { основная процедура }
level:=CURLEV;
otl:=FALSE;
pravila (level);{ вывести правила игры }
GetComp (comp, level);
repeat
KeyCode:=GetIgrok (igrok, level,'Ваш вариант-> ');
if KeyCode<>K_ESC then begin
nu:=ugad (comp, igrok, level);
nm:=mesto (comp, igrok, level);
writeln ('Угадано:', nu,'. На своих местах:', nm);
end;
until ((nu=level) and (nm=level)) or (KeyCode=K_ESC);
if KeyCode<>K_ESC
then writeln ('***ВЫ УГАДАЛИ ЧИСЛО!***')
else begin
writeln ('Игра завершена по нажатию .');
write ('Задуманное число:');
for i:=1 to level do write (comp[i]);
writeln;
end;
write ('Нажмите для завершения.');
readln;
end;
{———————————-}
{———————————-}
Begin
clrscr;
GoToXY (200,200);
textcolor (12);
writeln ('г===============================');
writeln ('¦ KURSOVAJA RABOTA ¦');
writeln ('¦ vychislenie vremennoj funkcii ¦');
writeln ('L===============================-');
readkey;
Zastavka;
While true do
Begin
Clrscr;
GotoXY (24,4);{peresulka kursora v to4ku na4ala zagolovka}
Write ('GLAVNOE MENU');
for j:=1 to 5 do begin
GotoXY (25,7+j);
write (nameregime[j]);end;
gotoxy (20,15);
write ('Vvedite nomer rezhima i nazhmite ');
readln (i);
case i of
1:kvyravn;
2:nelinyr;
3:gorner;
4:graffik;
5:begin clrscr;igra; halt; end;
else
begin
GotoXY (20,17);
write ('takogo rezhima nety v menu. POVTORITE!!!');
delay (1000);
end;
end;
end;
END.
6. Результаты расчета
6.1 Исходные величины Заданная точность: е=10-3
Коэффициенты квадратного уравнения:
а1=1,5; b1=2; с1= -2;
Время (начальное, конечное, квантования):
t0=0 с, tкон=10 с, Тк=0.5 с;
Коэффициенты временной функции:
а= 1,5; b=4,3; d= sin60;
6.2 Вычисленные величины
t | y | |
0,5 | 2.6 | |
7.6 | ||
1,5 | ||
2,5 | 53.43 | |
82.03 | ||
3,5 | 120.9 | |
169.2 | ||
4,5 | 228.3 | |
5,5 | ||
484.9 | ||
6,5 | ||
7,5 | ||
8,5 | ||
9.5 | ||
Наименьший по абсолютному значению корень квадратного уравнения m= 0.667
Корень уравнения x=0.33
График временной функции
1.Тарасевич Л. А. Лекционный материал 1 курс 2005;2006гг.
2. Ю. С. Бородич, А. Н. Вальвачёв, А. И. Кузьмич Паскаль для персональных компьютеров" Минск 1991 г.
3.В. А. Скляров, И. Р. Булатова «Знакомьтесь: Паскаль!» Минск, 1988 г.