- •Расчетно-графическая работа №2
- •Аппроксимация данных методом наименьших квадратов
- •Решение системы линейных алгебраических уравнений методом Гаусса
- •Вариант задания
- •Исходный текст главной программы
- •Implicit none ! указание обязательного объявления переменых
- •Integer I ! счетчик точек полинома
- •Integer(2) xe, ye ! xe,ye - размеры экрана в пикселях
- •Integer(2) status ! целый результат графических функций
- •Секция contains с определением внутренних подпрограмм
- •Integer mm
- •Integer I,j
- •Integer m
- •Integer I,j,k
- •Integer k1,n1
- •Методом наименьших квадратов (Контрольные вопросы – правильные варианты)
Исходный текст главной программы
use msflib ! подключение модуля стандартных процедур
Implicit none ! указание обязательного объявления переменых
!-----------------------------------------------------------
integer,parameter::fi=1 ! устройство ввода
integer,parameter::fpw=2 ! устройство вывода
integer,parameter::MAX=100 ! максимальное количество точек
integer,parameter::NT=150 ! количество точек кривой полинома
real(8),parameter::D_X=0.05 ! припуск на диапазон рисования
real(8),parameter::D_Y=0.05 ! припуск на диапазон
real(8) XN,XK,YN,YK,HX ! границы и шаг изменения Х графика
Integer I ! счетчик точек полинома
real(8) Xmin,Xmax ! минимальный и максимальный элементы X
real(8) Ymin,Ymax ! минимальный и максимальный элементы Y
real(8):: X(0:MAX),Y(0:MAX) ! таблица данных X(N),Y(N)
real(8):: C(0:MAX) ! массив коэффициентов аппрокс.полинома Pm(x)
real(8):: A(0:MAX,0:MAX) ! матрица коэффициентов системы уравнений
integer N ! количество точек табл. функции (i=0..N-1)
!-----------------------------------------------------------
logical res ! логический результат графических функций
Integer(2) xe, ye ! xe,ye - размеры экрана в пикселях
Integer(2) status ! целый результат графических функций
logical(2) finv /.true./ ! Ось у направлена снизу вверх
type(windowconfig) wc ! структура параметров окна
!-----------------------------------------------------------
open(unit=fi,file='DZ_V6.txt') ! открытие файла данных
read(fi,*) n ! чтение количества узлов аппроксимации
do i=0,n-1
read(fi,*) X(i),Y(i) ! чтение координат узлов
enddo
close(fi) ! закрытие файла
!-----------------------------------------------------------
! Автоматическая настройка конфигурации окна
data wc.numxpixels, wc.numypixels, wc.numtextcols, &
wc.numtextrows, wc.numcolors, wc.fontsize / 6*-1 /
wc.title = "Интерполяционный многочлен Лагранжа"C
res = getwindowconfig(wc) ! Читаем параметры видеоокна
XE = wc.numxpixels ! numxpixels - число пикселей по оси х
YE = wc.numypixels ! numypixels - число пикселей по оси у
status = RECTANGLE( $GFILLINTERIOR, INT2(0), INT2(0), XE, YE )
status = setcolor(1_2) ! цвет рамки
status = RECTANGLE( $GBORDER, XE/4_2-20, YE/4_2-20, &
3_2*XE/4_2+20, 3_2*YE/4_2+20)
call axis() ! Рисуем оси координат
! Задание видового порта размером XE/2 * YE/2 в центре видеоокна
call setviewport(XE/4_2, YE/4_2, 3_2*XE/4_2, 3_2*YE/4_2)
! Оконная система координат (ОСК)
!-----------------------------------------------------------
Xmin=MinVal(X); Xmax=MaxVal(X) ! поиск минимума и максимума Х
Ymin=MinVal(Y); Ymax=MaxVal(Y) ! поиск минимума и максимума Y
XN=Xmin-D_X ! левая граница Х графика
XK=Xmax+D_X ! правая граница Х графика
YN=Ymin-D_Y ! левая граница Y графика
YK=Ymax+D_Y ! правая граница Y графика
status = setwindow(finv, XN, YN, XK, YK)
call curve() ! Рисуем график
!-----------------------------------------------------------
ПРИЛОЖЕНИЕ 2
