Научная статья на тему 'Программный модуль для расчета аппроксимирующих полиномов по методу наименьших квадратов'

Программный модуль для расчета аппроксимирующих полиномов по методу наименьших квадратов Текст научной статьи по специальности «Математика»

CC BY
78
32
i Надоели баннеры? Вы всегда можете отключить рекламу.
Область наук
i Надоели баннеры? Вы всегда можете отключить рекламу.
iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Программный модуль для расчета аппроксимирующих полиномов по методу наименьших квадратов»

Наименование: Принятие решения при положи-

Наименование: Принятие решения при отрица-

Выполнение вычислений в переходах d и e задается модулями B15 и B16.

Модуль: Bl5

Разработчик: Евгенев Г.Б. Наименование: Выполнение вычисления d

Модуль: Bl6

Разработчик: Евгенев Г.Б. Наименование: Выполнение вычисления e

Наименование Имя Ограничение

Позиция p8 p8 1

Вычисление e e > e.exe

Позиция p8 p8 0

Позиция p5 p5 1

Последний модуль B17 предназначен для организации циклической работы подсети, обусловленной обратной связью. Цикл организуется при появлении выделенной переменной FinCalc, которая прекращает выполнение программы, когда принимает значение 1. В данном случае цикл прекращается, когда фишка попадает в позицию p9.

Модуль: Bl7

Разработчик: Евгенев Г.Б. Наименование: Окончание цикла

Наименование Имя Ограничение

Позиция p9 p9 1

Признак конца цикла FinCalc 1

Таким образом, разработана методика, позволяющая непрограммирующим пользователям создавать интегрированные прикладные системы, включающие в себя сложные подсистемы.

Список литературы

1. Евгенев Г.Б. Системология инженерных знаний: Учеб. пособие для вузов - М.: Изд-во МГТУ им. Н.Э. Баумана, 2001. - 520с.

2. Питерсон Дж. Теория сетей Петри и моделирование систем. / Пер. с англ. - М.: Мир, 1984. - 264с.

тельной величине c

Наименование Имя Ограничение

Позиция p6 p6 1

Величина c c [0,)

Позиция p6 p6 0

Позиция p7 p7 1

Модуль: Bl4

Разработчик: Евгенев Г.Б.

тельной величине c

Наименование Имя Ограничение

Позиция p6 p6 1

Величина c c (,0)

Позиция p6 p6 0

Позиция p8 p8 1

Наименование Имя Ограничение

Позиция p7 p7 1

Вычисление d d > d.exe

Позиция p7 p7 0

Позиция p8 p8 1

программный модуль для расчета аппроксимирующих полиномов по методу наименьших квадратов

Ю.А. Джагаров

Эмпирическую функцию

Y=f(X)={Xj, Yi}, i=1,2,... n (1)

удобно аппроксимировать полиномами вида

K

PK = a о + a i X +••• + акХк = ЕajXj

(2)

i = о

или

Р_к = ао + ахХ-1 + ••• + акХ-к = Е а,Х-1, (3)

1=о

к^0 - степень полинома. Заменой переменной z=x-1 полином вида (3) приводится к виду (2). Расчет коэффициентов а1 по методу наименьших квадратов производится исходя из условия минимальности функционала

S = Е (Рк - Yj)2 , i=0

которое приводит к системе нормальных уравнений вида [1]:

d S Э а.

= 0J

(5)

J i=0,1,...,k

Система (5) сводится к системе линейных уравнений, для чего в средах типа Excel, MathCad и т.п. необходимо выполнить вручную значительный объем операций. Однако методом индукции можно показать, что система (5) приводится к системе линейных относительно ai уравнений вида:

k n

Е ai Е

X

j+i

n

: Е Y

Г = 1

г X Г

j=0,1,-,k ,

(6)

1=0 г=1

из которой для матрицы системы М и вектора В свободных членов получаем следующие формализации:

Г

n

м = j z xr+1

I r = 1

j=0,1,-,k i=0,1,-,k ,

B = j ^iYrXr f j=0,1, -Д ■

(7)

(8)

Здесь } - номер строки, 1 - номер столбца. Вид системы (6) определяется количеством данных п, элементами х1 и у1 функции (1) и степенью к аппроксимирующего полинома. Формализации (7) и (8) позволяют построить программный модуль, представленный на фигурах 1-3 ^ВА81С 4.5), автоматически формирующий матрицу М и вектор В по заданной функции (1) и степени полинома к, и вычисляющий коэффициенты а0,ах,...,ак аппроксимирующих полиномов (2) и (3).

В строке d5 (фиг. 1) выполняется ввод и анализ числа п. Значение п=0 является признаком окончания сеанса работы. При п^0 формируются массивы Х0(п), У(п), содержащие заданную функцию (1) и вспомогательный массив Х(п). Функция (1) вводится через клавиатуру с помощью блока ввода, строки а^М12 (фиг. 3), построенного на основе внешнего управления параметром цикла [2], что позволяет корректировать введенные данные как в процессе ввода, так и после его завершения.

В строке 8р (фиг. 2) выполняется ввод стартового значения числа к. При вводе к=0 считается, что к=1. При к<0 массив Х0(п) анализируется на наличие нулевых элементов. При их обнаружении выдается сообщение о невозможности расчета, поскольку переменная z в этом случае не существует, и управление передается на строку 5. В противном случае массив Х(п) принимает значения, обратные соответствующим значениям массива Х0(п). При к>0 массивы Х(п) и Х0(п) тождественны. В строке 20 формируются массивы т (к+1,к+1), В(к+1) и а(к+1), предназначенные соответственно для формирования матрицы (7), вектора (8) и коэффициентов а1 полиномов (2) и (3). В строках 20^30 выполняется вычисление матрицы (7) и вектора (8), по которым в блоке В (фиг. 2) выполняется расчет коэффициентов а1, являющихся корнями системы (6). В блоке В решения системы линейных уравнений используется метод Гаусса [3]. В строках (фиг. 1) выполняется

расчет функционала (4) для введенной функции (1) и выбранного значения к. Здесь же выполняется вывод на экран значений а1, 8, п, к, значения £, равного разности двух последовательных значений 8 и минимального значения 8т1п, полученного в текущем сеансе работы.

В нижних строках экрана содержится подсказка о клавишах управления. Для перехода к большему на единицу значению к следует нажать клавишу к значению на единицу меньшему, чем текущее, - клавишу Для ввода нового

стартового значения k нужно нажать клавишу "■". Для ввода новой функции (1) или завершения сеанса работы нужно нажать клавишу "Esc". Для вывода на принтер результата отчета нужно нажать клавишу при этом управление передается блоку C (фиг. 2). Текст отчета выводится на экран и, после нажатия клавиши "Y", на принтер. Нажатие любой иной клавиши возвращает в режим расчета.

5 COLOR 14, 9

ON ERROR GOTO Er: q$ = ") = 0 - is inadmissible value"

d5: CLS : INPUT "Input number of data n, for End input n = 0 "; n: CLS IF n = 0 THEN END

ELSEIF n < 0 THEN BEEP: GOTO d5 END IF

REDIM X0(n), x(n), y (n) : p = 0 GOSUB a ' To the modul of enter the data Sp: FOR i = 1 TO n: x(i) = X0(i): NEXT i

INPUT "Input power of polinom"; L: CLS : S0 = 0 10 IF L = 0 THEN k = 1 ELSEIF L < 0 THEN

k = -L: FOR i = 1 TO n IF x(i) = 0 THEN PRINT "X("; i; q$: BEEP: SLEEP (4): GOTO 5

x(i) = 1 / X0 (i) : NEXT i ELSEIF L > 0 THEN k = L

END IF

CLS : LOCATE 11,

20

REDIM m(k + 1 FOR j = 1 TO k + 1: x (r)

31: PRINT "Please wait !" k + 1), B (k + 1), a (k + 1) B = 0: FOR r = 1 TO n A (j - 1): NEXT r: B(j) = 0: FOR r = 1 TO n - 2): NEXT r: m(j, i)

S

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

B

S

1)

B = B + y(r) * FOR i = 1 TO k + 1: S = S + x(r) A (j + NEXT i, j: GOSUB B:

S = 0: FOR r = 1 TO n: Pl = 0 FOR i = 1 TO m: Pl = Pl + a(i) * x(r) A (i NEXT i: S = S + (Pl - y(r)) A 2: NEXT r: CLS IF p = 0 THEN Eps = S: Smin = S ELSE Eps = S0 -

IF L = 0 THEN V = 1 ELSE V = L IF Smin >= S THEN Smin = S: f = L PRINT "n="; n; " S="; S; " Epsilon="; Eps; " Power of polinom ="; V: S0 = S "Smin="; Smin; " for power of polinom =";

f:

PRINT PRINT PRINT PRINT

"Coefficients of polinom of power

V;

FOR i = 1 TO m

IF i = 46 OR i = 92 THEN PRINT "Press any key to continue": G$ = INPUT$(1)

PRINT "A ("; i - 1; ")="; a(i), NEXT i: PRINT : p = p + 1: SLEEP (10) PRINT " To forwad press "; CHR$(24), , " To back press "; CHR$(25)

PRINT " To new pawer of polynom press "; CHR$(17),

PRINT " To result and printing press "; CHR$ (16)

PRINT " To new data or End press Esc"; PRINT TAB(39); "To show the first lines press Ctrl+"; CHR$(17): x$ = "" Dl: DO WHILE x$ = "": x$ = INKEY$: LOOP IF x$ = CHR$(0) + CHR$(72) THEN

L = L + 1: x$ = "": CLS : GOTO 10 ' Pointer up - to the forward

ELSEIF x$ = CHR$(0) + CHR$(80) THEN L = L - 1: x$ = "": CLS : GOTO 10 ' Pointer down - to the back

ELSEIF x$ = CHR$(0) + CHR$(75) THEN x$ = "": CLS : GOTO Sp 'Pointer to the left -to the new power of poiyno

Фигура 1

S

ELSEIF x$ = CHR$(27) THEN

CLS : x$ = CLS : GOTO 5 'Esc - to the

new data or End

ELSEIF x$ = CHR$(0) + CHR$(77) THEN x$ = "": CLS : GOSUB C 'Pointer to the right -to printing of the result

ELSEIF x$ = CHR$(0) + CHR$(115) THEN x$ = "": LOCATE 1, 1: PRINT "n="; n; " S="; S; " Epsilon="; Eps;

PRINT " Power of polinom ="; V PRINT "Smin="; Smin; " for power of polinom ="; f: GOTO Dl END IF

x$ = "": BEEP: GOTO Dl

END

B: 'Colculation of roots of system linear equations by Gauss [3] m = k + 1

FOR i = 1 TO m - 1: FOR j = i + 1 TO m m(j, i) = -m(j, i) / m(i, i) : FOR r = i + 1 TO m m(j, r) = m(j, r) + m(j, i) * m(i, r) : NEXT r B(j) = B(j) + m(j, i) * B(i): NEXT j: NEXT i a(m) = B(m) / m(m, m)

FOR i = m - 1 TO 1 STEP -1: h = B(i)

FOR j = i + 1 TO m: h = h - a(j) * m(i, j) : NEXT j

a(i) = h / m(i, i) : NEXT i

RETURN

Er: CLS

IF ERR = 6 OR ERR = 7 OR ERR = 11 THEN GOTO Er1 ELSE ON ERROR GOTO 0

Er1: PRINT "Resource of computer is not enough fop power = "; L

BEEP: SLEEP (2)

IF L >= 0 THEN L = L - 1 ELSE L = L + 1 RESUME 10

C: PRINT TAB(27); " RESULT OF SEARCH": PRINT PRINT "n="; n; " S="; S; PRINT " Power of polinom ="; V PRINT "Smin="; Smin; "for power of polinom = "; f: PRINT

PRINT "Coefficients of polinom of power ="; V; FOR i = 1 TO m

IF i = 46 OR i = 92 THEN PRINT "Press any key to continue": G$ = INPUT$(1)

PRINT "A ("; i - 1; ")="; a(i), NEXT i: PRINT

PRINT "For printing press Y else press any key for return to the back" G$ = INPUT$(1)

IF G$ = "Y" OR G$ = "y" THEN GOTO r ELSE GOTO

r1

r: 'LPRINT TAB(27); " RESULT OF SEARCH": PRINT 'LPRINT "n="; n; " S="; S; 'LPRINT " Power of polinom ="; V 'LPRINT "Smin="; Smin; "for power of polinom = "; f: PRINT

'LPRINT "Coefficients of polinom of power =";

V; ":"

'FOR i = 1 TO m: LPRINT "A("; i - 1; ")="; a(i),

'NEXT i BEEP r1: RETURN V1

Фигура 2

Таким образом, программный модуль позволяет, последовательно начиная с произвольного стартового значения k, просматривать результаты расчета аппроксимирующих полиномов для про-

извольного к, значение которого можно произвольно изменять в ходе работы.

a:

Mi5:

y (i)

ne = 1

FOR i = ne TO n IF i <= ne THEN i = ne PRINT "Input X("; i; "); Y("; i; ")" INPUT "X"; x$: IF x$ = "e" OR x$ = "E : GOTO Mill IF x$ = "=" THEN PRINT "Keep X"; i; "="; X0(i); GOTO Mi10

<= "*" OR x$ >= ">" THEN PRINT : GOTO Mi10

ELSEIF x$ i = i - 2: END IF INPUT "Y";

y$

Mi10 Mi11

Mi15:

X0(i) = VAL (x$) : y(i) = VAL (y$) PRINT " Accepted X="; X0(i); " Y="; y(i) NEXT i

CLS : PRINT "The input is over" PRINT "If need correction" PRINT "input ", else any key" d$ = INKEY$: IF d$ = "" THEN GOTO Mi15 IF d$ = "y" OR d$ = "Y" THEN GOTO Mi16 ELSE GOTO Mi18

Mi16: CLS : PRINT "Starting-element X0("; ne; ");Y("; ne; ")"

PRINT "If need correction " PRINT "input ", else any key" Mi17: d$ = INKEY$: IF d$ = "" THEN GOTO Mi17

IF d$ = "y" OR d$ = "Y" GOTO Mi2 ELSE i = n: GOTO Mi5

Mi2: INPUT "The number of Starting-element"; ne: IF ne = 0 THEN GOTO Mi2

IF ne > n THEN GOTO Mi2 GOTO Mi5 Mi18: CLS : RETURN

Фигура 3

При больших значениях k, определяемых мощностью компьютера, возможны ошибки переполнения, деления на машинные нули и т.п. Для предотвращения авоста в этих случаях управление передается блоку Er (фиг. 2), выдающему соответствующее сообщение, изменяющему значение k на единицу и передающему управление на строку 10, что позволяет продолжить расчет в обратном направлении.

Обработка нажатий клавиш выполнена на основе синтеза кодов [4].

Список литературы

1. Линник О.В. Метод наименьших квадратов и основы математико-статистической теории обработки наблюдений. -М.: Наука, 1982. - 240 с.

2. Джагаров Ю.А. Программный блок ввода с коррекцией // Программные продукты и системы.-1999.- № 3.

3. Дьяконов В.П. Справочник по алгоритмам и программам на языке БЕЙСИК для персональных ЭВМ. - М.: Наука, 1987. - 240 с.

4. Джагаров Ю.А. Отслеживание нажатий клавиш клавиатуры на основе синтеза кодов //Программные продукты и системы.- 2000.- №1.

THEN

Вниманию 1Т-специалистов!

Редакция журнала «Программные продукты и системы» практикует тематические выпуски номеров для организаций отрасли информационных технологий.

i Надоели баннеры? Вы всегда можете отключить рекламу.