№
|
Назва змінної
|
Ідентифікатор
|
Тип
|
1
|
Значення Т,
|
t [i]
|
Real
|
2
|
Значення U, мВ
|
u [i]
|
Real
|
3
|
Результат U (75),
мВ
|
РР
|
Real
|
4
|
Результат U (93),
мВ
|
ZZ
|
Real
|
Программа використовує функції стандартних
модулів Crt і Graph. Модуль Crt забезпечує роботу з клавіатурою та екраном в
текстовому режимі, а модуль Graph забезпечує роботу з графікою. [2]
В розробленій програмі використовується
текстове меню, тобто всі функції можуть використовуватись нескінченну кількість
разів. Така властивість забезпечується завдяки використанню циклу в головній
програмі, вихід з якого здійснюється лише при одній умові: натисненні
послідовно клавіш. "Esc" та "Enter".
В програмі використовується три процедури: перша
використовується для відображення на екрані тарировочної таблиці для термопари,
а друга - для графічного представлення результатів інтерполяції, третя - для
виведення на екран меню. Решта процедур та обчислень входять в склад основної
програми.
В основній програмі проводиться обробка
запитів користувача та інтерполяція напруги в точках у відповідності до
заданого методу. Інтерфейсна частина реалізована у текстовому режимі та
складається з виводу на екран запитів до користувача та обробки натиснутих
клавіш. Виведення даних виконано окремо для кожного методу. Результати
виводяться на екран графічно та в текстовій формі.
Рисунок 2. Логічна схема основної програми
Для впевненості роботи програми проведемо її
тестування. Але тестування необхідно виконувати в два основних етапи: тестування
головної програми, тобто достовірність роботи головного меню програми і самих
пунктів меню, та правильність обчислень за заданими методами.
Перевіримо правильність роботи програми. Запускаємо
програму. При запуску програми (ехе-файл чи з середовища Турбо Паскаль) з'являється
головне меню програми (рисунок 2). Вибір необхідного пункту меню здійснюється
натисканням відповідних цифрових клавіш на клавіатурі, вихід з програми - послідовно
клавіш. "Esc" та "Enter".
Рисунок 3. Меню програми
Натискаємо клавішу "Esc", за нею -
"Enter" - програма закривається.
Натискаємо клавішу "1" - програма
видає результати інтерполяції напруги методом розподілених різниць в заданих
точках.
Рисунок 4. Результати інтерполяції напруги
методом розподілених різниць в заданих точках
Натискаємо клавішу "2" - програма
видає результати інтерполяції напруги за методом Лагранжа в заданих точках.
Рисунок 5. Результати інтерполяції напруги за
методом Лагранжа в заданих точках
Отже, програма розв’язує задачу інтерполяції в
заданих точках. При цьому використовуються дані з таблиці 1.
Оскільки інтерполяційні поліноми повинні
задовільняти умову (2), то результатами роботи програми при , де -
задані таблично значення температури, повинні бути задані значення напруги при відповідних значеннях температури. Для
перевірки правильності роботи програми перевіримо, чи виконується дана умова. Замінюємо
значення температури на , і програма
видає результати, показані на рисунку (6).
Рисунок 6. Результати інтерполяції напруги
вольтметра при температурі .
Отже, розроблена програма є практичною
реалізацією поставленого завдання.
Інтерполяцію напруги в точках здійснимо в пакеті прикладних програм
MathCAD, використавши процедуру linterp (vx,vy,x), де vx - вектор значень
аргументів, vy - вектор відповідних значень функції, x - задані значення
аргументу функції, для яких треба вирішити задачу інтерполяції. Результати
можна представити як значення функції при заданих значеннях аргументу, так і у
вигляді графіка.
Рисунок 7. Результати вирішення задачі в
пакеті MathCAD
З рисунку видно, що результатом інтерполяції
при є значення напруги U=0,415 мВ, а
при - U=0,903 мВ.
Визначимо похибки моделювання, прийнявши за
точний розв’язок розв’язок в пакеті прикладних програм MathCAD.
Абсолютні похибки знайдемо за формулою
, (12)
де - абсолютна
похибка, - значення напруги, отримане в
пакеті MathCAD, - значення напруги,
яке є результатом роботи програми.
. (13)
Абсолютна похибка при застосуванні методу
розподілених різниць дорівнює при
, при
.
Відносна похибка для даного методу при
, а при .
Визначимо похибки, що виникають при
застосуванні методу Лагранжа. При
, при
.
Відносна похибка для даного методу при
, а при
.
Результати роботи програми є однаковими, як
при застосуванні методу Лагранжа, так і методу розподілених різниць, похибки
обчислень є суттєвими.
Програма розроблена з використанням мови
програмування Turbo Pascal 7.0 та має назву Interpol.
Для запуску програми необхідно запустити файл
Interpol. exe.
Після запуску програми з’являється меню,
реалізоване в текстовому режимі, яке дозволяє вибрати необхідний метод інтерполяції.
Для вибору методу розподілених різниць
необхідно натиснути клавішу "1", для вибору методу Лагранжа - клавішу
"2".
Після вибору методу для графічного
представлення результатів інтерполяції функції в точках необхідно натиснути
клавішу "Enter".
Для виходу з програми необхідно послідовно
натиснути клавіші "Esc" та "Enter".
В даній курсовій роботі було вирішено задачу
інтерполяції напруги вольтметра в точках .
Розроблено програму, що розв’язує задачу
методами розподілених різниць та Лагранжа. Задача інтерполяції вирішена в
пакеті прикладних програм MathCAD, і визначено похибки моделювання.
Програма при вирішенні задачі допускає суттєві
похибки, при цьому похибка обчислення напруги збільшується зі збільшенням
значенням температури.
Розроблена програма є практичною реалізацією
поставленого завдання. Програма наочно, а саме, в графічному та текстовому
вигляді, дозволяє реалізувати процес інтерполяції.
1. Квєтний Р.Н. Методи
комп’ютерних обчислень. Навчальний посібник. -Вінниця: ВДТУ, 2001.
2. Фаронов В.В. Турбо Паскаль
7.0. Начальний курс. Учебное пособие. -М.: Издательство "ОМД Групп", 2003.
3. Бахвалов Н.С., Жидков
Н.П., Кобельков Г.М. Численные методы. - М.: Наука, 1987.
4. Дубовий В. М,
Квєтний Р.Н. Основи застосування ЕОМ у інженерній діяльності. -К.: ІСДО
України, 1994.
5. Глинський Я.М., Анохін
В. Є., Ряжська В.А. Паскаль. 3-є вид. - Львів: "Деол", 2002.
Додаток А. Блок-схема основної програми
Додаток Б. Лістинг програми
Program interpol;
Uses Crt,Graph;
Const t1=75; t2=93;
T: array [0. .5] of integer = (20,40,60,80,100,120);
U: array [0. .5] of real = (-0.67,-0.25,-0.17,0.61,1.06,1.52);
Var
A1: array [0. .5] of real;
A2: array [0. .5] of real;
A3: array [0. .5] of real;
A4: array [0. .5] of real;
A5: array [0. .5] of real;
driver,mode, i,j: integer;
x,x1,dx,y,y1,dy0,dy1,dy2,dy3,dy4,dy5,dy6,dy7: integer;
e,PP,P1,P2,Z1,Z2,ZZ: real; Ch: char;
LL0,LL1,LL2,LL3,LL4,LL5: real;
{----------------------------------------------------------------------------------------}
{TABLUCIA}
{----------------------------------------------------------------------------------------}
procedure tabluca;
begin
TextBackGround (white);
ClrScr;
TextColor (red);
Writeln ('');
GoToXY (20,10);
Writeln ('TARUROVO4NA TABLUCIA DLIA TERMOPARU');
GoToXY (15,12);
Writeln ('------------------------------------------------');
GoToXY (15,13);
Writeln ('| T,C | 20 | 40 | 60 | 80 | 100 |
120 |');
GoToXY (15,14);
Writeln ('------------------------------------------------');
GoToXY (15,15);
Writeln ('|U,mV | - 0.67| - 0.25| - 0.17| 0.61
| 1.06 | 1.52|');
GoToXY (15,16);
Writeln ('------------------------------------------------');
end;
{----------------------------------------------------------------------------------------}
{-------------------------Graphik-----------------------------------------------------}
begin
driver: =detect;
initgraph (driver,mode,'C: \progra~1\TP\bgi');
setviewport (20, 20,getmaxx-59,getmaxy-59,true);
clearviewport;
setbkcolor (white);
x: =20; y: =20;
dy0: = (getmaxy div 2 - (trunc (80*u [0])));
dy1: = (getmaxy div 2 - (trunc (80*u [1])));
dy2: = (getmaxy div 2 - (trunc (80*u [2])));
dy3: = (getmaxy div 2 - (trunc (80*PP)));
dy4: = (getmaxy div 2 - (trunc (80*u [3])));
dy5: = (getmaxy div 2 - (trunc (80*ZZ)));
dy6: = (getmaxy div 2 - (trunc (80*u [4])));
dy7: = (getmaxy div 2 - (trunc (80*u [5])));
dx: =t [1] -t [0] ;
setcolor (red);
line (4*dx,dy0,6*dx,dy1);
line (6*dx,dy1,8*dx,dy2);
line (8*dx,dy2,6*dx+t1,dy3);
line (6*dx+t1,dy3,10*dx,dy4);
line (10*dx,dy4,7*dx+t2,dy5);
line (7*dx+t2,dy5,12*dx,dy6);
line (12*dx,dy6,14*dx,dy7);
repeat
setcolor (green);
line (20,y,getmaxx,y);
line (x, 20,x,getmaxy);
x: =x+20; y: =y+20;
y1: =getmaxy div 2;
setcolor (blue);
outtextxy (2*20,y1,'0 20 40 60 80 100 120');
outtextxy (20,y1-60*2,' 1.5');
outtextxy (20,y1-40*2,' 1.0');
outtextxy (20,y1-20*2,' 0.5');
outtextxy (20,y1+60*2,'-1.5');
outtextxy (20,y1+40*2,'-1.0');
outtextxy (20,y1+20*2,'-0.5');
until keypressed;
if readkey=#0 then driver: =ord (readkey);
closegraph
end;
{---------------------ZASTAVKA--------------------------------------------------}
{---------------------------------------------------------------------------------------}
procedure zastavka;
begin
clrscr; GoToXY (14,2);
Writeln (' (C) CopyRight by Alexander Kyrsta,
BHTY, 1AM-03');
GoToXY (29,5); Writeln ('PROGRAM INTERPOL,
2006');
Writeln; GoToXY (32,13); Writeln ('VUBERITb
METOD'); Writeln;
GoToXY (24,15); Writeln ('1-METOD ROZPODILENUX
RIZNUCb. ');
GoToXY (24,17); Writeln (' 2-METOD LAGRANJA. ');
GotoXY (24,25); Writeln (' Press Esc+Enter for
exit ');
end;
{-------------------------------------------------------------------}
{------------------OSNOVNA PROGRAMA------------------------------------}
begin
zastavka;
repeat
ch: =readkey;
case ch of
{-------------METOD ROZPODILENUX RIZNUCb----------------------------}
#49: begin
{ROZPODILENI RIZNUCI 1 PORIADKY}
for i: =0 to 4 do begin
a1 [i]: = ( (u [i+1] -u [i]) / (t [i+1] -t [i]));
{writeln (a1 [i]: 3: 6); } end;
{ROZPODILENI RIZNUCI 2 PORIADKY}
for i: =0 to 3 do begin
a2 [i]: = ( (a1 [i+1] -a1 [i]) / (t [i+2] -t [i]));
{ROZPODILENI RIZNUCI 3 PORIADKY}
for i: =0 to 2 do begin
a3 [i]: = ( (a2 [i+1] -a2 [i]) / (t [i+3] -t [i]));
{writeln (a3 [i]: 3: 16); } end;
{ROZPODILENI RIZNUCI 4 PORIADKY}
for i: =0 to 1 do begin
a4 [i]: = ( (a3 [i+1] -a3 [i]) / (t [i+4] -t [i]));
{writeln (a4 [i]: 3: 16); } end;
{ROZPODILENI RIZNUCI 5 PORIADKY}
for i: =0 to 0 do begin
a5 [i]: = ( (a4 [i+1] -a4 [i]) / (t [i+5] -t [i]));
{writeln (a5 [i]: 3: 16); } end;
clrscr; tabluca;
P1: =u [0] +a1 [0] * (t1-t [0]) +a2 [0] * (t1-t
[0]) * (t1-t [1]) +a3 [0] * (t1-t [0]) * (t1-t [1]) * (t1-t [2]);
P2: =a4 [0] * (t1-t [0]) * (t1-t [1]) * (t1-t
[2]) * (t1-t [3]) +a5 [0] * (t1-t [0]) * (t1-t [1]) * (t1-t [2]) * (t1-t [3]) *
(t1-t [4]);
PP: =P1+P2;
Z1: =u [0] +a1 [0] * (t2-t [0]) +a2 [0] * (t2-t
[0]) * (t2-t [1]) +a3 [0] * (t2-t [0]) * (t2-t [1]) * (t2-t [2]);
Z2: =a4 [0] * (t2-t [0]) * (t2-t [1]) * (t2-t
[2]) * (t2-t [3]) +a5 [0] * (t2-t [0]) * (t2-t [1]) * (t2-t [2]) * (t2-t [3]) *
(t2-t [4]);
ZZ: =Z1+Z2;
writeln; GoToXY (25,17);
writeln ('Pru T=75C U=',PP: 2: 6,'mV');
Writeln; GoToXY (25,18);
writeln ('Pru T=93C U=',ZZ: 2: 6,'mV');
GoToXY (30,22);
writeln ('PRESS ENTER');
readln;
graphik (x,x1,dx,y,y1,dy0,dy1,dy2,dy3,dy4,dy5,dy6,dy7,driver,mode);
end;
{-------METOD LAGRANJA-------------------------------------------------------}
#50: begin
clrscr; tabluca;
e: =t1;
LL0: =u [0] * (e-40) * (e-60) * (e-80) * (e-100)
* (e-120) / ( (20-40) * (20-60) * (20-80) * (20-100) * (20-120));
LL1: =u [1] * (e-20) * (e-60) * (e-80) * (e-100)
* (e-120) / ( (40-20) * (40-60) * (40-80) * (40-100) * (40-120));
LL2: =u [2] * (e-20) * (e-40) * (e-80) * (e-100)
* (e-120) / ( (60-20) * (60-40) * (60-80) * (60-100) * (60-120));
LL3: =u [3] * (e-20) * (e-40) * (e-60) * (e-100)
* (e-120) / ( (80-20) * (80-40) * (80-60) * (80-100) * (80-120));
LL4: =u [4] * (e-20) * (e-40) * (e-60) * (e-80)
* (e-120) / ( (100-20) * (100-40) * (100-60) * (100-80) * (100-120));
LL5: =u [5] * (e-20) * (e-40) * (e-60) * (e-80)
* (e-100) / ( (120-20) * (120-40) * (120-60) * (120-80) * (120-100));
PP: =LL0+LL1+LL2+LL3+LL4+LL5;
writeln; GoToXY (25,17);
writeln ('Pru T=75C U=',PP: 3: 6,'mV');
e: =t2;
LL0: =u [0] * (e-40) * (e-60) * (e-80) * (e-100)
* (e-120) / ( (20-40) * (20-60) * (20-80) * (20-100) * (20-120));
LL1: =u [1] * (e-20) * (e-60) * (e-80) * (e-100)
* (e-120) / ( (40-20) * (40-60) * (40-80) * (40-100) * (40-120));
LL2: =u [2] * (e-20) * (e-40) * (e-80) * (e-100)
* (e-120) / ( (60-20) * (60-40) * (60-80) * (60-100) * (60-120));
LL3: =u [3] * (e-20) * (e-40) * (e-60) * (e-100)
* (e-120) / ( (80-20) * (80-40) * (80-60) * (80-100) * (80-120));
LL4: =u [4] * (e-20) * (e-40) * (e-60) * (e-80)
* (e-120) / ( (100-20) * (100-40) * (100-60) * (100-80) * (100-120));
LL5: =u [5] * (e-20) * (e-40) * (e-60) * (e-80)
* (e-100) / ( (120-20) * (120-40) * (120-60) * (120-80) * (120-100));
ZZ: =LL0+LL1+LL2+LL3+LL4+LL5;
writeln; GoToXY (25, 19);
writeln ('Pru T=93C U=',ZZ: 3: 6,'mV');
GoToXY (30,22);
writeln ('PRESS ENTER');
readln;
graphik (x,x1,dx,y,y1,dy0,dy1,dy2,dy3,dy4,dy5,dy6,dy7,driver,mode);
end;
end;
zastavka;
until ch=#27;
readln
end.
Додаток Г. Результати роботи програми