Научная статья на тему 'Объектно-ориентированный подход к вычислению производных высоких порядков'

Объектно-ориентированный подход к вычислению производных высоких порядков Текст научной статьи по специальности «Компьютерные и информационные науки»

CC BY
301
23
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ОБЪЕКТНО-ОРИЕНТИРОВАННЫЙ ПОДХОД / OBJECT-ORIENTED APPROACH / ЯЗЫК ПРОГРАММИРОВАНИЯ C++ / ШАБЛОН / TEMPLATE / КЛАСС ПРОИЗВОДНЫХ / MATRIX CLASS / ВЕКТОРОВ / МАТРИЦ / ПОСТРОЕНИЕ СПЛАЙНА / CONSTRUCTION OF SPLINE / РЕАЛИЗАЦИЯ АЛГОРИТМА / REALIZATION OF ALGORITHM / ФОРМУЛА ФАА-ДИ-БРУНО / FAà DI BRUNO''S FORMULA / ПОЛНЫЙ / ЧАСТИЧНЫЙ ПОЛИНОМ БЕЛЛА / PARTIAL BELL POLYNOMIAL / ДЕТЕРМИНАНТНОЕ ПРЕДСТАВЛЕНИЕ / DETERMINANT REPRESENTATION / МЕТОД ЛЕВЕРЬЕ / LE VERRIER METHOD / РАЗБИЕНИЕ / ПОЧТИ ТРЕУГОЛЬНАЯ МАТРИЦА / NEARLY TRIANGULAR MATRIX / C++ / DERIVATIVE / VECTOR / COMPLETE / PARTITION

Аннотация научной статьи по компьютерным и информационным наукам, автор научной работы — Иванченко Александр Николаевич, Дорофеев Алексей Анатольевич

На языке программирования C++ разработан шаблонный класс, в котором перегружены арифметические операторы и функции экспоненты, синуса, косинуса, гиперболического синуса и гиперболического косинуса таким образом, чтобы при их воздействии на объекты класса наряду со значением функции в некоторой точке возвращались также значения её производных в этой же точке в виде числового массива. Выявлен оптимальный алгоритм для программной реализации вычисления массива значений производных по общим формулам.

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

Похожие темы научных работ по компьютерным и информационным наукам , автор научной работы — Иванченко Александр Николаевич, Дорофеев Алексей Анатольевич

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

AN OBJECT-ORIENTED APPROACH TO COMPUTATION OF HIGHER DERIVATIVES

The template class that enables to reload arithmetic operators and exponent, sine, cosine, hyperbolic sine and hyperbolic cosine functions to return the values of function at some point along with the values of derivatives at the same point as a numeric array when operating on class objects is developed in C++. The optimal algorithm that computes the values of derivatives as an array using general formulas is detected.

Текст научной работы на тему «Объектно-ориентированный подход к вычислению производных высоких порядков»

УДК 004.02

ОБЪЕКТНО-ОРИЕНТИРОВАННЫИ ПОДХОД К ВЫЧИСЛЕНИЮ ПРОИЗВОДНЫХ ВЫСОКИХ ПОРЯДКОВ

© 2014 г. А.Н. Иванченко, А.А. Дорофеев

Ivanchenko Alexander Nikolaevich - Candidate of Technical Sciences, professor, department «Software Computer Engineering», Platov South-Russian State Polytechnic University (NPI). E-mail: ian2008.52@mail.ru

Dorofeev Aleksey Anatolevich - post-graduate student, department «Software Computer Engineering», Platov South-Russian State Polytechnic University (NPI). E-mail: alexeidoro-feyev@yandex.ru

Иванченко Александр Николаевич - канд. техн. наук, профессор, кафедра «Программное обеспечение вычислительной техники», Южно-Российский государственный политехнический университет (НПИ) имени М.И. Платова. E-mail: ian2008.52@mail.ru

Дорофеев Алексей Анатольевич - аспирант, кафедра «Программное обеспечение вычислительной техники», ЮжноРоссийский государственный политехнический университет (НПИ) имени М.И. Платова E-mail: alexeidoro-feyev@yandex.ru

На языке программирования C+ + разработан шаблонный класс, в котором перегружены арифметические операторы и функции экспоненты, синуса, косинуса, гиперболического синуса и гиперболического косинуса таким образом, чтобы при их воздействии на объекты класса наряду со значением функции в некоторой точке возвращались также значения её производных в этой же точке в виде числового массива. Выявлен оптимальный алгоритм для программной реализации вычисления массива значений производных по общим формулам.

Ключевые слова: объектно-ориентированный подход; язык программирования C++; шаблон; класс производных, векторов, матриц; построение сплайна; реализация алгоритма; формула Фаа-ди-Бруно; полный, частичный полином Белла; детерминантное представление; метод Леверье; разбиение; почти треугольная матрица.

The template class that enables to reload arithmetic operators and exponent, sine, cosine, hyperbolic sine and hyperbolic cosine functions to return the values offunction at some point along with the values of derivatives at the same point as a numeric array when operating on class objects is developed in C++. The optimal algorithm that computes the values of derivatives as an array using general formulas is detected.

Keywords: object-oriented approach; C++; template; derivative, vector, matrix class; construction of spline; realization of algorithm; Faa di Bruno's formula; complete, partial Bell polynomial; determinant representation; Le Verrier method; partition; nearly triangular matrix.

В статье [1], опубликованной в 1986 г. в малотиражном сборнике научных трудов, предложен общий конструктивный подход, позволяющий получать «экономные» интервальные представления интерполяционных сплайнов в форме разложения по специальным образом конструируемым функциям, образующим биортогональный базис по отношению к заданному набору линейно независимых функционалов. Суть подхода схематично выглядит так:

- имеется некоторое разбиение интервала [а, Ь] (а = х0<х1<... <хм-\<хм = Ь) («сетка») и для каждого отрезка Ej = [х/-ь ху], / = 1, ..., N указан базис из т

линейно независимых гладких функций {фу /(х)|

(исходный базис);

- по определению кусочно-гладкая функция S(x)

есть сплайн-функция, если выполнены условия

к т

S (х )е С [а, Ь] и S (х )=£ ау, / фу, / (х) , х е Е/, / =

У=1

= 1, ..., N неизвестные коэффициенты ау,/ определяются из: условий «склеивания» соседних сегментов

'v=1

сплайна в узлах, априори заданных интерполяционных условий и дополнительных (граничных) условий в концевых точках интервала [а, Ь];

- наиболее «экономное» интервальное представление сплайна можно получить, если в качестве базиса использовать биортогональный базис {уу,/ (х)| ^, сопряженный с некоторым заданным набором из т

m

^ j / 1

выполняются условия

Vj (Vv,j ) = Vv={0'

таким

образом, что выполняются условия:

[0, ц^у;

"Ц, / у, = .

, Ц = V.

Это представление имеет вид S(х)=2 К,/ (S(х))^у,/ (х), х е Е/,/ = 1, ..., N.

у=1

Функции биортогонального базиса выражаются через функции исходного базиса соотношениями: 1

v, j

( - ) =

det Ф1 м

2 ф,цфц, j (-)

где Ф^ ц - алгебраическое дополнение элемента (V, д) квадратной числовой т*т матрицы Ф вида: Л / \ / \ Л

Kj К; ) \j (фт, j )

(ф1, j )

(Фт, j )

В подавляющем большинстве случаев практического применения интерполяционных сплайнов в качестве функционалов, участвующих в построении «экономных» представлений сплайнов используются значения сплайн-функции и некоторого количества ее производных различных порядков в узлах «сетки», что упрощает выполнение процедуры «склеивания» соседних сегментов сплайна, а также позволяет непосредственно использовать интерполяционные условия в качестве коэффициентов сплайна. Таким образом, в общем случае использования базисов большого размера (на практике - больше 4) приходится производить вычисления производных высоких порядков от функций исходного базиса фДх) с целью формирования матрицы Ф

Большое разнообразие базисных функций, встречающихся в практике использования сплайнов, приводит к необходимости выполнения «ручных» аналитических преобразований с целью получения расчетных выражений для вычисления производных высоких порядков для каждой новой базисной функции. Заманчивым является применение технологий компьютерной алгебры [2, с. 282 - 310] для выполнения дифференцирования (и других сопутствующих аналитических преобразований) в символьной форме, однако привлечение достаточно сложных алгоритмических конструкций, реализующих символьные преобразования, вряд ли целесообразно в нашем случае, так как конечной целью является численный результат, а получаемые в результате символьных преобразований формульные представления производных просто отбрасываются за ненадобностью.

В [3, с. 214 - 216] описан шаблонный класс производных Derive, который представляет собой вариант объектно-ориентированного подхода к реализации операции дифференцирования на языке программирования C++. Методы данного класса позволяют при вычислении значения заданной (функции для некоторого значения независимой переменной одновременно вычислять значение первой производной этой функции для этого же значения переменной. При этом результат возвращается в виде численного значения производной в точке, и аналитическое выражение для производной от функции не формируется.

В основе реализации класса Derive лежит идея перегрузки арифметических операторов: - (унарный), +, -, *, / и основных элементарных аналитических функций: exp, sin, cos, sinh, cosh, что позволяет пользователям данного класса конструировать из этих «строительных блоков» функции достаточно общего вида. При этом вызов такой функции для заданного

значения аргумента приводит к вычислению значении как функции, так и ее первоИ производной.

Выполним модификацию класса Derive в двух направлениях: во-первых, будем считать, что все перегружаемые в классе элементарные функции используют суперпозицию, т. е. их аргументом является некоторая функция от независимого аргумента (это существенно при выводе формул дифференцирования); во-вторых, одновременно со значением функции должны вычисляться и все ее производные до заданного порядка п.

Получим расчетные формулы для реализации этой идеи:

- n-я производная суммы/разности:

d" v dnu dnv

-(u + v 1 =-+-;

dxnX ' dx" dx"

- n-я производная произведения (формула Ньютона - Лейбница):

dn , , " dku d(п-к)v

-(uv )= Z Ck ;

dx"y к=o " dxk dx(n-k)

- n-я производная обратной функции: dn (1 ^ ,.kk\CkJu(n~k+1)

—I -миг

dxn I u ) k=1V ;

k+1

- п-е производные экспоненты, гиперболического синуса, гиперболического косинуса, синуса, косинуса [4, с. 137] (формулы Фаа-ди-Бруно):

dx'

(e")

eu ) = n!eu

2 п:л

(db-.,dn )M j=1 dj !

1 Í u (j )Yj

V j! )

dn

-(sinh u) = n!

dxnK '

n 1

sinh u 2 П —

(db-,dn )eM" j=1 dl !

f (j П UJ

v j! )

n1

+ cosh u 2 П —

w I

(di,-,dn )eMn j=1 dj ■

f (j П Ul

V j! )

dn

-(cosh u) = n!

dxnK '

cosh u 2 П —

(di,-,dn К j=1 d] !

i Г (i )Y;

n 1 uw;

V j! )

n1

+ sinh u 2 П-

w I

(d1,-,dn Y-Mlnj = dj ■

f,(jn

v j! )

+ (1)

dn

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

-(sin u) = n!

dxny '

+ cos u

smu 2 n(-l)2? П^п

2 (-J2?'

Гu( j У

v !■ )

1 Г (j )Y1 n 1 u >

(d1,-,dn YM n

П —

j

j=1 d, ■

v j! )

dn

-(cos u) = n!

dxnK '

cos и

2 И)12* П ^

Г u( j )F'

(db-,dn )M

j=1 dj!

v j! )

dn

+

+

- sinu 2 (-1)

(d1—dn )eMП

uZd'

1 1

п-л

j t1 d}\

) p

V m",

d" dxn

(eu) t eu jt ß„k (u', -,u(n-k+1)) t euB" (u'-.u(n));

(n-k+1))

d" (sinh u) t sinh u 2 Bnk (u,-, uv' " "'| +

k=1 k =0( mod 2)

+ cosh u Z Bnk (u,-, u( nk+1)j-

k=1( mod2)

(cosh u) = cosh u Y Bnk (u,..., u(" k+1)) dx"^ ' k=1 >

+ sinh u Z

k t1 k=1( mod 2)

Bn,k ( u',-, u(n-k +1))

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

Рассмотрим, во-первых, множество Мп:

мп =|(dl,Б.dnе г+,] = 1,...,п;2 jdJ = п|.

Например, множество М6 содержит 11 последовательностей: (6,0,0,0,0,0), (4,1,0,0,0,0), (3,0,1,0,0,0), (2,2,0,0,0,0), (2,0,0,1,0,0), (1,1,1,0,0,0), (1,0,0,0,1,0), (0,1,0,1,0,0), (0,3,0,0,0,0), (0,0,2,0,0,0), (0,0,0,0,0,1).

Далее рассмотрим разбиение Мп на два подмножества М° и ы\:

К =|(dl,...dn)еМп 12dj -чётное|,

М\ = |(d1,. dn) е Мп 12 dj - нечётное

Для приведенного выше числового примера получим: М60 = {(6,0,0,0,0,0), (3,0,1,0,0,0), (2,2,0,0,0,0), (1,0,0,0,1,0), (0,1,0,1,0,0), (0,0,2,0,0,0)}; М16 = {(4,1,0,0,0,0), (2,0,0,1,0,0), (1,1,1,0,0,0), (0,3,0,0,0,0), (0,0,0,0,0,1)}.

Наконец, рассмотрим еще одно множество, связанное с множеством Мп:

Мпк = |(d ^. • •, dn-k+1) е Мп I 2 d1 = к} .

Например, множество М62 будет содержать всего 3 последовательности из М6: (1,0,0,0,1,0), (0,1,0,1,0,0), (0,0,2,0,0,0).

Более компактное представление формул (1) можно получить с использованием полиномов Белла [4, с. 133 - 136]:

dn n

— (sin u)t sin u 2 (-1)^2 Bn,k

dx k t1

k=0(mod2)

(u,-, u(n-k+1)) +

+cos u 2 (-1)[k/2] B„,k k t1 k=1(mod2)

(«',-, u(n-k+:));

dn

-(cosu)t cosu Z (-1)

dxn k t1

k=0(mod2)

\W 2]

kj 2^1, (n-k+1)^

Bn,k (u ,-,u 'j

- sin u 2 (-1)1^2] B„k (u, k t1 V k=1(mod2)

);

где

Bn,k (*1>-xn-k+1 )t n!

2

n-k+1 1 f u( j) ^ 1

п —

(d1—dn-k+1)eMn,k 1t1 dj ! (n-k+1)\

v 1 ,

частичный полином Белла;

Вп (х1,. хп )=2Впк (м',..., и ) - полный поли-

к=1 ' * '

ном Белла.

Приведем один содержательный пример частичного полинома Белла:

В6,2(и',м",и'",и1¥,и¥) = 6м'м¥+15м"м1¥+10(м'")2.

Необходимо отметить, что некоторая «искусственность» множеств суммирования приводит к усложнению программной реализации алгоритмов вычисления производных на основе прямых формул Фаа-ди-Бруно и формул, выраженных в терминах частичных полиномов Белла.

В то же время, полные полиномы Белла допускают детерминантное представление с существенно более простыми правилами вычисления:

Х1 -1

Bn (x1>-Xn )t

0 0

0 0

11 x n-1 2 C 2 x C3 x n-1 4 ■ xn

x1 C1 x n-2 2 C2 x xn-1

-1 x1 C1 x xn-2

0 -1 x1 xn-3

0

-1 x

.(3)

Заметим, что в формулах (2) только производная от экспоненты непосредственно выражается через полный полином Белла. 1В то же время, в силу известных соотношений

(2)

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

sinh u t-

sin u t-

2

e'~ - e~

coshu =-

cos u t-

2

e'u + e ~

k=0(mod2)

2/ 2 для (формул (2) также существуют представления в терминах полных,: полиномов Белла, которые имеют вид:

+

dn dxn

(e") = euBn (u'-.u(n)) ,

dn , . , ч sinh и + cosh и „ / ,

—- (sinh и ) =-В„ (и',..., иуп>) +

dx 2

sinh u — cosh u 2

Bn (-u',

,(u',-, u (n)));

(n)

, —u '

dn , , ч sinh и + cosh и „ .

—(cosh и )=-2-B (и

(u',-, u (n)) +

cosh и - sinh и „ .

+-В (-и

2

(—u',-, —u(n)) ;

(4)

dn , . ч sinu + cosu „

-(sin u) =-Bn

dxnV ' 2 n

/■ ' ■ (n)\ liu , —,iu ' I

sin u — cos u „ .

+-B ( —

2

(n)

I— iu , —, —iuv ' I;

dn , ч sinu + cosu „ -(cos u) =-Bn

/■ ' ■ (n)\ liu , —,iu ' I

cos u — sinu „ .

+-B„ ( —

2

/ ■ ' ■ (n)\ I— iu , — , —iu ' I .

функций: exp, sin, cos, sinh, cosh и их производных высоких порядков, метод возвращающий значение к-й производной в точке x.

Использование для программирования языка С++ приводит к необходимости «физического» представления каждого из модулей двумя файлами - интерфейса (с расширением *.h) и реализации (с расширением *.cpp).

Рассмотрим некоторые детали реализации вычисления частичного полинома Белла. Для вычисления Bn>k(xb...,xn_k+i) по заданным п,к и значениям хь ..., xn_k+i используется представление в виде суммы, преобразованное к следующему виду:

B =

2

n—k+1 P- X: 1

П - j j, (5)

(d1,-,dn—k+1)eMn,k j=1 j !dj dj !

jdj Г j —1

Таким образом, (1), (2) и (4) являются альтернативными наборами формул для вычисления производных сложных функций eu, sinu, cosu, sinhu, coshu произвольного порядка.

Рассмотрим вопросы программной реализации полученных соотношений в условиях использования объектно-ориентированного подхода. В качестве обязательного требования примем, что все создаваемые программные конструкции должны быть шаблонными (параметрическими), что делает их адаптацию к конкретным типам данных исключительно легкой и способствует реализации принципа повторной используемости программного кода. Следование другому важному принципу - принципу модульности приводит к модульной структуре создаваемого приложения, которое включает:

- модули Vector и Matrix, содержащие шаблонные классы Vector<T> и Matrix<T> для представления векторов и матриц и выполнения над ними различных математических операций;

- модуль BellPoly, содержащий шаблонные функции: fullBellPoly (вычисление полного полинома Белла с использованием метода Леверье для вычисления определителя квадратной матрицы [3, с. 57 - 58]), fullBellPoly__ntm (вычисление полного полинома Белла с использованием специализированного метода вычисления определителей почти треугольных матриц при помощи цепных дробей [5, с. 65]) и partBellPoly (вычисление частичного полинома Белла);

- модуль Derive, содержащий три версии шаблонного класса Derive (DeriveFull, DeriveFullntm и DerivePart) для трех вариантов вычисления полиномов Белла. Каждая из версий содержит: конструкторы; метод инициализации независимой переменной (set); перегруженные арифметические операторы; перегруженные методы для вычисления элементарных

где Р. = П| 2 I.

и=1 ^=1 )

Данные преобразования обусловлены тем, что выражение в правой части (5) имеет удобный для алгоритмизации вид, который схематично может быть представлен следующим образом:

п=k+1 р

В = 2 П I id, множителей I х

л -г 1 i-

2 П jdj

(d1,—, dn—к+1 )eMn, k j =

;[dj

множителей

На основании этой схемы строится представление для Впк(хь ..., хп-+), которое непосредственно используется в основе циклической организации работы алгоритма функции:

B =

n k+1 dpxp pS + p ( q — 1) + r

2 ПП—П V '

(d1,-,dn—k+1Y-Mn,k p=l 9=1 q r=l P—1

(6)

где £ = 2 vd у , причём сумма полагается равной 0, если р = 1.

Для организации суммирования по формуле (6) адаптирован алгоритм Н [6, с. 54 - 55], генерирующий все целочисленные к-кортежи 11 ... 1к такие, что 11 > ...>

к

> 4 > 1 и 2 17 = п (в предположении, что п > к > 2). В

7=1

[6, с. 67 - 68] (теорема Н) доказывается, что общее время работы алгоритма Н не превышает количества посещенных разбиений, умноженного на небольшую константу, плюс О(к). После каждой итерации алгоритма Н на основе полученного разбиения 4 ... 1к вычисляется соответствующее слагаемое суммы (6).

1. Установить т^п-к+1, В^0, z^0.

2. [инициализация] Установить 4^т и 1/^1 для 1 < ] < к. Установить также 4+1^ -1 (шаг 1 алгоритма Н).

3. Установить Р-^1, г-^1.

4. Установить R^R*S/r, г^г+1, 5^5+1 и повторять эти действия до тех пор, пока не будет выполнено условие г > 1р. Установить R^R*хlp /q.

+

+

r

5. Установить P—P*R, р—р+1, R—1, г—1. Если р < ^ установить q—q+1 в случае 1р = м> и q—1 в случае 1р Ф м>; перейти на шаг 4.

6. Установить В—В+Р. Завершить работу, если г = 1. Установить Р—1, р—1.

7. [посещение] Посетить разбиение А...4. Затем, если 12 > 11—1, перейти на шаг 9 (шаг 2 алгоритма Н).

8. [настройка 11 и 12] Установить 11 — 11 — 1, 12 — 12+1 и перейти на шаг 7 (шаг 3 алгоритма Н).

9. [поиск -] Установить - = 3 и 5 = 4+4—1. Затем, если I- > 4+1, установить 5 = 5+1-, -+1 и повторять эти действия до тех пор, пока не будет выполнено условие I- < 4+1. (теперь 5 = 11+.+1--1—1; шаг 4 алгоритма Н).

10. [увеличение — Установить г—1 и перейти на шаг 3, если - > k. В противном случае установить х——1+1, ——х, }—}—1 (шаг 5 алгоритма Н).

11. [настройка 4--4] Пока ->1, установить 1—х, 5—5+1- и}—}—1. Установить 4——5 и перейти на шаг 3. (шаг 6 алгоритма Н).

Важно отметить, что, несмотря на многократное вычисление п!, повторяющееся при выполнении каждой итерации, способ организации алгоритма вычисления частичного полинома Белла, основанный на представлении (6), позволяет избежать появления слишком больших и слишком малых чисел при расчётах, так как операции пошагового умножения и деления синхронизированы между собой.

Для проверки работоспособности разработанных модулей и оценки эффективности описанных выше алгоритмов вычисления полиномов Белла создано консольное приложение 5—ег^е_г, работа которого заключалась в вычислении функций канонических базисов пространства ¿-сплайнов Sp4,2(l,N) для динамических систем второго порядка Ьх(Г) = и($) с дифференциальными операторами вида Ь = р2+Хр и

Ь = р2+ю2 (здесь р=— ; х - выходная переменная; и -

Л

управляющая функция) [7] вместе с производными порядка от 1 до г включительно. Для системы с Ь = = р2+Хр функции канонического базиса пространства £р4,2(Едг) имеют общий вид

Ф1 (x) —

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

1 - cosh X + Xx sinh X + cosh (1 - x)X - cosh xX

X sinh X - 2 (cosh X -1) Ф 2 (T) =

sinh X-X-xX(cosh X-1)+X cosh xX-sinh(l-x)X-sinh тХ Xsinh X-2(cosh X-1)

(две другие функции этого базиса имеют вид Ф](1-т) и Ф2(1-т)), а для системы с L = p2+co2 базисными являются следующие функции:

Ф 4 (Т) =

(l-x)sinrosin xro-xrosin(l-x)ro

2 • 2 Ю -Sin ю

(две другие базисные функции имеют вид Ф3(1-т) и Ф4(1-т)).

Для расчёта производных функций Ф^т), Ф2(т), Ф3(т), Ф4(т) при различных фиксированных значениях т и параметров X, ю к проекту поочерёдно подключались интерфейсные файлы DeriveFull.h и Derive Part.h. Результатом работы программы являлись экземпляры класса Derive<double> F1, F2, F3, F4, каждый из которых содержит в поле dx значения функции, а также производных порядка 1 до r включительно, рассчитанные с помощью соответствующего алгоритма при заданных значениях т и параметров X, ю для функций Ф1(т), Ф2(т), Ф3(т), Ф4(т). Фиксировалось также время работы программы.

На основе сравнительного анализа алгоритмов I и II установлено, что, несмотря на компактность детер-минантного представления (3) и универсальность метода Леверье для числовых и символьных матриц, алгоритм I не превосходит алгоритм II по времени, требуемому для расчёта, при этом для функций Ф1(т) и Ф2(т) время работы алгоритмов практически совпадает, а для функций Ф3(т) и Ф4(т) алгоритм II начинает значительно опережать алгоритм I с увеличением r (рис. 1). Важно отметить, что расхождения во времени работы наблюдаются для функций, использующих представления производных синуса и косинуса, которые, будучи выраженными в терминах полных полиномов Белла, содержат функции комплексного аргумента.

Однако специфика конфигурации детерминант-ного представления, заключающаяся в том, что матрица, лежащая в его основе, относится к классу правых почти треугольных матриц, позволяет разработать модификацию алгоритма I - алгоритм 1а, использующий для расчёта n-го полного полинома Белла по формуле (3) специализированный метод вычисления определителей почти треугольных матриц при помощи цепных дробей [5, с. 65]. Данный метод применительно к матрице детерминантного представления n-го полного полинома Белла будет иметь следующий вид:

Bn (xi,...x„ )=П D

i=1

(

D1 — X1 =

— Xi + Xo

21 D: 2

D3 — X +—

3 1 D2

CC': Xo + Xo

, D13.

л

Dk — X1 +

D

k-1

Ck-1X2 +'

(

D

k-2

Ck-1X3 +"•'

f

... + -

D

1

Ck-1 xk-1 + „ x V D1 JJJ

k

(7)

Фз (x) —

xro(rocos(i-x)ro+sin (i-x)ro)-sin xro(sin ro+(i-x)rocosra)

22 Ю -Sin Ю

Общее число арифметических операций при вычислении Вп(х1,.,хп) по формулам (7) не превышает 2п2-4п+3, следовательно, общее время работы алгоритма составляет 0(п2).

1

1

1

t, с

Фз(т)

2

Алгоритм ; Алгоритм II

1ÎÎ 3 4 5 6 7 8 9 1011121314151617181920 Г

t, с

1,2 1 0,8 0,6 0,4 0,2 0

Ф4(Т)

1 2

123456789 1011121314151617181920

r

Рис. 1. Сравнительный анализ времени работы алгоритмов I и II вычисления производных (по горизонтальной оси - порядок гладкости функций г, по вертикальной оси - время расчёта производных функции ^

t, с 1

0,8 0,6 0,4 0,2 О

Ф1(Т)

1 Алгоритм II 2 2 Алгоритм la

1234 5 6 7 8 9 1011121314151617181920 Г

t, с

1,2 1 0,8 0,6 0,4

M 0

Ф(Т)

1

2

П-1 ! .......

1 2-- 3 4 5 6 7 8 9 1011121314151617181920 Г

Рис. 2. Сравнительный анализ времени работы алгоритмов II и 1а вычисления производных (по горизонтальной оси - порядок гладкости функций г, по вертикальной оси - время расчёта производных функции ^

На основе сравнительного анализа алгоритмов II и 1а установлено, что для функций Ф3(т) и Ф4(т) время работы алгоритмов практически совпадает, а для функций Ф:(т) и Ф2(т) модифицированный алгоритм 1а значительно опережает алгоритм II с увеличением г (рис. 2). Заметим, что расхождения в данном случае наблюдаются для функций, использующих представления производных гиперболического синуса и косинуса, которые, будучи выраженными в терминах полных полиномов Белла, не содержат комплексных переменных.

Таким образом, можно сделать общий вывод о предпочтительности алгоритма !а, который учитывает возможность представления расчётных формул для функций е", бши, соби, бшЬи, соб^ в терминах полных полиномов Белла, а также специфику детерми-нантного представления полного полинома Белла, является оптимальным по времени, требуемому для расчёта, и рекомендуется к практическому использованию при разработке пакетов прикладных программ для решения аналитических задач, в частности, рассмотренной в начальном разделе статьи задачи интерполяции сплайн-функциями.

Литература

1. Алексейчик В.В., Иванченко А.Н. О технике построения сплайн-функций, заданных на линейных оболочках // Системы управления технологическими процессами: Межвуз. сб. / Новочерк. политехн. ин-т. Новочеркасск, 1986. С. 53 - 66.

2. Дэвенпорт Дж., Сирэ И., Турнье Э. Компьютерная алгебра / пер. с франц. М., 1991. 352 с.

3. Тан К.Ш., Стиб В.-Х., Харди И. Символьный C++: Введение в компьютерную алгебру с использованием объектно-ориентированного программирования / пер. со 2-го англ. изд. М., 2001. 622 с.

4. Comtet L. Advanced Combinatorics: The Art of Finite and Infinité Expansions. Boston: D. Reidel, 1974. 343 p.

5. Корнеев П.К. Вычисление определителей почти треугольных матриц при помощи цепных дробей // Вестн. Ставропольского государственного университета, 43/2005. С. 63 - 65.

6. Кнут Д.Э. Искусство программирования, том 4, А. Комбинаторные алгоритмы, часть 1 / пер. с англ. М., 2013. 960 с.

7. Иванченко А.Н., Алексейчик В.В., Ершов В.К. Сплайно-вые приближения программных движений динамических систем // Системы управления технологическими процессами: межвуз. сб. /Новочерк. политехн. ин-т. Новочеркасск, 1983. С. 87 - 93.

Поступила в редакцию

17 декабря 2013 г.

1

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