Текст подпрограммы и версий (Си)
de89d_c.zip
Тексты тестовых примеров (Си)
tde89d1_c.zip , tde89d2_c.zip , tde89d3_c.zip

Подпрограмма:  de89d_c

Назначение

Вычисление коэффициентов разложения решения задачи Коши для канонической системы обыкновенных дифференциальных уравнений второго порядка и его первой и второй производных в ряды по смещенным многочленам Чебышёва первого рода с встроенной пошаговой обработкой результатов (получение аналитического выражения для приближенного решения задачи Коши и его производных в виде частичных сумм смещенных рядов Чебышёва).

Математическое описание

Решается задача Коши для канонической системы M обыкновенных дифференциальных уравнений второго порядка с правой частью, зависящей от производной:

(1)     Y '' = F (X, Y, Y'),
          Y  = ( y1, ... , yM ),  Y'  = ( y'1, ... , y'M ),   
          F = ( f1 (X, y1, ... , yM, y'1, ... , y'M), ... , fM (X, y1, ... , yM, y'1, ... , y'M)),    XN ≤ X ≤ XK,            
с начальными условиями, заданными в точке XN :
(2)       Y(XN) = YN,     YN = ( y10, ... , yM0 ),     Y'(XN)=DYN,     DYN=(y'10, ... , y'M0),                                                                                   

при условии, что правая часть системы (1) имеет непрерывные ограниченные частные производные по переменным X, Y, Y'. Предполагается, что на отрезке [XN, XK] задача (1),(2)  имеет единственное решение. Тогда решение задачи Коши Y(XN + αΔ) и его производные Y'(XN + αΔ), Y''(XN + αΔ) = F(XN + αΔ, Y(XN + αΔ),Y'(XN + αΔ)) = Φ(α) разлагаются на промежутке интегрирования [XN, XK] в равномерно сходящиеся ряды по смещенным многочленам Чебышёва первого рода

                                                                                                    1
(3)     Y(XN + αΔ) = ∑ ' ai*[Y] Ti* (α),   0 ≤ α ≤ 1,   ai*[Y] = 2/π ∫ Y(XN + αΔ) Ti* (α) / √ (α (1 - α)) dα ,
                                  i=0                                                               0
 
                                                                                                      1
(4)     Y'(XN + αΔ) = ∑ ' ai*[Y'] Ti* (α),   0 ≤ α ≤ 1,   ai*[Y'] = 2/π ∫ Y'(XN + αΔ) Ti* (α) / √ (α (1 - α)) dα ,
                                  i=0                                                                 0

                                                                                        1
(5)     Φ(α) = ∑ ' ai*[Φ] Ti* (α) ,    0 ≤ α ≤ 1,   ai*[Φ] = 2/π ∫ Φ(α) Ti* (α) / √ (α (1 - α)) dα .
                     i=0                                                                 0

Здесь: штрих у знака суммы означает, что слагаемое с индексом 0 берется с дополнительным множителем 1/2; Ti* (α) - смещенный многочлен Чебышёва первого рода на [0, 1]: Ti* (α) = Ti (2α-1) ;  Ti (t) - многочлен Чебышёва первого рода i-го порядка на [-1, 1]; Δ = XK - XN. Если ряд Чебышёва (3) (и ряды (4), (5)) является быстросходящимся, то его сумма на [XN, XK] (и суммы рядов (4), (5)) хорошо приближается частичной суммой некоторого порядка. Эта частичная сумма принимается в качестве приближенного аналитического решения задачи (1), (2) на промежутке [XN, XK]. В противном случае, т.е. при медленной сходимости ряда (3) на интервале [XN, XK], получение аналитического решения в виде одной частичной суммы на всем отрезке интегрирования [XN, XK] может быть затруднено. Поэтому целесообразно использовать разбиение промежутка интегрирования [XN, XK] на такие элементарные сегменты некоторой длины H: [xs, xs+H], x0 = XN, s = 0, 1, ... , на каждом из которых ряды Чебышёва для решения Y(X) и его производных Y'(X), Y''(X) будут сходиться значительно быстрее. На каждом подобном сегменте решение исходной задачи Коши приближенно представляется в виде (K + 2) - й частичной суммы смещенного ряда Чебышёва

                                   K+2                                                                1
(6)     Y (xs + αH)   ≈   ∑ ' ai*[Y] Ti*(α) ,   0 ≤ α ≤ 1,   ai*[Y] = 2/π ∫ Y(xs + αH) Ti* (α) / √ (α (1 - α)) dα ,
                                    i=0                                                                0
а его производные - в виде частичных сумм (K + 1)-го и К-го порядков
                                    K+1                                                                  1
(7)     Y' (xs + αH)   ≈   ∑ ' ai*[Y '] Ti*(α),   0 ≤ α ≤ 1,   ai*[Y '] = 2/π ∫ Y ' (xs + αH) Ti* (α) / √ (α (1 - α)) dα ,
                                     i=0                                                                  0

                                      K                                                                     1
(8)     Y'' (xs + αH)   ≈   ∑ ' ai*[Y''] Ti*(α),   0 ≤ α ≤ 1,   ai*[Y ''] = 2/π ∫ Y '' (xs + αH) Ti* (α) / √ (α (1 - α)) dα .
                                     i=0                                                                   0

В этом случае аналитическое решение задачи  (1),(2)  состоит из совокупности частичных сумм рядов Чебышёва, построенных на этих элементарных сегментах. Порядок этих частичных сумм и длина элементарных сегментов задаются пользователем при обращении к подпрограмме. Число NX элементарных сегментов, на которые разбивается промежуток интегрирования, равно [(XK-XN) / H], если длина промежутка интегрирования является целым кратным H. Если длина интервала интегрирования не является целым кратным H, то число элементарных сегментов NX равно [(XK-XN) / H] + 1; в этом случае последний элементарный сегмент считается нестандартным (квадратные скобки означают целую часть числа).

После вычисления коэффициентов Чебышёва для решения задачи Коши и его производных на каждом отдельном элементарном сегменте [xs, xs + H] подпрограмма de89d_c передает управление специальной подпрограмме обработки результатов для дальнейшей работы с полученными на этом сегменте коэффициентами Чебышёва ai*[Y], ai*[Y'], ai*[Y'']. Характер и цель этой обработки определяет сам пользователь и выполняет ее с помощью составленной им же подпрограммы, имя которой задается при обращении к подпрограмме de89d_c. Например, он может использовать их для каких-то необходимых ему на данном элементарном сегменте вычислений, или запомнить вычисленные коэффициенты в удобном для себя виде, или просто их проигнорировать, если эти коэффициенты на данном элементарном сегменте ему не нужны. Таким образом, в подпрограмме обработки результатов можно, в частности, непосредственно приступить к применению полученных на элементарном сегменте [xs, xs + H] коэффициентов Чебышёва решения и его производных (или, по-другому, немедленно начать использование построенных на сегменте [xs, xs + H] частичных сумм (6), (7), (8) рядов Чебышёва), не дожидаясь окончания процедуры интегрирования системы дифференциальных уравнений (1) на всем промежутке [XN, XK]. Иными словами, подпрограмма de89d_c после вычисления коэффициентов Чебышёва на элементарном сегменте [xs, xs + H] = [xs, xs+1] предоставляет возможность приостановить процедуру интегрирования системы (1) на время обработки относящихся к этому сегменту результатов, а затем (после завершения такой обработки) продолжить дальнейшее интегрирование, т.е. перейти к вычислению коэффициентов на следующем элементарном сегменте [xs+1, xs+2] и т.д.

При разбиении промежутка интегрирования на элементарные сегменты решение задачи сводится к определению нескольких наборов коэффициентов ai*[Y], i = 0, 1, ... , K + 2. Коэффициенты ai*[Y] ряда Чебышёва для решения и коэффициенты ряда Чебышёва для Y'(xs + αH) на сегменте [xs, xs + H] выражаются через коэффициенты ai*[Φ] ряда Чебышёва второй производной Φ(α) = F(xs + αH, Y(xs + αH), Y'(xs + αH)),  0 ≤ α ≤ 1, на  [xs, xs + H], которые, в свою очередь, вычисляются приближенно итерационным способом, исходя из некоторого начального приближения. Вычисления выполняются с помощью квадратурной формулы Маркова на [xs, xs + H] с K + 1 узлом. При этом один из узлов квадратурной формулы совпадает с xs, а остальные K узлов лежат внутри интервала (xs, xs + H). Количество итераций, которое предписывается выполнить в этом итерационном процессе, одинаково для всех сегментов и задается при обращении к подпрограмме. Если при выбранном H ряды Чебышёва для Y(X) = Y(xs + αH),  0 ≤ α ≤ 1  , и его производных на элементарном сегменте [xs, xs + H] быстро сходятся, то для того, чтобы приближенное решение в конце одного такого сегмента имело максимальный порядок точности относительно H, необходимо выполнить не менее K итераций; при этом погрешность приближенного решения в конце элементарного сегмента является величиной порядка O(HK + 3)  при  H --> 0, а погрешность приближенного значения производной Y' - величиной порядка O(HK + 2)  при  H --> 0. Если H подобрано достаточно малым (или, вернее сказать, выбрано довольно удачным), то хорошая точность приближенного решения может быть получена и при меньшем числе итераций. Вообще, число итераций зависит от K и H. С увеличением H или К число итераций может также возрастать.

Начальное приближение коэффициентов ai*[Φ] ряда Чебышёва для второй производной на сегменте [xs, xs + H] может вычисляться двумя способами. В первом способе начальное приближение определяется только с использованием значений решения Y(X) и его первой производной Y'(X) в узле xs. При этом погрешность начального приближения для всех коэффициентов a0*[Φ], a1*[Φ], ..., aK*[Φ] является величиной O(H2) при H --> 0. Во втором способе начальное приближение определяется через коэффициенты ряда Чебышёва производной Φ(α) на предыдущем элементарном сегменте [xs - 1, xs]. В этом случае погрешности начального приближения для коэффициентов a0*[Φ], a1*[Φ], ... , aK*[Φ] имеют, соответственно, порядки O(H), O(H2), ... , O(HK + 1). Второй способ определения начального приближения в некоторых случаях может привести к более быстрой сходимости итерационного процесса и, тем самым, к меньшему числу выполняемых итераций. Второй способ может быть применен только начиная со второго элементарного сегмента [x0 + H, x0 + 2H]. На начальном элементарном сегменте [x0, x0 + H] всегда применяется исключительно первый способ. Способ выбора начального приближения задается пользователем при обращении к подпрограмме.

В дальнейшем при описании параметров подпрограммы коэффициенты ряда Чебышёва будем называть коэффициентами Чебышёва.

Залеткин С.Ф. Численное интегрирование обыкновенных дифференциальных уравнений с использованием ортогональных разложений // Математическое моделирование. 2010. 22. № 1. 69 - 85.

Арушанян О.Б., Волченскова Н.И., Залеткин С.Ф. О применении ортогональных разложений для приближенного интегрирования обыкновенных дифференциальных уравнений // Вестник Московского университета. Серия 1. Математика. Механика. 2010. № 4. 40 - 43.

Арушанян О.Б., Волченскова Н.И., Залеткин С.Ф. Вычисление коэффициентов разложения решения задачи Коши в ряд по многочленам Чебышёва. Вестник Московского университета. Серия 1. Математика. Механика. 2012. № 5, 24 - 30.

Арушанян О.Б., Залеткин С.Ф. Обоснование одного подхода к применению ортогональных разложений для приближенного интегрирования канонических систем обыкновенных дифференциальных уравнений второго порядка // Вестник Московского университета. Серия 1. Математика. Механика. 2018. № 3. 29 - 33.

Арушанян О.Б., Залеткин С.Ф. К теории вычисления ортогонального разложения решения задачи Коши для обыкновенных дифференциальных уравнений второго порядка // Вычислительные методы и программирование. 2018. 19. 178 - 184.

Использование

 int de89d_c (U_fp f, S_fp f2trea, int *m, double *xn, double *yn, double *dyn, double *xk,
                      int *k, int *iniapr, int *imax, double *h, double *y, double *dy, double *rab)

Параметры

f - имя функции вычисления значений правой части дифференциального уравнения. Первый оператор функции должен иметь вид:
int  f (x, y, dy, d2y, m) .
Здесь: x, y, dy - значения независимой и зависимой переменных и производной решения, соответственно. Вычисленное значение правой части должно быть помещено в d2y. В случае системы уравнений, т.е. когда m ≠ 1 , параметры y, dy и d2y представляют массивы длины m (тип параметров x, y, dy и d2y: с двойной точностью);
f2trea - имя функции обработки результатов. Первый оператор функции должен иметь вид:
int  f2trea (s, xi, xe, y, dy, ay,  ady, ad2y, m, kp1, kp2, kp3) .
   Здесь:
s - номер элементарного сегмента s = 1, 2, ... , nx (тип целый);
xi, xe - начало и конец элементарного сегмента с данным номером s: [xs-1, xs-1 + h], x0 = xn, т.е. xi = xs-1, xe = xs-1 + h (тип: с двойной точностью);
y, dy - значения решения задачи Коши и его первой производной, вычисленные функцией de89d_c в конце xe элементарного сегмента [xs-1, xs-1 + h], т.е. в точке xs = xs-1 + h (тип: с двойной точностью);
ay - двумерный массив с измерениями m, kp3 (kp3 = k+3). Переменная с индексом ay (n, i+1) содержит вычисленный функцией de89d_c i-й коэффициент Чебышёва для n-й компоненты решения yN(X) на элементарном сегменте [xi, xe], i = 0, 1, ... , k + 2;  n = 1, ... , m (тип: с двойной точностью);
ady - двумерный массив с измерениями m, kp2 (kp2 = k+2). Переменная с индексом ady (n, i+1) содержит вычисленный функцией de89d_c i-й коэффициент Чебышёва для n-й компоненты первой производной решения y'N(X) на элементарном сегменте [xi, xe], i = 0, 1, ... , k + 1;  n = 1, ... , m (тип: с двойной точностью);
ad2y - двумерный массив с измерениями m, kp1 (kp1 = k+1). Переменная с индексом ad2y (n, i+1) содержит вычисленный функцией de89d_c i-й коэффициент Чебышёва для n-й компоненты второй производной решения y''N(X) на элементарном сегменте [xi, xe], i = 0, 1, ... , k;  n = 1, ... , m (тип: с двойной точностью);
m - количество уравнений в системе (1) (тип: целый);
kp1 - целый параметр, имеющий значение k + 1;
kp2 - целый параметр, имеющий значение k + 2;
kp3 - целый параметр, имеющий значение k + 3;
    Таким образом, для системы уравнений (т.е. когда m ≠ 1) параметры y, dy, ay, ady, ad2y представляют массивы с регулируемыми измерениями, описатели которых имеют вид y(m), dy(m), ay (m, kp3), ady (m, kp2), ad2y (m, kp1). В случае, когда интегрируется одно скалярное уравнение (т.е. при m = 1), парметры ay, ady, ad2y представляют массивы с регулируемыми измерениями, описатели которых могут иметь вид ay (kp3), ady (kp2), ad2y (kp1), а параметры y и dy могут быть переменными (простыми переменными). Данная функция f2trea составляется пользователем и выполняет нужную ему обработку содержащихся в ay, ady, ad2y коэффициентов (см. "Математическое описание"). Обработка результатов на каждом элементарном сегменте в функции f2trea должна заканчиваться оператором return. При работе функции f2trea значения всех ее параметров не должны изменяться.
m - количество уравнений в системе (тип: целый);
xn, yn, dyn - начальные значения аргумента, решения и его производной; в случае системы уравнений (т.е. когда m ≠ 1) yn и dyn представляют одномерные массивы длины m (тип: с двойной точностью);
xk - конец интервала интегрирования. На отрезке [xn, xk] вычисляется приближенное аналитическое решение задачи Коши в виде одной частичной суммы ряда Чебышёва либо в виде совокупности частичных сумм. xk может быть больше, меньше или равно xn (тип: с двойной точностью);
k - порядок частичной суммы смещенного ряда Чебышёва, с помощью которой аппроксимируется вторая производная решения задачи Коши на каждом элементарном сегменте разбиения интервала интегрирования; при этом само решение задачи Коши приближается на каждом элементарном сегменте частичной суммой (k + 2) - го порядка, а его первая производная - частичной суммой (k + 1) - го порядка; k≥2 (см. "Математическое описание" и "Замечания по использованию"; тип: целый);
iniapr - целый указатель способа выбора начального приближения коэффициентов Чебышёва для второй производной решения на каждом элементарном сегменте:
iniapr=1 - для первого способа, когда начальное приближение определяется только с использованием значений решения и его первой производной в начале каждого элементарного сегмента;
iniapr=2 - для второго способа, когда начальное приближение коэффициентов Чебышёва на текущем элементарном сегменте (начиная со второго) определяется через коэффициенты Чебышёва, вычисленные на предыдущем элементарном сегменте, т.е. путем экстраполяции коэффициентов с предыдущего сегмента на следующий (см. "Математическое описание");
imax - целая переменная, задающая количество итераций, которое предполагается выполнить в итерационном процессе вычисления коэффициентов Чебышёва для второй производной решения задачи Коши на каждом элементарном сегменте, исходя из некоторого начального приближения, способ определения которого задается параметром iniapr; imax≥1. Для получения максимального порядка точности приближенного решения необходимо выполнить не менее k итераций (см. "Математическое описание" и "Замечания по использованию");
h - переменная с двойной точностью, содержащая значение длины элементарных сегментов, на которые разбивается интервал интегрирования (диаметр разбиения промежутка интегрирования или аналог шага интегрирования для разностных методов). Предполагается, что на каждом элементарном сегменте ряды Чебышёва для решения и его производных являются быстросходящимися рядами. Может задаваться с учетом направления интегрирования, т.е. положительным, если xk > xn, отрицательным, если xk < xn , или без такого учета в виде абсолютной величины;
y, dy - на выходе из функции содержат значения решения задачи Коши и его первой производной соответственно, вычисленные функцией при значении аргумента xk. Для системы уравнений (когда m ≠ 1) задаются одномерными массивами длины m. В случае совпадения значений параметров xn и xk значения y и dy полагаются равными начальным значениям yn и dyn (тип: с двойной точностью);
rab - одномерный рабочий массив длины 2 * k2 + 10 * k + 7 * m * k + 12 * m +5 (тип: с удвоенной точностью).

Версии: нет

Вызываемые подпрограммы

de78d_c - выполнение одного шага приближенного интегрирования канонической системы обыкновенных дифференциальных уравнений второго порядка методом рядов Чебышёва
 

Кроме того, используются рабочие функции de70dk_c, de70dh_c, de80dk_c, de80dh_c, de80d0_c, de80di_c, de70df_c, de70dq_c, de71de_c, de70dp_c, de71dt_c, de71dp_c, de71di_c, de71df_c, de71ds_c, de70da_c, de70dc_c.

Замечания по использованию

 

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

Если начальное приближение для коэффициентов Чебышёва функции Φ(α) определяется первым способом (т.е. при iniapr = 1), то для получения максимального порядка точности приближенного решения в конце элементарного сегмента необходимо выполнить в итерационном процессе не менее k итераций; тогда imax≥k. Если начальное приближение коэффициентов Чебышёва функции Φ(α) определяется вторым способом (т.е. при iniapr = 2), то для получения максимального порядка точности приближенного решения необходимо выполнить в итерационном процессе не менее k + 1 итераций; в этом случае imax≥k + 1. Однако в некоторых случаях при втором способе определения начального приближения итерационный процесс может сойтись за значительно меньшее число итераций.

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

Если правая часть дифференциального уравнения не зависит от переменных Y, Y', т.е. дифференциальное уравнение имеет вид Y'' = F(X), то число итераций можно положить равным 1 при любых h и k, удовлетворяющих описанным выше условиям. В этом случае параметр imax = 1.

Как следует из вышеописанного, управлять точностью приближенного решения задачи Коши можно с помощью четырех параметров h, k, imax, iniapr, подбирая для каждой конкретной задачи наиболее подходящий набор их значений.

Для вычисления решения при заданном значении аргумента X [XN, XK] необходимо найти такой элементарный сегмент [xS-1, xS] (это можно сделать в функции f2trea), чтобы X  [xS-1, xS], и определить нормализованный аргумент α по формуле α = (X - xS-1) / H = (X - xS-1) / (xS - xS-1). Далее, зная α и S и пользуясь соответствующим набором коэффициентов из массива AY, найти значение решения Y(X) по формуле:

      Y(X) = (y1(X), ... , yM(X)),
                                              K+2
      yN(X) = yN (xS-1 + αH) =  ∑ ' AY (N, I + 1) * TI*(α),     N = 1, 2, ... , M.
                                               I=0

Аналогично можно вычислить первую производную решения Y'(X):

      Y'(X) = (y'1(X), ... , y'M(X)),
                                                K+1
      y'N(X) = y'N (xS-1 + αH) =  ∑ ' ADY (N, I + 1) * TI*(α),     N = 1, 2, ... , M; 
                                                 I=0

и вторую производную решения Y'' = F(X,Y(X),Y'(X)):

      Y''(X) = (y''1(X), ... , y''M(X)),
                                                   K
      y''N(X) = y''N (xS-1 + αH) =  ∑ ' AD2Y (N, I + 1) * TI*(α),     N = 1, 2, ... , M. 
                                                  I=0                                                                             

При работе функции значения параметров m, xn, yn, dyn, xk, k, iniapr, imax сохраняются. Значение параметра h сохраняется, если он задан с учетом направления интегрирования, иначе его знак меняется на противоположный. Если после работы функции нет необходимости иметь начальные значения решения yn и/или производной dyn, то параметры yn и y, а в случае производной, параметры dyn и dy при обращении к ней можно совместить.

При интегрировании системы уравнений с помощью функции de89d_c используются внешние структуры, элементы которых нельзя портить: struct { double wc1, wc2, wc3;  double hd2, hd4, hold;  int lasn; }com70d_;
struct { int jlas, jlas1, jlas2, jlas3;  double h2d4, h2d8, h2d16, h2d32, h2d96; }com80d_;

Пример использования

Вычисления в трех примерах на Си проводились с 15-16 значащими цифрами.

1) Решается задача Коши

       y''1 = -2qy'2 - ((1 -e3-y1+y'2/(2q) ) / (x+1))2 ,    y1(0) = cos q + 3 ,    y'1(0) = 2q sin q ,

       y''2 = 2qy'1 - (y'2-2q(y1-3))2 ,    y2(0) = -sin q + 2 ,    y'2(0) = 2q cos q ,   q = 1/2 ,   0 ≤ x ≤ xf ,    xf = 1 .

Точное решение системы

      y1(x) = 3 + cos q(2x - 1) ,   y2(x) = 2 + sin q(2x - 1) .  

Функции y1(x), y2(x) разлагаются на отрезке [0, 1] в смещенные ряды Чебышёва, коэффициенты которых выражаются через цилиндрические функции:

                                         
       y1(x) = 3 + j0 (q) + 2 ∑ (-1)i j2i (q) t2i* (x) ,
                                        i=1
                             
       y2(x) = 2 + 2 ∑ (-1)i j2i+1 (q) t2i+1* (x) .
                            i=0

Интервал интегрирования [0, 1] разбивается на два элементарных сегмента длиной h = 0,5.

 int main(void)
{
    /* Builtin functions */
    double cos(double), sin(double);

    /* Local variables */
    extern int f_c();
    static double h__;
    static int m;
    static double q, y[2], h0;
    static int k0;
    static double x1, dy[2], xk, xn, yn[2], yt[2], rab[535], dyn[2], dyt[2];
    extern int de89d_c( );
    static double dely[2];
    static int imax;
    static double deldy[2];
    static int iniap0;
    extern int f2trea_c();
    static int iniapr;

    m = 2;
    q = .5;
    xn = 0.f;
    yn[0] = cos(q) + 3.;
    yn[1] = -sin(q) + 2.;
    dyn[0] = q * 2. * sin(q);
    dyn[1] = q * 2. * cos(q);
    xk = 1.;
    h0 = .5;
    x1 = xk * 2. - 1.;
    yt[0] = cos(q * x1) + 3.;
    yt[1] = sin(q * x1) + 2.;
    dyt[0] = q * -2. * sin(q * x1);
    dyt[1] = q * 2. * cos(q * x1);
    k0 = 11;
    imax = 13;

    for (iniap0 = 1; iniap0 <= 2; ++iniap0) {
	iniapr = iniap0;
	h__ = h0;
	de89d_c((U_fp)f_c, (U_fp)f2trea_c, &m, &xn, yn, dyn, &xk, &k0, &iniapr,
                &imax, &h__, y, dy, rab);

	dely[0] = yt[0] - y[0];
	dely[1] = yt[1] - y[1];
	deldy[0] = dyt[0] - dy[0];
	deldy[1] = dyt[1] - dy[1];
    /*  Операторы вывода на печать:  h0, k0, iniapr, imax, y, yt, dely, dy, dyt, deldy  */
    . . . . . . . . . . . . . . . . . . . . . . . . . . 
    return 0;
} /* main */
/*..........................................................................*/
int f_c(double *x, double *y, double *dy,
	double *z__, int *m)
{
    /* System generated locals */
    double d__1;
    /* Builtin functions */
    double exp(double);
    /* Local variables */
    static real q;
    /* Parameter adjustments */
    --z__;
    --dy;
    --y;

    /* Function Body */
    q = .5f;
/* Computing 2nd power */
    d__1 = (1. - exp(3. - y[1] + dy[2] * .5 / q)) / (*x + 1.);
    z__[1] = q * -2. * dy[2] - d__1 * d__1;
/* Computing 2nd power */
    d__1 = dy[2] - q * 2. * (y[1] - 3.);
    z__[2] = q * 2. * dy[1] - d__1 * d__1;
    return 0;
} /* f_c */
/*..........................................................................*/
 int f2trea_c(int *s, double *xi, double *xe,
	double *y, double *dy, double *ay, double *ady,
	double *ad2y, int *m, int *kp1, int *kp2, int *kp3)
{
    /* System generated locals */
    int ay_dim1, ay_offset, ady_dim1, ady_offset, ad2y_dim1, ad2y_offset,
	    y_dim1, dy_dim1, i__1, i__2, i__3;
    /* Local variables */
    static int j, l;

    /* Parameter adjustments */
/*    dy_dim1 = *m; */
    --dy;
/*    y_dim1 = *m; */
    --y;
    ad2y_dim1 = *m;
    ad2y_offset = 1 + ad2y_dim1;
    ad2y -= ad2y_offset;
    ady_dim1 = *m;
    ady_offset = 1 + ady_dim1;
    ady -= ady_offset;
    ay_dim1 = *m;
    ay_offset = 1 + ay_dim1;
    ay -= ay_offset;

    /*  Операторы вывода на печать:  ay, ady, ad2y  */
    . . . . . . . . . . . . . . . . . . . . . . . . . . 
    return 0;
} /* f2trea_c*/

 
Результаты:
--------------
  COEFFICIENTS AY, ADY AND AD2Y ON   1 SEGMENT 
  xi= 0.00000000000000e+000  xe= 5.00000000000000e-001 

  SOLUTION Y AT THE END OF THE SEGMENT [XI,XE],i.e. Y(XE):
  y= 4.00000000000000e+000 2.00000000000000e+000 

  DERIVATIVE DY AT THE END OF THE SEGMENT [XI,XE],i.e. DY(XE):
  dy= -2.77555756156289e-017 1.00000000000000e+000 

        Chebyshev coefficients for   1 component 
 -------------------------------------------------------
              for Y                   for  Y'                for Y'' 

   0   7.90766440054603e+000   4.87106693080399e-001  -1.90766440054603e+000
   1   6.13690356801086e-002  -2.40340620085586e-001  -6.13690356801087e-002
   2  -1.50605601386582e-002  -3.84559236046994e-003   1.50605601386584e-002
   3  -1.60442087410517e-004   6.28342132945850e-004   1.60442087410362e-004
   4   1.96510520421456e-005   5.01773738245519e-006  -1.96510520420525e-005
   5   1.25508828077726e-007  -4.91532402808361e-007  -1.25508828203872e-007
   6  -1.02440704938832e-008  -2.61574065386791e-009   1.02440702819581e-008
   7  -4.67226936874155e-011   1.82980898031941e-010   4.67231817878567e-011
   8   2.85969736162728e-012   7.30192627363518e-013  -2.86000783060632e-012
   9   1.01431297105263e-014  -3.97331122042255e-014  -9.14636340840561e-015
  10  -4.96774165066728e-016  -1.12711794379109e-016   7.76248097918153e-016
  11  -1.26549625974403e-018   8.82100111270628e-018  -1.29419858076879e-016
  12   9.18854282573571e-020  -1.34812352163416e-018 
  13  -1.29627261695592e-020

        Chebyshev coefficients for   2 component 
 -------------------------------------------------------
              for Y                   for  Y'                for Y'' 

   0   3.51289330691960e+000   1.90766440054603e+000   4.87106693080399e-001
   1   2.40340620085586e-001   6.13690356801086e-002  -2.40340620085586e-001
   2   3.84559236046995e-003  -1.50605601386582e-002  -3.84559236046998e-003
   3  -6.28342132945849e-004  -1.60442087410516e-004   6.28342132945896e-004
   4  -5.01773738245590e-006   1.96510520421462e-005   5.01773738240898e-006
   5   4.91532402815885e-007   1.25508828072645e-007  -4.91532402781644e-007
   6   2.61574064097434e-009  -1.02440704892279e-008  -2.61574049683619e-009
   7  -1.82980896223137e-010  -4.67226941228554e-011   1.82980701293414e-010
   8  -7.30200654213996e-013   2.85969926783270e-012   7.30374043715490e-013
   9   3.97249934984229e-014   1.01477468403585e-014  -4.00518478788341e-014
  10   1.26884296980380e-016  -5.00264053747142e-016  -2.63728790325310e-016
  11  -5.68118200528679e-018  -2.99691807187852e-018  -3.07235790628080e-017
  12  -3.12178965820679e-020  -3.20037281904250e-019 
  13  -3.07728155677163e-021

  COEFFICIENTS AY, ADY AND AD2Y ON   2 SEGMENT 
  xi= 5.00000000000000e-001  xe= 1.00000000000000e+000 

  SOLUTION Y AT THE END OF THE SEGMENT [XI,XE],i.e. Y(XE):
  y= 3.87758256189037e+000 2.47942553860420e+000 

  DERIVATIVE DY AT THE END OF THE SEGMENT [XI,XE],i.e. DY(XE):
  dy= -4.79425538604203e-001 8.77582561890373e-001 

        Chebyshev coefficients for   1 component 
 -------------------------------------------------------
              for Y                   for  Y'                for Y'' 

   0   7.90766440054603e+000  -4.87106693080399e-001  -1.90766440054603e+000
   1  -6.13690356801086e-002  -2.40340620085586e-001   6.13690356801084e-002
   2  -1.50605601386582e-002   3.84559236046995e-003   1.50605601386584e-002
   3   1.60442087410517e-004   6.28342132945852e-004  -1.60442087410723e-004
   4   1.96510520421456e-005  -5.01773738245881e-006  -1.96510520420564e-005
   5  -1.25508828077188e-007  -4.91532402807637e-007   1.25508827958605e-007
   6  -1.02440704938717e-008   2.61574062872712e-009   1.02440702490797e-008
   7   4.67226935320833e-011   1.82980898204252e-010  -4.67222202970414e-011
   8   2.85969737688836e-012  -7.30209069543573e-013  -2.86005035843653e-012
   9  -1.01437402154053e-014  -3.97339166031811e-014   1.11601537473166e-014
  10  -4.96786405976199e-016   1.40225965604771e-016   7.91636992503869e-016
  11   1.60033335690377e-018   8.99587491481669e-018  -5.79235010650381e-017
  12   9.37070303626739e-020  -6.03369802760813e-019 
  13  -5.80163271885397e-021

        Chebyshev coefficients for   2 component 
 -------------------------------------------------------
              for Y                   for  Y'                for Y'' 

   0   4.48710669308040e+000   1.90766440054603e+000  -4.87106693080399e-001
   1   2.40340620085586e-001  -6.13690356801087e-002  -2.40340620085586e-001
   2  -3.84559236046995e-003  -1.50605601386582e-002   3.84559236046997e-003
   3  -6.28342132945849e-004   1.60442087410518e-004   6.28342132945798e-004
   4   5.01773738245614e-006   1.96510520421447e-005  -5.01773738246805e-006
   5   4.91532402816009e-007  -1.25508828078350e-007  -4.91532402831643e-007
   6  -2.61574064109370e-009  -1.02440704956549e-008   2.61574066593524e-009
   7  -1.82980896269471e-010   4.67226941480699e-011   1.82980959791371e-010
   8   7.30200593334941e-013   2.85969543545860e-012  -7.30206356676577e-013
   9   3.97248463941156e-014  -1.01438253662950e-014  -3.95480779796562e-014
  10  -1.26818991751509e-016  -4.93504917727713e-016   1.49069696662479e-016
  11  -5.59999852514457e-018   1.69397382570999e-018  -6.76845614391188e-017
  12   1.76455606844790e-020  -7.05047514990821e-019 
  13  -6.77930302875790e-021

 ------------------------------------------------------------
 h0=5.00000000000000e-001 k0= 11 iniapr= 1 imax= 13 

 y= 3.87758256189037e+000 2.47942553860420e+000
 yt= 3.87758256189037e+000 2.47942553860420e+000
 dely= 4.44089209850063e-016 0.00000000000000e+000

 dy= -4.79425538604203e-001 8.77582561890373e-001
 dyt= -4.79425538604203e-001 8.77582561890373e-001
 deldy= -5.55111512312578e-017 0.00000000000000e+000 
 ***********************************************************

  COEFFICIENTS AY, ADY AND AD2Y ON   1 SEGMENT 
  xi= 0.00000000000000e+000  xe= 5.00000000000000e-001 

  SOLUTION Y AT THE END OF THE SEGMENT [XI,XE],i.e. Y(XE):
  y= 4.00000000000000e+000 2.00000000000000e+000 

  DERIVATIVE DY AT THE END OF THE SEGMENT [XI,XE],i.e. DY(XE):
  dy= -2.77555756156289e-017 1.00000000000000e+000 

        Chebyshev coefficients for   1 component 
 -------------------------------------------------------
              for Y                   for  Y'                for Y'' 

   0   7.90766440054603e+000   4.87106693080399e-001  -1.90766440054603e+000
   1   6.13690356801086e-002  -2.40340620085586e-001  -6.13690356801087e-002
   2  -1.50605601386582e-002  -3.84559236046994e-003   1.50605601386584e-002
   3  -1.60442087410517e-004   6.28342132945850e-004   1.60442087410362e-004
   4   1.96510520421456e-005   5.01773738245519e-006  -1.96510520420525e-005
   5   1.25508828077726e-007  -4.91532402808361e-007  -1.25508828203872e-007
   6  -1.02440704938832e-008  -2.61574065386791e-009   1.02440702819581e-008
   7  -4.67226936874155e-011   1.82980898031941e-010   4.67231817878567e-011
   8   2.85969736162728e-012   7.30192627363518e-013  -2.86000783060632e-012
   9   1.01431297105263e-014  -3.97331122042255e-014  -9.14636340840561e-015
  10  -4.96774165066728e-016  -1.12711794379109e-016   7.76248097918153e-016
  11  -1.26549625974403e-018   8.82100111270628e-018  -1.29419858076879e-016
  12   9.18854282573571e-020  -1.34812352163416e-018 
  13  -1.29627261695592e-020

        Chebyshev coefficients for   2 component 
 -------------------------------------------------------
              for Y                   for  Y'                for Y'' 

   0   3.51289330691960e+000   1.90766440054603e+000   4.87106693080399e-001
   1   2.40340620085586e-001   6.13690356801086e-002  -2.40340620085586e-001
   2   3.84559236046995e-003  -1.50605601386582e-002  -3.84559236046998e-003
   3  -6.28342132945849e-004  -1.60442087410516e-004   6.28342132945896e-004
   4  -5.01773738245590e-006   1.96510520421462e-005   5.01773738240898e-006
   5   4.91532402815885e-007   1.25508828072645e-007  -4.91532402781644e-007
   6   2.61574064097434e-009  -1.02440704892279e-008  -2.61574049683619e-009
   7  -1.82980896223137e-010  -4.67226941228554e-011   1.82980701293414e-010
   8  -7.30200654213996e-013   2.85969926783270e-012   7.30374043715490e-013
   9   3.97249934984229e-014   1.01477468403585e-014  -4.00518478788341e-014
  10   1.26884296980380e-016  -5.00264053747142e-016  -2.63728790325310e-016
  11  -5.68118200528679e-018  -2.99691807187852e-018  -3.07235790628080e-017
  12  -3.12178965820679e-020  -3.20037281904250e-019 
  13  -3.07728155677163e-021

  COEFFICIENTS AY, ADY AND AD2Y ON   2 SEGMENT 
  xi= 5.00000000000000e-001  xe= 1.00000000000000e+000 

  SOLUTION Y AT THE END OF THE SEGMENT [XI,XE],i.e. Y(XE):
  y= 3.87758256189037e+000 2.47942553860420e+000 

  DERIVATIVE DY AT THE END OF THE SEGMENT [XI,XE],i.e. DY(XE):
  dy= -4.79425538604203e-001 8.77582561890373e-001 

        Chebyshev coefficients for   1 component 
 -------------------------------------------------------
              for Y                   for  Y'                for Y'' 

   0   7.90766440054603e+000  -4.87106693080399e-001  -1.90766440054603e+000
   1  -6.13690356801086e-002  -2.40340620085586e-001   6.13690356801084e-002
   2  -1.50605601386582e-002   3.84559236046995e-003   1.50605601386584e-002
   3   1.60442087410517e-004   6.28342132945852e-004  -1.60442087410723e-004
   4   1.96510520421456e-005  -5.01773738245881e-006  -1.96510520420564e-005
   5  -1.25508828077188e-007  -4.91532402807637e-007   1.25508827958605e-007
   6  -1.02440704938717e-008   2.61574062872712e-009   1.02440702490797e-008
   7   4.67226935320833e-011   1.82980898204252e-010  -4.67222202970414e-011
   8   2.85969737688836e-012  -7.30209069543573e-013  -2.86005035843653e-012
   9  -1.01437402154053e-014  -3.97339166031811e-014   1.11601537473166e-014
  10  -4.96786405976199e-016   1.40225965604771e-016   7.91636992503869e-016
  11   1.60033335690377e-018   8.99587491481669e-018  -5.79235010650381e-017
  12   9.37070303626739e-020  -6.03369802760813e-019 
  13  -5.80163271885397e-021

        Chebyshev coefficients for   2 component 
 -------------------------------------------------------
              for Y                   for  Y'                for Y'' 

   0   4.48710669308040e+000   1.90766440054603e+000  -4.87106693080399e-001
   1   2.40340620085586e-001  -6.13690356801086e-002  -2.40340620085586e-001
   2  -3.84559236046995e-003  -1.50605601386582e-002   3.84559236046994e-003
   3  -6.28342132945849e-004   1.60442087410517e-004   6.28342132945814e-004
   4   5.01773738245609e-006   1.96510520421449e-005  -5.01773738246067e-006
   5   4.91532402816007e-007  -1.25508828078044e-007  -4.91532402820844e-007
   6  -2.61574064108335e-009  -1.02440704954069e-008   2.61574066108760e-009
   7  -1.82980896263658e-010   4.67226939568647e-011   1.82980958685624e-010
   8   7.30200587182463e-013   2.85969535795796e-012  -7.30200496828993e-013
   9   3.97248434434145e-014  -1.01436228128921e-014  -3.95442236851260e-014
  10  -1.26815220629792e-016  -4.93369967886144e-016   1.40345699235993e-016
  11  -5.59764330762729e-018   1.59483749131810e-018  -7.46262542345040e-017
  12   1.66128905345635e-020  -7.77356814942750e-019 
  13  -7.47458475906490e-021
 ------------------------------------------------------------

 h0=5.00000000000000e-001 k0= 11 iniapr= 2 imax= 13 

 y= 3.87758256189037e+000 2.47942553860420e+000
 yt= 3.87758256189037e+000 2.47942553860420e+000
 dely=   4.44089209850063e-016 0.00000000000000e+000

 dy= -4.79425538604203e-001 8.77582561890373e-001
 dyt= -4.79425538604203e-001 8.77582561890373e-001
 deldy= -5.55111512312578e-017 0.00000000000000e+000 

 ***********************************************************

2) Решается задача Коши из примера 1 также с разбиением интервала интегрирования [0, 1] на два элементарных сегмента длиной h = 0,5. b этом примере компоненты решения y1(x) и y2(x) рассматриваются как координаты. Компоненты производной решения y'1(x) и y'2(x) понимаются как компоненты скорости, а компоненты второй производной решения y''1(x) и y''2(x) отождествляются с компонентами ускорения. Для данного примера функция обработки результатов f2trea_c устроена следующим образом. Коэффициенты Чебышёва для каждой координаты запоминаются (сохраняются) в отдельном массиве. Всего таких массивов четыре (по два массива на каждом сегменте). Коэффициенты Чебышёва для каждой компоненты скорости также запоминаются в отдельных массивах и таких массивов тоже четыре (по два массива на каждом сегменте). Подобным образом запоминаются в своих массивах компоненты ускорения. Все эти массивы помещаются во внешнюю структуру first_ для первого сегмента и во внешнюю структуруsecond_ для второго сегмента. В этих же структурах размещаются значения координат и компоненты скорости в конце каждого сегмента (интервала) и границы каждого сегмента. Поскольку внешние структуры first_ и second_ описаны в функции обработки результатов и в главной (вызывающей) функции, то на выходе из функции de89d_c вычисленные в ней коэффициенты Чебышёва будут доступны также в главной функции. Приводятся фрагмент вызывающей функции, функция f_c вычисления значений правой части системы, функция f2trea_c обработки результатов. Далее представлены значения параметров h, k, iniapr, imax, приближенное решение y и производня dy, вычисленные в конце интервала xk = xf, точные решение yt и производная dyt (в точке xf) и абсолютные погрешности приближенных значений y и dy. Затем даются те же результаты, что и в примере 1, а именно: границы элементарных сегментов, значения координат и компоненты скорости в конце каждого сегмента, коэффициенты Чебышёва для координат, компонент скорости и ускорения на каждом сегменте при значении параметра iniapr = 1.

  
/* Common Block Declarations */
struct {
    double ay1[14], ay2[14], av1[13], av2[13], aw1[12], aw2[12], ya[2],
	    va[2], ina[2];
} first_;

struct {
    double by1[14], by2[14], bv1[13], bv2[13], bw1[12], bw2[12], yb[2],
	    vb[2], inb[2];
} second_;
/*..........................................................................*/
 int main(void)
{
    /* System generated locals */
    int i__1, i__2;

    /* Builtin functions */
    double cos(double), sin(double);

    /* Local variables */
    extern int f_c();
    static double h__;
    static int j, m;
    static double q, y[2], h0;
    static int k0;
    static double x1, dy[2], xk, xn, yn[2], yt[2];
    static int kp1, kp2, kp3;
    static double rab[535], dyn[2], dyt[2];
    extern int de89d_c( );
    static double dely[2];
    static int imax;
    static double deldy[2];
    extern int f2trea_c();
    static int iniapr;

/*    AY1 - CHEBYSHEV COEFFICIENTS FOR 1 COORDINATE AT 1 INTERVAL */
/*    AY2 - CHEBYSHEV COEFFICIENTS FOR 2 COORDINATE AT 1 INTERVAL */

/*    AV1 - CHEBYSHEV COEFFICIENTS FOR 1 VELOCITY COMPONENT AT 1 INTERVAL */
/*    AV2 - CHEBYSHEV COEFFICIENTS FOR 2 VELOCITY COMPONENT AT 1 INTERVAL */

/*    AW1 - CHEBYSHEV COEFFICIENTS FOR 1 ACCELERATION COMPONENT AT 1 INTERVAL */
/*    AW2 - CHEBYSHEV COEFFICIENTS FOR 2 ACCELERATION COMPONENT AT 1 INTERVAL */

/*    BY1 - CHEBYSHEV COEFFICIENTS FOR 1 COORDINATE AT 2 INTERVAL */
/*    BY2 - CHEBYSHEV COEFFICIENTS FOR 2 COORDINATE AT 2 INTERVAL */

/*    BV1 - CHEBYSHEV COEFFICIENTS FOR 1 VELOCITY COMPONENT AT 2 INTERVAL */
/*    BV2 - CHEBYSHEV COEFFICIENTS FOR 2 VELOCITY COMPONENT AT 2 INTERVAL */

/*    BW1 - CHEBYSHEV COEFFICIENTS FOR 1 ACCELERATION COMPONENT AT 2 INTERVAL */
/*    BW2 - CHEBYSHEV COEFFICIENTS FOR 2 ACCELERATION COMPONENT AT 2 INTERVAL */

/*     YA - COORDINATES AT THE END OF 1 INTERVAL */
/*     VA - VELOCITY    AT THE END OF 1 INTERVAL */
/*     YB - COORDINATES AT THE END OF 2 INTERVAL */
/*     VB - VELOCITY    AT THE END OF 2 INTERVAL */

/*    INA - BOUNDARIES OF 1 INTERVAL */
/*    INB - BOUNDARIES OF 2 INTERVAL */

    m = 2;
    q = .5;
    xn = 0.f;
    yn[0] = cos(q) + 3.;
    yn[1] = -sin(q) + 2.;
    dyn[0] = q * 2. * sin(q);
    dyn[1] = q * 2. * cos(q);
    xk = 1.;
    h0 = .5;
    x1 = xk * 2. - 1.;
    yt[0] = cos(q * x1) + 3.;
    yt[1] = sin(q * x1) + 2.;
    dyt[0] = q * -2. * sin(q * x1);
    dyt[1] = q * 2. * cos(q * x1);
    k0 = 11;
    imax = 13;
    iniapr = 1;
    h__ = h0;

    de89d_c((U_fp)f_c, (U_fp)f2trea_c, &m, &xn, yn, dyn, &xk, &k0, &iniapr,
             &imax, &h__, y, dy, rab);

    dely[0] = yt[0] - y[0];
    dely[1] = yt[1] - y[1];
    deldy[0] = dyt[0] - dy[0];
    deldy[1] = dyt[1] - dy[1];

    /*  Операторы вывода на печать:  h0, k, iniapr, imax, y, yt, dely,  */
    /*                          ina,ya,ay1,av1,ay2,av2,inb.yb,by1,bv1,by2,bv2  */
    . . . . . . . . . . . . . . . . . . . . . . . . . . 
    return 0;
} /* main */
/*..........................................................................*/
/* Subroutine */ int f_c(double *x, double *y, double *dy,
	double *z__, int *m)
{
    /* System generated locals */
    double d__1;
    /* Builtin functions */
    double exp(double);
    /* Local variables */
    static real q;
    /* Parameter adjustments */
    --z__;
    --dy;
    --y;

    /* Function Body */
    q = .5f;
/* Computing 2nd power */
    d__1 = (1. - exp(3. - y[1] + dy[2] * .5 / q)) / (*x + 1.);
    z__[1] = q * -2. * dy[2] - d__1 * d__1;
/* Computing 2nd power */
    d__1 = dy[2] - q * 2. * (y[1] - 3.);
    z__[2] = q * 2. * dy[1] - d__1 * d__1;
    return 0;
} /* f_c */
/*..........................................................................*/
 int f2trea_c(int *s, double *xi, double *xe,
	double *y, double *dy, double *ay, double *ady,
	double *ad2y, int *m, int *kp1, int *kp2, int *kp3)
{
    /* System generated locals */
    int ay_dim1, ay_offset, ady_dim1, ady_offset, ad2y_dim1, ad2y_offset,
	    i__1;
    /* Local variables */
    static int i__;

/*    AY1 - CHEBYSHEV COEFFICIENTS FOR 1 COORDINATE AT 1 INTERVAL */
/*    AY2 - CHEBYSHEV COEFFICIENTS FOR 2 COORDINATE AT 1 INTERVAL */

/*    AV1 - CHEBYSHEV COEFFICIENTS FOR 1 VELOCITY COMPONENT AT 1 INTERVAL */
/*    AV2 - CHEBYSHEV COEFFICIENTS FOR 2 VELOCITY COMPONENT AT 1 INTERVAL */

/*    AW1 - CHEBYSHEV COEFFICIENTS FOR 1 ACCELERATION COMPONENT AT 1 INTERVAL */
/*    AW2 - CHEBYSHEV COEFFICIENTS FOR 2 ACCELERATION COMPONENT AT 1 INTERVAL */

/*    BY1 - CHEBYSHEV COEFFICIENTS FOR 1 COORDINATE AT 2 INTERVAL */
/*    BY2 - CHEBYSHEV COEFFICIENTS FOR 2 COORDINATE AT 2 INTERVAL */

/*    BV1 - CHEBYSHEV COEFFICIENTS FOR 1 VELOCITY COMPONENT AT 2 INTERVAL */
/*    BV2 - CHEBYSHEV COEFFICIENTS FOR 2 VELOCITY COMPONENT AT 2 INTERVAL */

/*    BW1 - CHEBYSHEV COEFFICIENTS FOR 1 ACCELERATION COMPONENT AT 2 INTERVAL */
/*    BW2 - CHEBYSHEV COEFFICIENTS FOR 2 ACCELERATION COMPONENT AT 2 INTERVAL */

/*     YA - COORDINATES AT THE END OF 1 INTERVAL */
/*     VA - VELOCITY    AT THE END OF 1 INTERVAL */

/*     YB - COORDINATES AT THE END OF 2 INTERVAL */
/*     VB - VELOCITY    AT THE END OF 2 INTERVAL */

/*    INA - BOUNDARIES OF 1 INTERVAL */
/*    INB - BOUNDARIES OF 2 INTERVAL */

    /* Parameter adjustments */
    --dy;
    --y;
    ad2y_dim1 = *m;
    ad2y_offset = 1 + ad2y_dim1;
    ad2y -= ad2y_offset;
    ady_dim1 = *m;
    ady_offset = 1 + ady_dim1;
    ady -= ady_offset;
    ay_dim1 = *m;
    ay_offset = 1 + ay_dim1;
    ay -= ay_offset;

    /* Function Body */
    switch (*s) {
	case 1:  goto L10;
	case 2:  goto L30;
    }
/* --------SAVING CHEBYSHEV COEFFICIENTS FOR  COORDINATES, */
/* --------     VELOCITY COMPONENTS AND ACCELERATION COMPONENTS */
/* ---------             AT THE FIRST INTERVAL */
L10:
    i__1 = *kp3;
    for (i__ = 1; i__ <= i__1; ++i__) {
	first_1.ay1[i__ - 1] = ay[i__ * ay_dim1 + 1];
/* L15: */
	first_1.ay2[i__ - 1] = ay[i__ * ay_dim1 + 2];
    }

    i__1 = *kp2;
    for (i__ = 1; i__ <= i__1; ++i__) {
	first_1.av1[i__ - 1] = ady[i__ * ady_dim1 + 1];
/* L20: */
	first_1.av2[i__ - 1] = ady[i__ * ady_dim1 + 2];
    }

    i__1 = *kp1;
    for (i__ = 1; i__ <= i__1; ++i__) {
	first_1.aw1[i__ - 1] = ad2y[i__ * ad2y_dim1 + 1];
/* L25: */
	first_1.aw2[i__ - 1] = ad2y[i__ * ad2y_dim1 + 2];
    }

/* --------SAVING COORDINATES AND VELOCITY AT THE END OF 1 INTERVAL */
    first_1.ya[0] = y[1];
    first_1.ya[1] = y[2];
    first_1.va[0] = dy[1];
    first_1.va[1] = dy[2];

/* --------SAVING BOUNDARIES OF 1 INTERVAL */
    first_1.ina[0] = *xi;
    first_1.ina[1] = *xe;
    return 0;

/* --------SAVING CHEBYSHEV COEFFICIENTS FOR  COORDINATES, */
/* --------     VELOCITY COMPONENTS AND ACCELERATION COMPONENTS */
/* ------------           AT THE SECOND INTERVAL */
L30:
    i__1 = *kp3;
    for (i__ = 1; i__ <= i__1; ++i__) {
	second_1.by1[i__ - 1] = ay[i__ * ay_dim1 + 1];
/* L35: */
	second_1.by2[i__ - 1] = ay[i__ * ay_dim1 + 2];
    }

    i__1 = *kp2;
    for (i__ = 1; i__ <= i__1; ++i__) {
	second_1.bv1[i__ - 1] = ady[i__ * ady_dim1 + 1];
/* L40: */
	second_1.bv2[i__ - 1] = ady[i__ * ady_dim1 + 2];
    }

    i__1 = *kp1;
    for (i__ = 1; i__ <= i__1; ++i__) {
	second_1.bw1[i__ - 1] = ad2y[i__ * ad2y_dim1 + 1];
/* L45: */
	second_1.bw2[i__ - 1] = ad2y[i__ * ad2y_dim1 + 2];
    }

/* --------SAVING COORDINATES AND VELOCITY AT THE END OF 2 INTERVAL */
    second_1.yb[0] = y[1];
    second_1.yb[1] = y[2];
    second_1.vb[0] = dy[1];
    second_1.vb[1] = dy[2];

/* --------SAVING BOUNDARIES OF 2 INTERVAL */
    second_1.inb[0] = *xi;
    second_1.inb[1] = *xe;
    return 0;
} /* f2trea_c */
 
Результаты:
---------------------------------------------------------
 h0=5.00000000000000e-001 k0= 11 iniapr= 1 imax= 13 

 y= 3.87758256189037e+000 2.47942553860420e+000
 yt= 3.87758256189037e+000 2.47942553860420e+000
 dely=   4.44089209850063e-016 0.00000000000000e+000

 dy= -4.79425538604203e-001 8.77582561890373e-001
 dyt= -4.79425538604203e-001 8.77582561890373e-001
 deldy= -5.55111512312578e-017 0.00000000000000e+000 

 ***********************************************************
 CHEBYSHEV COEFFICIENTS  AT 1 SEGMENT
 INA= 0.00000000000000e+000 5.00000000000000e-001

 COORDINATES AND VELOCITY AT THE END OF 1 SEGMENT
 YA= 4.00000000000000e+000 2.00000000000000e+000
 VA= -2.77555756156289e-017 1.00000000000000e+000

              Coefficients for 1 component 
 -------------------------------------------------------
         coordinate            velocity               acceleration
 
 0  7.90766440054603e+000  4.87106693080399e-001 -1.90766440054603e+000
 1  6.13690356801086e-002 -2.40340620085586e-001 -6.13690356801087e-002
 2 -1.50605601386582e-002 -3.84559236046994e-003  1.50605601386584e-002
 3 -1.60442087410517e-004  6.28342132945850e-004  1.60442087410362e-004
 4  1.96510520421456e-005  5.01773738245519e-006 -1.96510520420525e-005
 5  1.25508828077726e-007 -4.91532402808361e-007 -1.25508828203872e-007
 6 -1.02440704938832e-008 -2.61574065386791e-009  1.02440702819581e-008
 7 -4.67226936874155e-011  1.82980898031941e-010  4.67231817878567e-011
 8  2.85969736162728e-012  7.30192627363518e-013 -2.86000783060632e-012
 9  1.01431297105263e-014 -3.97331122042255e-014 -9.14636340840561e-015
10 -4.96774165066728e-016 -1.12711794379109e-016  7.76248097918153e-016
11 -1.26549625974403e-018  8.82100111270628e-018 -1.29419858076879e-016
12  9.18854282573571e-020 -1.34812352163416e-018 
13 -1.29627261695592e-020 

                       Coefficients for 2 component 
 -------------------------------------------------------
           coordinate            velocity               acceleration
 
 0  3.51289330691960e+000  1.90766440054603e+000  4.87106693080399e-001 
 1  2.40340620085586e-001  6.13690356801086e-002 -2.40340620085586e-001 
 2  3.84559236046995e-003 -1.50605601386582e-002 -3.84559236046998e-003 
 3 -6.28342132945849e-004 -1.60442087410516e-004  6.28342132945896e-004 
 4 -5.01773738245590e-006  1.96510520421462e-005  5.01773738240898e-006 
 5  4.91532402815885e-007  1.25508828072645e-007 -4.91532402781644e-007 
 6  2.61574064097434e-009 -1.02440704892279e-008 -2.61574049683619e-009 
 7 -1.82980896223137e-010 -4.67226941228554e-011  1.82980701293414e-010 
 8 -7.30200654213996e-013  2.85969926783270e-012  7.30374043715490e-013 
 9  3.97249934984229e-014  1.01477468403585e-014 -4.00518478788341e-014 
10  1.26884296980380e-016 -5.00264053747142e-016 -2.63728790325310e-016 
11 -5.68118200528679e-018 -2.99691807187852e-018 -3.07235790628080e-017 
12 -3.12178965820679e-020 -3.20037281904250e-019 
13 -3.07728155677163e-021 
 
 CHEBYSHEV COEFFICIENTS  AT 2 SEGMENT
 INB= 5.00000000000000e-001 1.00000000000000e+000

 COORDINATES AND VELOCITY AT THE END OF 2 SEGMENT
 YB= 3.87758256189037e+000 2.47942553860420e+000
 VB= -4.79425538604203e-001 8.77582561890373e-001

                       Coefficients for 1 component 
 -------------------------------------------------------
           coordinate            velocity               acceleration
 
 0  7.90766440054603e+000 -4.87106693080399e-001 -1.90766440054603e+000 
 1 -6.13690356801086e-002 -2.40340620085586e-001  6.13690356801084e-002 
 2 -1.50605601386582e-002  3.84559236046995e-003  1.50605601386584e-002 
 3  1.60442087410517e-004  6.28342132945852e-004 -1.60442087410723e-004 
 4  1.96510520421456e-005 -5.01773738245881e-006 -1.96510520420564e-005 
 5 -1.25508828077188e-007 -4.91532402807637e-007  1.25508827958605e-007 
 6 -1.02440704938717e-008  2.61574062872712e-009  1.02440702490797e-008 
 7  4.67226935320833e-011  1.82980898204252e-010 -4.67222202970414e-011 
 8  2.85969737688836e-012 -7.30209069543573e-013 -2.86005035843653e-012 
 9 -1.01437402154053e-014 -3.97339166031811e-014  1.11601537473166e-014 
10 -4.96786405976199e-016  1.40225965604771e-016  7.91636992503869e-016 
11  1.60033335690377e-018  8.99587491481669e-018 -5.79235010650381e-017 
12  9.37070303626739e-020 -6.03369802760813e-019 
13 -5.80163271885397e-021 

                       Coefficients for 2 component 
 -------------------------------------------------------
           coordinate            velocity               acceleration
 
 0  4.48710669308040e+000  1.90766440054603e+000 -4.87106693080399e-001 
 1  2.40340620085586e-001 -6.13690356801087e-002 -2.40340620085586e-001 
 2 -3.84559236046995e-003 -1.50605601386582e-002  3.84559236046997e-003 
 3 -6.28342132945849e-004  1.60442087410518e-004  6.28342132945798e-004 
 4  5.01773738245614e-006  1.96510520421447e-005 -5.01773738246805e-006 
 5  4.91532402816009e-007 -1.25508828078350e-007 -4.91532402831643e-007 
 6 -2.61574064109370e-009 -1.02440704956549e-008  2.61574066593524e-009 
 7 -1.82980896269471e-010  4.67226941480699e-011  1.82980959791371e-010 
 8  7.30200593334941e-013  2.85969543545860e-012 -7.30206356676577e-013 
 9  3.97248463941156e-014 -1.01438253662950e-014 -3.95480779796562e-014 
10 -1.26818991751509e-016 -4.93504917727713e-016  1.49069696662479e-016 
11 -5.59999852514457e-018  1.69397382570999e-018 -6.76845614391188e-017 
12  1.76455606844790e-020  1.76455606844790e-020 
13 -6.77930302875790e-021 

 ******************************************************

3) Решается задача Коши из примера 1 также с разбиением интервала интегрирования [0, 1] на два элементарных сегмента длиной h = 0,5. Система уравнений в примере 1 описывает в трехмерном пространстве переменных x, y1, y2 движение точки по цилиндрической поверхности. Ось кругового цилиндра параллельна оси x и проходит через точку (0, 3, 2). Фазовая траектория этой системы на плоскости y1, y2 -- окружность с центром в точке (3, 2) радиуса 1. При изменении x точка (y1(x), y2(x)) совершает движение по дуге окружности. В примере 3 функция обработки результатов выполняет следующие действия.
а) По вычисленным функцией de89d_c коэффициентам Чебышёва ay1, ay2 находится решение системы y1(x), y2(x) для нескольких равноотстоящих значений аргумента x, принадлежащих элементарному сегменту [xi, XE] (число этих значений задается переменной ni).
б) Определяется расстояние от точки (y1(x), y2(x)) до точки (3, 2); все расстояния запоминаются в массиве r.
в) Вычисляется возможное отклонение этого расстояния от постоянного значения (равного 1). Это отклонение может быть следствием приближенного интегрирования системы уравнений из-за замены точного решения задачи частичной суммой ряда с приближенными коэффициентами. Все отклонения запоминаются в массиве deltr.
Массивы r и deltr помещаются во внешнюю структуру deltr_ вместе с переменной ni, представляющей число точек x, взятых на элементарном сегменте. Поскольку внешняя структура deltr_ описан в функции обработки результатов f2trea_c и в головной (вызывающей) функции, то на выходе из подпрограммы de89d_c вычисленные в функции f2trea_c массивы r и deltr будут доступны также и в главной функции. Приводятся фрагмент вызывающей функции, функция f_c вычисления значений правой части системы, функция f2trea_c обработки результатов. Далее представлены значения параметров h, k, iniapr, imax, приближенное решение y и производная dy, вычисленные в конце интервала xk = xf, точные решение yt и производная dyt (в точке xf) и абсолютные погрешности приближенных значений y и dy. Затем даются расстояния от точек (y1(x), y2(x)) до точки (3, 2) на фазовой плоскости и отклонения этих расстояний от постоянного значения, равного 1, для каждого элементарного сегмента. Эти данные приводятся для двух значений параметра iniapr (1 и 2).

 
/* Common Block Declarations */
struct {
    double r__[32]  /* was [16][2] */, deltr[32]  /* was [16][2] */;
    int ni;
} deltr_;
/*..........................................................................*/
int main(void)
{
    /* System generated locals */
    int i__1;

    /* Builtin functions */
    double cos(double), sin(double);

    /* Local variables */
    extern int f_c();
    static double h__;
    static int j, m;
    static double q;
    static int s;
    static double y[2], h0;
    static int k0;
    static double x1, dy[2], xk, xn, yn[2], yt[2], rab[535], dyn[2], dyt[2];
    extern int de89d_c( );
    static double dely[2];
    static int imax;
    static double deldy[2];
    static int iniap0;
    extern int f2trea_c();
    static int iniapr;

    deltr_1.ni = 16;
    m = 2;
    q = .5;
    xn = 0.f;
    yn[0] = cos(q) + 3.;
    yn[1] = -sin(q) + 2.;
    dyn[0] = q * 2. * sin(q);
    dyn[1] = q * 2. * cos(q);
    xk = 1.;
    h0 = .5;
    x1 = xk * 2. - 1.;
    yt[0] = cos(q * x1) + 3.;
    yt[1] = sin(q * x1) + 2.;
    dyt[0] = q * -2. * sin(q * x1);
    dyt[1] = q * 2. * cos(q * x1);
    k0 = 11;
    imax = 13;

    for (iniap0 = 1; iniap0 <= 2; ++iniap0) {
	iniapr = iniap0;
	h__ = h0;

	de89d_c((U_fp)f_c, (U_fp)f2trea_c, &m, &xn, yn, dyn, &xk, &k0, &iniapr,
                &imax, &h__, y, dy, rab);

	dely[0] = yt[0] - y[0];
	dely[1] = yt[1] - y[1];
	deldy[0] = dyt[0] - dy[0];
	deldy[1] = dyt[1] - dy[1];

    /*  Операторы вывода на печать: nx, xs, h0, k, iniapr, imax, iordy, y, yt, dely, dy, dyt, deldy,deltr  */
    . . . . . . . . . . . . . . . . . . . . . . . . . . 
    return 0;
} /* main */
/*..........................................................................*/
 int f_c(double *x, double *y, double *dy,
	double *z__, int *m)
{
    /* System generated locals */
    double d__1;
    /* Builtin functions */
    double exp(double);
    /* Local variables */
    static real q;
    /* Parameter adjustments */
    --z__;
    --dy;
    --y;

    /* Function Body */
    q = .5f;
/* Computing 2nd power */
    d__1 = (1. - exp(3. - y[1] + dy[2] * .5 / q)) / (*x + 1.);
    z__[1] = q * -2. * dy[2] - d__1 * d__1;
/* Computing 2nd power */
    d__1 = dy[2] - q * 2. * (y[1] - 3.);
    z__[2] = q * 2. * dy[1] - d__1 * d__1;
    return 0;
} /* f_c */
/*..........................................................................*/
 int f2trea_c(int *s, double *xi, double *xe,
	double *y, double *dy, double *ay, double *ady,
	double *ad2y, int *m, int *kp1, int *kp2, int *kp3)
{
    /* System generated locals */
    int ay_dim1, ay_offset, ady_dim1, ady_offset, ad2y_dim1, ad2y_offset,
	    i__1;
    double d__1, d__2;

    /* Builtin functions */
    double sqrt(double);

    /* Local variables */
    static int j;
    static double x, bk[4]	/* was [2][2] */, hi, yi[2];
    extern  int de70dc_c( );

    /* Parameter adjustments */
    --dy;
    --y;
    ad2y_dim1 = *m;
    ad2y_offset = 1 + ad2y_dim1;
    ad2y -= ad2y_offset;
    ady_dim1 = *m;
    ady_offset = 1 + ady_dim1;
    ady -= ady_offset;
    ay_dim1 = *m;
    ay_offset = 1 + ay_dim1;
    ay -= ay_offset;

    /* Function Body */
    hi = (*xe - *xi) / (double) deltr_1.ni;
    x = *xi;
    i__1 = deltr_1.ni;
    for (j = 1; j <= i__1; ++j) {
	x += hi;

/* ------CALCULATION OF SOLUTION YI AT POINT X (BY ALGORITHM CLENSHAW, */
/* -------    KP2 - POWER (DEGREE) OF POLYNOMIAL ) */

	de70dc_c(m, kp2, &x, &ay[ay_offset], yi, bk);

/* Computing 2nd power */
	d__1 = yi[0] - 3.;
/* Computing 2nd power */
	d__2 = yi[1] - 2.;
	deltr_1.r__[j + (*s << 4) - 17] = sqrt(d__1 * d__1 + d__2 * d__2);
	deltr_1.deltr[j + (*s << 4) - 17] = 1. - deltr_1.r__[j + (*s << 4) -
		17];
/* L10: */
    }
    return 0;
} /* f2trea_c */

 
Результаты:
---------------------------------------------------------
 h0=5.00000000000000e-001 k0= 11 iniapr= 1 imax= 13 

 y= 3.87758256189037e+000 2.47942553860420e+000
 yt= 3.87758256189037e+000 2.47942553860420e+000
 dely=   4.44089209850063e-016 0.00000000000000e+000

 dy= -4.79425538604203e-001 8.77582561890373e-001
 dyt= -4.79425538604203e-001 8.77582561890373e-001
 deldy=  -5.55111512312578e-017 0.00000000000000e+000 

 ***********************************************************

         Phase motion  for 1 segment 
 -------------------------------------------------------
point         distance                 error 

 1    1.00000000000000e+000    0.00000000000000e+000 
 2    1.00000000000000e+000    0.00000000000000e+000 
 3    1.00000000000000e+000   -2.22044604925031e-016 
 4    1.00000000000000e+000   -2.22044604925031e-016 
 5    1.00000000000000e+000   -4.44089209850063e-016 
 6    1.00000000000000e+000    0.00000000000000e+000 
 7    1.00000000000000e+000   -4.44089209850063e-016 
 8    1.00000000000000e+000    0.00000000000000e+000 
 9    1.00000000000000e+000    0.00000000000000e+000 
10    1.00000000000000e+000   -2.22044604925031e-016 
11    1.00000000000000e+000   -4.44089209850063e-016 
12    1.00000000000000e+000   -4.44089209850063e-016 
13    1.00000000000000e+000   -2.22044604925031e-016 
14    1.00000000000000e+000    0.00000000000000e+000 
15    1.00000000000000e+000   -4.44089209850063e-016 
16    1.00000000000000e+000    0.00000000000000e+000 

         Phase motion  for 2 segment 
 -------------------------------------------------------
point         distance                 error 

 1    1.00000000000000e+000    2.22044604925031e-016 
 2    1.00000000000000e+000    0.00000000000000e+000 
 3    1.00000000000000e+000    2.22044604925031e-016 
 4    1.00000000000000e+000    2.22044604925031e-016 
 5    1.00000000000000e+000    0.00000000000000e+000 
 6    1.00000000000000e+000    2.22044604925031e-016 
 7    1.00000000000000e+000    0.00000000000000e+000 
 8    1.00000000000000e+000    3.33066907387547e-016 
 9    1.00000000000000e+000    2.22044604925031e-016 
10    1.00000000000000e+000    2.22044604925031e-016 
11    1.00000000000000e+000    2.22044604925031e-016 
12    1.00000000000000e+000    0.00000000000000e+000 
13    1.00000000000000e+000    2.22044604925031e-016 
14    1.00000000000000e+000    2.22044604925031e-016 
15    1.00000000000000e+000    0.00000000000000e+000 
16    1.00000000000000e+000    3.33066907387547e-016 

 ***********************************************************

 h0=5.00000000000000e-001 k0= 11 iniapr= 2 imax= 13 

 y= 3.87758256189037e+000 2.47942553860420e+000
 yt= 3.87758256189037e+000 2.47942553860420e+000
 dely=   4.44089209850063e-016 0.00000000000000e+000

 dy= -4.79425538604203e-001 8.77582561890373e-001
 dyt= -4.79425538604203e-001 8.77582561890373e-001
 deldy=  -5.55111512312578e-017 0.00000000000000e+000 

 ***********************************************************

         Phase motion  for 1 segment 
 -------------------------------------------------------
point         distance                 error 

 1    1.00000000000000e+000    0.00000000000000e+000 
 2    1.00000000000000e+000    0.00000000000000e+000 
 3    1.00000000000000e+000   -2.22044604925031e-016 
 4    1.00000000000000e+000   -2.22044604925031e-016 
 5    1.00000000000000e+000   -4.44089209850063e-016 
 6    1.00000000000000e+000    0.00000000000000e+000 
 7    1.00000000000000e+000   -4.44089209850063e-016 
 8    1.00000000000000e+000    0.00000000000000e+000 
 9    1.00000000000000e+000    0.00000000000000e+000 
10    1.00000000000000e+000   -2.22044604925031e-016 
11    1.00000000000000e+000   -4.44089209850063e-016 
12    1.00000000000000e+000   -4.44089209850063e-016 
13    1.00000000000000e+000   -2.22044604925031e-016 
14    1.00000000000000e+000    0.00000000000000e+000 
15    1.00000000000000e+000   -4.44089209850063e-016 
16    1.00000000000000e+000    0.00000000000000e+000 

         Phase motion  for 2 segment 
 -------------------------------------------------------
point         distance                 error 

 1    1.00000000000000e+000    2.22044604925031e-016 
 2    1.00000000000000e+000    0.00000000000000e+000 
 3    1.00000000000000e+000    2.22044604925031e-016 
 4    1.00000000000000e+000    2.22044604925031e-016 
 5    1.00000000000000e+000    0.00000000000000e+000 
 6    1.00000000000000e+000    2.22044604925031e-016 
 7    1.00000000000000e+000    0.00000000000000e+000 
 8    1.00000000000000e+000    3.33066907387547e-016 
 9    1.00000000000000e+000    2.22044604925031e-016 
10    1.00000000000000e+000    2.22044604925031e-016 
11    1.00000000000000e+000    2.22044604925031e-016 
12    1.00000000000000e+000    0.00000000000000e+000 
13    1.00000000000000e+000    2.22044604925031e-016 
14    1.00000000000000e+000    2.22044604925031e-016 
15    1.00000000000000e+000    0.00000000000000e+000 
16    1.00000000000000e+000    3.33066907387547e-016 

 ***********************************************************