Дослідження методів інтерполяції (работа 1)

МІНІСТЕРСТВО ОСВІТИ ТА НАУКИ УКРАЇНИ

Вінницький національний технічний університет

Факультет автоматики і комп’ютерних систем управління

Кафедра автоматики та інформаційно-вимірювальної техніки

Дослідження методів інтерполяції

Пояснювальна записка

до курсової роботи з дисципліни "Моделювання на ЕОМ"

Завдання на курсову роботу

Виконав:

студент групи 2АВ-06 О. Г Кирста

Перевірив:

к.т.н., доц. В.В. Кабачій

Вінниця, 2009

Анотація

Кирста О.Г. Дослідження методів інтерполяції. Вінниця, ВНТУ. - 2006.

Українська мова, стор., іл.

В курсовій роботі на прикладі інтерполяції напруги вольтметра розглянуто методи інтерполяції: ітераційний та метод розподілених різниць. Методи алгоритмізовано і реалізовано на ЕОМ в середовищі мови програмування Turbo Pascal 7.0. Наводяться блок-схема і лістинг програми.

Зміст

Вступ

1. Короткі теоретичні відомості

1.1 Задача інтерполяції

1.2 Інтерполяційна формула Лагранжа

1.3 Метод розподілених різниць

2. Алгоритми методів

3. Алгоритмізація розв’язання задачі

3.1 Вхідні та вихідні дані

3.2 Структура програми

3.3 Розробка плану дослідження роботи програми

4. Розв’язання задачі в пакеті прикладних програм

5. Аналіз результатів моделювання

6. Інструкція користувачеві

Висновки

Література

Додатки

Вступ

В наш час, коли надзвичайно швидкими темпами розвивається наука і техніка, людина освоює все нові і нові галузі, все більше проникає як в надра землі так і за її межі, з’являється багато нових і досить складних задач, рішення яких потребує нових методів і нових підходів. Зокрема надзвичайно велика кількість задач електроніки, електротехніки, механіки, кібернетики та ряду інших галузей науки вимагають від вчених інженерів вирішення досить складних математичних задач, які вимагають певного аналізу та нестандартного підходу до вирішення.

З’являються задачі, які не можна розв’язати за допомогою класичної математики і отримати точний розв’язок, і взагалі досить часто про отримання точного розв’язку не доводиться говорити, оскільки отримати його при існуючих умовах просто неможливо. Тож ставляться задачі отримати приблизні розв’язки, але якомога близькі до точних. Тому в таких задачах використовуються різні наближені методи рішення тієї чи іншої задачі.

Чисельні методи направлені на вирішення задач, що виникають на практиці. Вирішення задачі чисельними методами зводиться до арифметичних та логічних операцій над числами, що вимагає застосування обчислювальної техніки. Умови і рішення задач найчастіше є наближеними, тобто мають похибки, причинами яких є невідповідність побудованої математичної моделі реальному об’єкту, похибки методів обчислень, похибки округлення тощо.

Обчислювальна техніка сьогодення є потужним засобом для фактичного виконання обчислень. Завдяки цьому в багатьох випадках стало можливим відмовитись від наближеного трактування прикладних задач і перейти до їх вирішення в точній постановці. Розумне використання сучасної обчислювальної техніки не можливе без вмілого застосування чисельних методів.

1. Короткі теоретичні відомості

1.1 Задача інтерполяції

Мета інтерполяції - побудова функції , яка приймає в окремих точках (вузли інтерполяції) значення,

(1)

що збігається з раніше заданими значеннями в цих точках невідомої функції . Геометрично це означає, що потрібно знайти криву певного типу, яка проходить через систему точок (рисунок 1).

Рисунок 1. Інтерполяція даних

В загальних випадках ця задача має нескінчену множину розв’язків чи зовсім не має розв’язку, але вона стає однозначною, якщо замість довільної функції шукати поліном ступеня не вище , який задовольняє умову (1), тобто

(2)

Інтерполяційну формулу , як правило, використовують для наближеного обчислення значень даної функції для . Така операція зветься інтерполяцією. Треба відзначити, що розрізняють інтерполяцію в вузькому розумінні, коли , та екстраполяцію, коли знаходиться за межами інтервалу , тобто чи . [1]

1.2 Інтерполяційна формула Лагранжа

Інтерполяція за Лагранжем вживається в загальному випадку для довільно розташованих вузлів.

Інтерполяційний поліном для методу Лагранжа представлений у вигляді:

, (3)

де всі (j=0,…, n) - поліноми ступеня n, коефіцієнти яких можна знайти з допомогою (n+1) рівняння: .

Для полінома, який шукаємо, отримаємо:

(4)

Формулу (1.8) називають інтерполяційний многочлен Лагранжа.

Треба відзначити дві головні властивості поліномів Лагранжа:

(5) 2)

якщо лінійно залежить від , то слушний принцип суперпозиції: інтерполяційний поліном суми декількох функцій дорівнює сумі інтерполяційних поліномів доданків.

Похибка при інтерполяції за Лагранжем може бути оцінена таким чином:

(6)

де . (7)

1.3 Метод розподілених різниць

Інтерполяційні формули можна отримати, вживаючи визначення поділених різниць.

Так відношення

(8)

називається розподіленою різницею першого порядку, а відношення

(9)

розподіленою різницею другого порядку.

Розподілені різниці порядку n можна отримати з рекурентного співвідношення

. (10)

Для інтерполяції можна використати інтерполяційну формулу Ньютона для нерівно віддалених значень аргументу: [1]

(11).

2. Алгоритми методів

Для інтерполяції методом розподілених різниць спочатку необхідно обчислити за формулою (8) розподілені різниці першого порядку, далі за формулою (9) - розподілені різниці 2 порядку, і так визначати розподілені різниці до порядку n-1, де n - кількість відомих значень функцій при відповідних відомих значеннях аргументу, використовуючи формулу (10). Відповідні обчислення просто реалізувати за допомогою циклу, в я кому значення розподілених різниць вищих порядків будуть обчислюватися за відомими значеннями аргументів та функцій і обчислених на попередньому кроці розподілених різниць нижчих порядків.

Після цього за формулою (11) здійснюється інтерполяція в необхідних точках.

При інтерполяції методом Лагранжа використовується формула (4). Спочатку за формулою (5) визначаються коефіцієнти , які далі множаться на відповідні значення функції, і шуканий інтерполяційний поліном визначається як сума добутків коефіцієнтів на відповідні значення функції.

3. Алгоритмізація розв’язання задачі

3.1 Вхідні та вихідні дані

Для розв’язання поставленої задачі потрібні певні вхідні данні, на основі яких будуть проводитись обчислення. Вхідними даними для інтерполяції є значення напруги при певних значеннях температури. Вони подаються у вигляді тарировочної таблиці 1.

Таблиця 1. Тарировочна таблиця для термопари

20

40

60

80

100

120

-0,67

-0,25

-0,17

0,61

1,06

1,52

Вихідними даними є значення напруги при температурах .

Дані, які вводяться для обчислення зміни температури термопари мають тип real, тобто вони є даними дійсного типу. Всі вхідні та вихідні данні можна звести в таблицю.

Таблиця 2. Вхідні та вихідні данні

Назва змінної

Ідентифікатор

Тип

1

Значення Т,

t [i]

Real

2

Значення U, мВ

u [i]

Real

3

Результат U (75), мВ

РР

Real

4

Результат U (93), мВ

ZZ

Real

3.2 Структура програми

Программа використовує функції стандартних модулів Crt і Graph. Модуль Crt забезпечує роботу з клавіатурою та екраном в текстовому режимі, а модуль Graph забезпечує роботу з графікою. [2]

В розробленій програмі використовується текстове меню, тобто всі функції можуть використовуватись нескінченну кількість разів. Така властивість забезпечується завдяки використанню циклу в головній програмі, вихід з якого здійснюється лише при одній умові: натисненні послідовно клавіш. "Esc" та "Enter".

В програмі використовується три процедури: перша використовується для відображення на екрані тарировочної таблиці для термопари, а друга - для графічного представлення результатів інтерполяції, третя - для виведення на екран меню. Решта процедур та обчислень входять в склад основної програми.

В основній програмі проводиться обробка запитів користувача та інтерполяція напруги в точках у відповідності до заданого методу. Інтерфейсна частина реалізована у текстовому режимі та складається з виводу на екран запитів до користувача та обробки натиснутих клавіш. Виведення даних виконано окремо для кожного методу. Результати виводяться на екран графічно та в текстовій формі.

Рисунок 2. Логічна схема основної програми

3.3 Розробка плану дослідження роботи програми

Для впевненості роботи програми проведемо її тестування. Але тестування необхідно виконувати в два основних етапи: тестування головної програми, тобто достовірність роботи головного меню програми і самих пунктів меню, та правильність обчислень за заданими методами.

Перевіримо правильність роботи програми. Запускаємо програму. При запуску програми (ехе-файл чи з середовища Турбо Паскаль) з'являється головне меню програми (рисунок 2). Вибір необхідного пункту меню здійснюється натисканням відповідних цифрових клавіш на клавіатурі, вихід з програми - послідовно клавіш. "Esc" та "Enter".

Рисунок 3. Меню програми

Натискаємо клавішу "Esc", за нею - "Enter" - програма закривається.

Натискаємо клавішу "1" - програма видає результати інтерполяції напруги методом розподілених різниць в заданих точках.

Рисунок 4. Результати інтерполяції напруги методом розподілених різниць в заданих точках

Натискаємо клавішу "2" - програма видає результати інтерполяції напруги за методом Лагранжа в заданих точках.

Рисунок 5. Результати інтерполяції напруги за методом Лагранжа в заданих точках

Отже, програма розв’язує задачу інтерполяції в заданих точках. При цьому використовуються дані з таблиці 1.

Оскільки інтерполяційні поліноми повинні задовільняти умову (2), то результатами роботи програми при , де - задані таблично значення температури, повинні бути задані значення напруги при відповідних значеннях температури. Для перевірки правильності роботи програми перевіримо, чи виконується дана умова. Замінюємо значення температури на , і програма видає результати, показані на рисунку (6).

Рисунок 6. Результати інтерполяції напруги вольтметра при температурі .

Отже, розроблена програма є практичною реалізацією поставленого завдання.

4. Розв’язання задачі в пакеті прикладних програм

Інтерполяцію напруги в точках здійснимо в пакеті прикладних програм MathCAD, використавши процедуру linterp (vx,vy,x), де vx - вектор значень аргументів, vy - вектор відповідних значень функції, x - задані значення аргументу функції, для яких треба вирішити задачу інтерполяції. Результати можна представити як значення функції при заданих значеннях аргументу, так і у вигляді графіка.

Рисунок 7. Результати вирішення задачі в пакеті MathCAD

З рисунку видно, що результатом інтерполяції при є значення напруги U=0,415 мВ, а при - U=0,903 мВ.

5. Аналіз результатів моделювання

Визначимо похибки моделювання, прийнявши за точний розв’язок розв’язок в пакеті прикладних програм MathCAD.

Абсолютні похибки знайдемо за формулою

, (12)

де - абсолютна похибка, - значення напруги, отримане в пакеті MathCAD, - значення напруги, яке є результатом роботи програми.

Відносні похибки обчислимо за формулою

. (13)

Абсолютна похибка при застосуванні методу розподілених різниць дорівнює при

, при

.

Відносна похибка для даного методу при

, а при .

Визначимо похибки, що виникають при застосуванні методу Лагранжа. При

, при

.

Відносна похибка для даного методу при

, а при

.

Результати роботи програми є однаковими, як при застосуванні методу Лагранжа, так і методу розподілених різниць, похибки обчислень є суттєвими.

6. Інструкція користувачеві

Програма розроблена з використанням мови програмування 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-----------------------------------------------------}

procedure graphik (driver,mode,x,x1,dx,y,y1,dy0,dy1,dy2,dy3,dy4,dy5,dy6,dy7: integer);

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]));

{writeln (a2 [i]: 3: 7); } end;

{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.

Додаток Г. Результати роботи програми