Лабораторна робота № 8 Використання кольорового графічного режиму побудови графіків 1. Порядок виконання роботи 1.1. Скласти алгоритмічною мовою Фортран програму чисельного диференціювання табличної функції та використати для зображення функції і її похідних на моніторі кольоровий графічний режим. 1.2. Відлагодити на комп’ютері складену програму. 1.3. Ввести числові дані та отримати результат. 1.4. Скласти звіт про роботу й захистити його. 2. Вказівки до виконання роботи 2.1. Чисельне диференціювання табличної функцій При розв’язуванні ряду інженерних задач виникає необхідність диференціювання функцій, заданих у вигляді таблиці (табличних функцій): № вузла 1 2 … n … N
x
…
…
…
…
У цих випадках виконують чисельне диференціювання, яке полягає у наближеному знаходженні похідної у вузлах за спеціальними формулами. Найпростішою є формула для обчислення похідної функції як відношення скінченого приросту функції до відповідного приросту аргументу. Так, похідну у n-му вузлі таблиці, якою задана функція, наближено можна обчислити за формулою
де – крок аргументу. Вона отримана за рахунок заміни функції в околі точки n інтерполяційним поліномом першого степеня. Очевидно, що чим менша величина кроку, тим вища точність обчислення похідної. Точніші формули для обчислення похідної при заданому h (тут і далі будемо вважати, що вузли рівновіддалені, тобто h = const) отримують, замінивши функцію інтерполяційним поліномом степеня, більшого від першого. Так, на відміну від наведеної вище двоточкової формули чисельного диференціювання отримують три-, чотири-, п’ятиточкові і т.д. формули. У цьому випадку для обчислення похідної необхідно у відповідний вираз підставляти значення функції не у двох, а у трьох, чотирьох, п’яти і т.д. сусідніх вузлах. Такі формули відповідно називають три-, чотири- і п’ятиточковими. В інженерних задачах найчастіше використовують триточкові формули:
Очевидно, що при необхідності чисельного диференціювання функції, заданої аналітично, потрібно спочатку протабулювати функцію (як це робилося в лабораторній роботі № 2), а потім, використовуючи формули чисельного диференціювання, обчислити значення похідної в усіх її вузлах. Приклад. Для заданої функції
скласти програму її чисельного диференціювання в діапазоні від a до b при заданій у цьому діапазоні кількості N рівновіддалених вузлів. Порівняти наближені значення похідної з їх точними значеннями. Результати обчислень вивести до файла у вигляді таблиці, яка би містила порядковий номер вузла, значення аргументу х, значення функції у, наближене значення похідної та її точне значення. Вивести на екран монітора кольорове графічне зображення функції та точне і наближене значення її похідної. Задана функція диференціюється аналітично. Формула, за якою обчислюється точне значення похідної, має вигляд:
Один із можливих варіантів програми наведений далі. Він передбачає виведення на екран монітора у кольоровому графічному режимі протабульованої функції y(x) та наближеного і точного значень її похідної Для використання цієї можливості в основну програму слід вставити два оператори (у тексті програми ці оператори виділені жирним шрифтом). Перший з них INCLUDE ‘FGRAPH.FI’ підключає графічну бібліотеку, а другий CALL GRAF(X, Y, Y1, Y1T, N) – це звернення до підпрограми GRAF побудови графіків функції та наближеного і точного значень її похідної у вузлах. У процесі роботи підпрограми GRAF використовуються ще три інших підпрограми: підпрограма VID обчислення максимальних за модулем значення функції й значення похідних функції у вузлах та формування значень функції й значень похідних функції “у відносних одиницях”, підпрограма PRMM визначення максимального і мінімального значень функції чи похідних у вузлах та підпрограма CR_REAL перетворення дійсного числа в ASCII код. Для виконання поставленого завдання студентові необхідно скласти лише основну програму. Підпрограми GRAF, VID, PRMM і CR_REAL складені викладачами кафедри “Електричні машини та апарати” НУ “Львівська політехніка” і містяться у програмному забезпеченні даної дисципліни. Для використання кольорового графічного режиму в оболонці Microsoft Developer Studio слід створити спеціальний проект. Послідовність створення проекту та запуску програми є такою: 1. У верхньому меню знаходимо опцію File, а далі підопцію New, у якій вибираємо зі списку графу Project Workspace, як показано на рис. 14, та натискаємо ОК.
Рис. 14. Оболонка Microsoft Developer Studio 2. Послідовно вказуємо назву, місце розташування та тип проекту, як показано на рис. 15.
Рис. 15. Послідовність створення та вибір типу проекту ПАМ'ЯТАЙТЕ!!! Попередньо у робочій папці (у прикладі це папка Lab8, що записана за адресою D:\Students\EM-11\ ) слід записати набрану основну програму (LAB8.FOR) та файл GRAF.FOR з програмного забезпечення даної дисципліни, де містяться підпрограми GRAF, VID, PRMM і CR_REAL. 3. У верхньому меню знаходимо опцію Insert та підопцію Files into Project. У вікні, яке появиться, слід вибрати файли, що ввійдуть до проекту (відповідно до прикладу це LAB8.FOR та GRAF. FOR) та натиснути ОК або Add. У результаті цієї операції зліва з’явиться віконце з деревом проекту, як показано на рис. 16. 4. Компілюємо файли LAB8.FOR та GRAF. FOR. У результаті виконання такої операції у робочій папці автоматично створиться папка DEBUG, у якій будуть знаходитися файли з розширенням *.obj. 5. Будуємо проект та створюємо файл lab8.ехе. 6. Закриваємо Microsoft Developer Studio. 7. Налаштовуємо відеорежим. Оскільки графічна бібліотека Microsoft Developer Studio використовує 256 кольорів, то для налаштування переключення біжучого відеорежиму у режим 256 кольорів слід виконати наступні операції: знайти файл з іменем проекту і розширенням *.ехе (відповідно до прикладу, файл міститься за адресою: D:\Students\EM-11\lab8\debug); навести мишку на файл, натиснути її праву кнопку та вибрати опцію меню Властивості (англ. Properties); у віконечку знайти закладку Сумісність та вибрати параметри екрану (поставити значок ( навпроти тексту „256 кольорів”), як показано на рис. 17; натиснути ОК. 8. Запускаємо програму (файл lab8.exe) на виконання.
Рис. 16. Вигляд вікна з деревом проекту та файлами, що складають проект
Рис. 17. Вибір параметрів екрану С С С С С C Лабораторна робота № 8 Чисельне диференціювання таблично заданої функції Виконав ст. гр. ЕМ–11 Вдалий Б. Підключення графічної бібліотеки
INCLUDE ‘FGRAPH.FI’
C Оголошення розміру масивів.
С C C C Тут: X Y Y1 Y1T – масив значень аргументу функції у вузлах; – масив значень функції у вузлах; – масив наближених значень похідної функції у вузлах; – масив точних значень похідної функції у вузлах.
C C Кількість вузлів таблично заданої функції не може перевищувати 100, в іншому випадку розміри масивів слід змінити!
DIMENSION X(100), Y(100), Y1(100), Y1T(100)
C Введення вхідних даних у діалоговому режимі. Границі інтервалу
1 2 WRITE (*, 1) FORMAT (2X, ‘A=’,$) READ (*, *) A WRITE (*, 2) FORMAT (2X, ‘B=’,$) READ (*, *) B
C Кількість вузлів
3 WRITE (*, 3) FORMAT (2X, ‘N=’,$) READ (*, *) N
C Обчислення величини кроку
H = (B–A)/(N–1)
C C Обчислення значень аргументу та відповідних їм значень функції у вузлах (табулювання функції)
4 DO 4 I = 1, N X(I) = A + H*(I–1) Y(I) = EXP(–X(I))*SIN(X(I))
C C Чисельне диференціювання функції у вузлах. Обчислення наближеного значення похідної функції у 1-му вузлі
Y1(1) = (–3.*Y(1) + 4.*Y(2) – Y(3))/(2.*H)
C Обчислення наближених значень похідної функції у вузлах від 2-го до (N–1)-го
5 DO 5 I = 2, N–1 Y1(I) = (Y(I + 1) – Y(I – 1))/( 2.*H)
C Обчислення наближеного значення похідної функції у N-му вузлі
Y1(N) = (Y(N – 2) – 4.*Y(N – 1) + 3.*Y(N))/(2.*H)
C Обчислення точних значень похідної функції у всіх вузлах
6 DO 6 I = 1, N Y1T(I) = EXP(–X(I))*(COS(X(I)) – SIN(X(I)))
C Відкривання файла вихідної інформації
OPEN (1, FILE = ‘REZ.DAT’, STATUS = ‘UNKNOWN’)
C Друкування заголовку таблиці
7
* * * WRITE (1, 7) FORMAT (2X, 61(‘–’)/ 2X, ‘| n | Аргумент х | Функція y |’, ‘Похідна (наб.)|Похідна (точ.)|’/ 2X, 61(‘–’))
С C C Друкування номеру вузла, значення аргументу, значення функції, наближеного значення похідної та її точного значення у файл вихідної інформації
С C Звернення до підпрограми побудови графіків функції та наближеного і точного значень її похідної у вузлах
CALL GRAF(X, Y, Y1, Y1T, N)
C Закінчення роботи програми
STOP END
Текст підпрограм GRAF, VID, PRMM і CR_REAL: С С С C Підпрограма GRAF побудови графіків функції та наближеного і точного значень її похідної у вузлах **********************************************************
C
Опис формальних параметрів.
C Вхідні величини:
C C C C C
X Y Y1 Y1T N – масив значень аргументу функції у вузлах; – масив значень функції у вузлах; – масив наближених значень похідної функції у вузлах; – масив точних значень похідної функції у вузлах; – кількість рівновіддалених вузлів на інтервалі диференціювання.
C Вихідні величини:
C
немає.
C **********************************************************
SUBROUTINE GRAF(X, Y, Y1, Y1T, N)
C Підключення графічної бібліотеки
INCLUDE ‘FGRAPH.FD’
C Оголошення розміру масивів
CHARACTER S(11)*1, SS*11 DIMENSION X(N), Y(N), Y1(N), Y1T(N)
C Оголошення використовуваних структурних змiнних
RECORD /VIDEOCONFIG/ VC RECORD /WXYCOORD/ WXY REAL*8 NL, ARG, XR, YR, YMAX, YMIN, DY, XMAX, XMIN, X1, XN DATA NL /0.0/
C C C C C Звернення до підпрограми VID обчислення максимальних за модулем значення YM функції й значення YM1 похідних функції у вузлах та формування значень Y функції й значень Y1, Y1T похідних функції "у відносних одиницях"
CALL VID(Y, Y1, Y1T, N, YM, YM1)
C C C Звернення до підпрограми PRMM визначення максимального YMAX і мінімального YMIN значень функції чи похідних у вузлах
CALL PRMM(Y, Y1, Y1T, N, YMAX, YMIN)
C C Установлення графiчного вiдеорежиму та перевiряння правильностi виконання цiєї функцiї
* IF(SETVIDEOMODE($XRES256COLOR) .EQ. 0) STOP ‘ Помилка встановлення графiчного режиму !’
C Зчитування встановленої (бiжучої) вiдеоконфiгурацiї
CALL GETVIDEOCONFIG(VC)
C Визначення максимальних значень координат для бiжучого вiдеорежиму
MAXX = VC.NUMXPIXELS – 1 MAXY = VC.NUMYPIXELS – 1
C Змiна кольору
STAT = SETCOLOR(11)
C Рисування прямокутника, який обмежує поле графiчного виведення
STAT = RECTANGLE($GBORDER, 0, MAXY, MAXX, 0)
C Установка координат “порта перегляду”
CALL SETVIEWPORT(0, MAXY, MAXX, 0)
C Визначення діапазону зміни аргументу
X1 = X(1) XN = X(N) IF (X1 .GT. 0.0) GOTO 1 IF (XN .LT. 0.0) GOTO 2
DY = YMAX – YMIN IF (YMIN .GT. 0.0) DY = YMAX IF (YMAX .LT. 0.0) DY = –YMIN
C C C C Установлення "вiконних" координат. Використовуються попередньо визначенi максимальне й мiнiмальне значення функцiї, дiапазон змiни аргументу. Врахований запас (приблизно 10-20%) для пiдписiв графiка та координатних осей
С C C C C Підпрограма VID обчислення максимальних за модулем значення YM функції й значення YM1 похідних функції у вузлах та формування значень Y функції й значень Y1, Y1T похідних функції “у відносних одиницях”
SUBROUTINE VID(Y, Y1, Y1T, N, YM, YM1)
С **********************************************************
C
Опис формальних параметрів.
С Вхідні величини:
C C C C
Y Y1 Y1T N – масив значень функції у вузлах; – масив наближених значень похідної функції у вузлах; – масив точних значень похідної функції у вузлах; – кількість рівновіддалених вузлів на інтервалі диференціювання.
С Вихідні величини:
C C C C C
Y Y1 Y1T YM YM1 – масив значень функції у вузлах “у відносних одиницях”; – масив наближених значень похідної функції у вузлах “у відносних одиницях”; – Y1T - масив точних значень похідної функції у вузлах “у відносних одиницях”; – максимальне за модулем значення функції у вузлах; – максимальне за модулем значення похідних функцій у вузлах.
С C ********************************************************** Оголошення розміру масивів
DIMENSION Y(N), Y1(N), Y1T(N)
С Обчислення максимального за модулем значення функції у вузлах
1 YM = ABS(Y(1)) DO 1 I=2, N IF (YM .LT. ABS(Y(I))) YM = ABS(Y(I)) CONTINUE
С Обчислення максимального за модулем значення похідних функцій у вузлах
2 3 YM1 = ABS(Y1(1)) DO 2 I=2, N IF (YM1 .LT. ABS(Y1(I))) YM1 = ABS(Y1(I)) CONTINUE DO 3 I=1, N IF (YM1 .LT. ABS(Y1T(I))) YM1 = ABS(Y1T(I)) CONTINUE
С Формування значень функції “у відносних одиницях”
4 DO 4 I=1, N Y(I) = Y(I)/YM
С Формування наближених значень похідних функції “у відносних одиницях”
5 DO 5 I=1, N Y1(I) = Y1(I)/YM1
С Формування точних значень похідних функції “у відносних одиницях”
6 DO 6 I=1, N Y1T(I) = Y1T(I)/YM1
C Закінчення роботи підпрограми
RETURN END
C C C Підпрограма PRMM визначення максимального YMAX і мінімального YMIN значень функції чи похідних у вузлах
SUBROUTINE PRMM(Y, Y1, Y1T, N, YMAX, YMIN)
C **********************************************************
C Вхідні величини:
C C C C
Y Y1 Y1T N – масив значень функції у вузлах; – масив наближених значень похідної функції у вузлах; – масив точних значень похідної функції у вузлах; – кількість рівновіддалених вузлів на інтервалі диференціювання.
C Вихідні величини:
YMAX YMIN – максимальне значення функції чи похідних у вузлах; – мінімальне значення функції чи похідних у вузлах.
C ********************************************************** Оголошення розміру масивів
C **********************************************************
10 15 20 30 40 50 70 80 60 CHARACTER S(11)*1,SI(8)*1 A = ABS(CN) IF (A .EQ. 0.) GOTO 15 DO 10 I = 0, 1000 TEN = 10**I IF (A .LT. 1.) THEN LL = 1 B = A*TEN ELSE IF (A. GE. 1.) THEN LL = –1 B = A/TEN END IF IF (B .LE. 1.0 .AND. B .GE. 0.1) GOTO 20 CONTINUE WRITE (*, *) ‘ ПОМИЛКА’ B = 0. LL = 0 I = 0 MM = B*10000000 IF (KZ .EQ. 0) THEN IOS = MOD(MM, 100) IF (IOS .GT. 50) MM = MM+100 CALL CR_INT(MM, SI) S(1) = ‘ ’ S(3) = ‘.’ S(8) = ‘E’ S(9) = ‘+’ IF (A .LT. 1.0) S(9) = ‘–’ IF (CN .LT. 0.0) S(1) = ‘–’ DO 30 J=1,8 IF (SI(J) .EQ. ‘ ’) GOTO 30 S(2) = SI(J) GOTO 40 CONTINUE CONTINUE DO 50 J1 = 1, 4 IF (J+J1 .GT. 8) THEN S(J1+3) = ‘0’ GOTO 50 END IF S(J1+3) = SI(J+J1) CONTINUE CALL CR_INT(I+LL, SI) S(10) = SI(7) IF (SI(7) .EQ. ‘ ’) S(10) = ‘0’ S(11) = SI(8) ELSE IF(KZ .EQ. 1) THEN S(9) = ‘*’ S(10) = ‘.’ S(11) = ‘*’ DO 70 J = 1, 8 S(J) = ‘ ’ CONTINUE IF (A .GT. 999999.9) GOTO 60 AA = MM/(10.**(6+LL*I))+0.5 MM = AA IF (CN .LT. 0.0) MM = –MM CALL CR_INT(MM, SI) S(11) = SI(8) DO 80 J = 1, 7 S(2+J) = SI(J) CONTINUE CONTINUE END IF
C Закінчення роботи підпрограми
RETURN END
Якщо за наведеною програмою чисельного диференціювання виконати обчислення в діапазоні від a = –1,0 до b = 2,0 при заданій кількості N = 21 рівновіддалених вузлів, то одержимо файл вихідної інформації REZ.DAT, у якому буде записана таблиця: ----------------------------------------------------------------------------- | n | Аргумент х | Функція y |Похідна (наб.)|Похідна (точ.)| ----------------------------------------------------------------------------- | 1| –.100E+01 | –.229E+01 | .37615E+01 | .37560E+01 | | 2| –.850E+00 | –.176E+01 | .33002E+01 | .33019E+01 | | 3| –.700E+00 | –.130E+01 | .28393E+01 | .28375E+01 | | 4| –.550E+00 | –.906E+00 | .23878E+01 | .23836E+01 | | 5| –.400E+00 | –.581E+00 | .19609E+01 | .19550E+01 | | 6| –.250E+00 | –.318E+00 | .15687E+01 | .15618E+01 | | 7| –.100E+00 | –.110E+00 | .12174E+01 | .12100E+01 | | 8| .500E–01 | .475E–01 | .90997E+00 | .90250E+00 | | 9| .200E+00 | .163E+00 | .64698E+00 | .63975E+00 | | 10| .350E+00 | .242E+00 | .42710E+00 | .42033E+00 | | 11| .500E+00 | .291E+00 | .24766E+00 | .24149E+00 | | 12| .650E+00 | .316E+00 | .10514E+00 | .99657E–01 | | 13| .800E+00 | .322E+00 | –.45130E–02 | –.92784E–02 | | 14| .950E+00 | .315E+00 | –.85572E–01 | –.89620E–01 | | 15| .110E+01 | .297E+00 | –.14231E+00 | –.14567E+00 | | 16| .125E+01 | .272E+00 | –.17883E+00 | –.18155E+00 | | 17| .140E+01 | .243E+00 | –.19896E+00 | –.20110E+00 | | 18| .155E+01 | .212E+00 | –.20616E+00 | –.20779E+00 | | 19| .170E+01 | .181E+00 | –.20351E+00 | –.20470E+00 | | 20| .185E+01 | .151E+00 | –.19367E+00 | –.19448E+00 | | 21| .200E+01 | .123E+00 | –.18084E+00 | –.17938E+00 | ----------------------------------------------------------------------------- На екран монітора виведеться кольорове графічне зображення функції та її похідних у вигляді, наведеному на рис. 14 (на цьому рисунку графічне зображення подано чорно-білим). З рис. 18 видно, що наближене значення похідної функції (суцільна лінія) і точне значення її похідної (пунктирна лінія) практично збігаються.
Рис. 18. Графічне зображення функції та наближене і точне значення її похідної 2.2. Завдання Скласти програму чисельного диференціювання функції. Результати обчислень записати до файла. Вивести на екран монітора графічне зображення функції та наближене і точне значення її похідної, порівняти наближені значення похідної з точними. Дані для розрахунку наведені в табл. 9. Таблиця 9 Дані для чисельного диференціювання № варіанту