Текст подпрограммы и версий (Си) de44d_c.zip |
Тексты тестовых примеров (Си) tde44d1_c.zip , tde44d2_c.zip , tde44d3_c.zip , tde44d4_c.zip |
Выполнение одного шага приближенного интегрирования системы обыкновенных дифференциальных уравнений первого порядка методом рядов Чебышёва.
Решается задача Коши для системы M обыкновенных дифференциальных уравнений первого порядка
(1) Y ' = F (x, Y) , Y = ( y1, ... , yM ) , F = ( f1 (x, y1, ... , yM), ... , fM (x, y1, ... , yM) ) , XN ≤ x ≤ XKс начальными условиями, заданными в точке XN :
(2) Y(XN) = YN , YN = ( y10, ... , yM0 ) ,
при условии, что правая часть системы (1) имеет непрерывные ограниченные частные производные по переменным x, Y. Предполагается, что на отрезке [XN, XK] задача (1), (2) имеет единственное решение. Тогда решение задачи Коши и его производная Y'(XN + αΔ) = F(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) Φ(α) = ∑ ' 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)) является быстросходящимся, то его сумма на [XN, XK] (и сумма ряда (4)) хорошо приближается частичной суммой некоторого порядка. Эта частичная сумма принимается в качестве приближенного аналитического решения задачи (1), (2) на промежутке [XN, XK]. В противном случае, т.е. при медленной сходимости ряда (3) на интервале [XN, XK], получение аналитического решения в виде одной частичной суммы на всем отрезке интегрирования [XN, XK] может быть затруднительным. Поэтому целесообразно использовать разбиение промежутка интегрирования [XN, XK] на такие элементарные сегменты некоторой длины H: [xs, xs+H], x0 = XN, s = 0, 1, ... , на каждом из которых ряды Чебышёва для решения Y(x) и его производной Y'(x) будут сходиться значительно быстрее. На каждом подобном сегменте решение исходной задачи Коши приближенно представляется в виде (K + 1) - й частичной суммы смещенного ряда Чебышёва
K+1 1 (5) Y (xs + αH) ≈ ∑ ' ai*[Y] Ti*(α) , 0 ≤ α ≤ 1 , ai*[Y] = 2/π ∫ Y(xs + αH) Ti* (α) / √ (α (1 - α) ) dα , i=0 0 а его производная - в виде частичной суммы K-го порядка K 1 (6) Y' (xs + αH) ≈ ∑ ' ai*[Y ' ] Ti*(α) , 0 ≤ α ≤ 1 , ai*[Y ' ] = 2/π ∫ Y ' (xs + αH) Ti* (α) / √ (α (1 - α) ) dα . i=0 0
В этом случае аналитическое решение задачи (1), (2) будет состоять из совокупности частичных сумм рядов Чебышёва, построенных на этих элементарных сегментах. Порядок частичных сумм и элементарные сегменты задаются пользователем при обращении к подпрограмме.
При обращении к подпрограмме de44d_c задаются начало элементарного сегмента и его длина. По заданному значению решения в начале X = xs элементарного сегмента [xs, xs + H] подпрограмма de44d_c вычисляет значение решения в конце элементарного сегмента, т.е. в узле X + H = xs + H. Одновременно вычисляются коэффициенты Чебышёва ai*[Y] (i = 0, 1, ... , K + 1) на элементарном сегменте [X, X + H] = [xs, xs + H] для решения задачи Коши Y(X + αH), 0 ≤ α ≤ 1, и коэффициенты Чебышёва ai*[Y'] (i = 0, 1, ... , K) его производной Y'(X + αH). Значение H может изменяться от сегмента к сегменту, в общем случае H = Hs.
При разбиении промежутка интегрирования на элементарные сегменты решение задачи на [XN, XK] сводится к определению нескольких наборов коэффициентов ai*[Y], i = 0, 1, ... , K + 1. Коэффициенты ai*[Y] ряда Чебышёва для решения на сегменте [X, X + H] = [xs, xs + H] выражаются через коэффициенты ai*[Φ] ряда Чебышёва его производной Φ(α) = F(xs + αH, Y(xs + αH)), 0 ≤ α ≤ 1, на [X, X + H] = [xs, xs + H], которые, в свою очередь, вычисляются приближенно итерационным способом, исходя из некоторого начального приближения. Вычисления выполняются с помощью квадратурной формулы Маркова на [X, X + H] с K + 1 узлом. При этом один из узлов квадратурной формулы совпадает с X, а остальные K узлов лежат внутри интервала (X, X + H). Количество итераций, которое предписывается выполнить в этом итерационном процессе, задается при обращении к подпрограмме и может меняться от сегмента к сегменту. Если при выбранном H ряды Чебышёва для решения Y(X + αH), 0 ≤ α ≤ 1 , и его производной Y'(X + αH) на элементарном сегменте [X, X + H] = [xs, xs + H] быстро сходятся, то для того, чтобы приближенное решение в конце такого сегмента имело максимальный порядок точности относительно H, необходимо выполнить не менее K итераций; при этом погрешность приближенного решения в конце элементарного сегмента является величиной порядка O(HK + 2) при H --> 0. Если H подобрано достаточно малым, то хорошая точность приближенного решения может быть получена и при меньшем числе итераций. Вообще, число итераций зависит от K и H. С увеличением H число итераций может также возрастать.
Начальное приближение коэффициентов ai*[Φ] ряда Чебышёва для производной на сегменте [X, X + H] = [xs, xs + H] может вычисляться двумя способами. В первом способе начальное приближение определяется только с использованием значения решения в точке X = xs. При этом погрешность начального приближения для всех коэффициентов a0*[Φ], a1*[Φ], ..., aK*[Φ] является величиной O(H2) при H --> 0. Во втором способе начальное приближение определяется через коэффициенты ряда Чебышёва производной решения Φ(α) на предыдущем элементарном сегменте [X - H', X] = [xs - 1, xs], где H' - длина предыдущего элементарного сегмента. В этом случае погрешности начального приближения для коэффициентов a0*[Φ], a1*[Φ], ... , aK*[Φ] имеют, соответственно, порядки O(H), O(H2), ..., O(HK + 1). Заметим, что длина H текущего элементарного сегмента [X, X + H] может быть больше или меньше длины H' предыдущего элементарного сегмента [X - H', X] или равна ей. Второй способ определения начального приближения в некоторых случаях может привести к более быстрой сходимости итерационного процесса и, тем самым, к меньшему числу выполняемых итераций. Второй способ может быть применен только начиная со второго элементарного сегмента [x0 + H0, x1 + H], H0 -длина начального (первого) элементарного сегмента, x1 = x0 + H0. На начальном элементарном сегменте [x0, x0 + H0] всегда применяется исключительно первый способ. Способ выбора начального приближения задается пользователем при обращении к подпрограмме и может меняться от сегмента к сегменту..
В дальнейшем при описании параметров подпрограммы коэффициенты ряда Чебышёва будем называть коэффициентами Чебышёва.
О.Б.Арушанян, С.Ф.Залеткин. Приближенное решение задачи Коши для обыкновенных дифференциальных уравнений методом рядов Чебышёва. Вычислительные методы и программирование: Новые вычислительные технологии (Электронный научный журнал) (17), 121 - 131, 2016.
О.Б.Арушанян, С.Ф.Залеткин. Использование рядов Чебышёва для приближенного аналитического решения обыкновенных дифференциальных уравнений. Вестник Московского университета. Серия 1: Математика. Механика. 5, 52 - 56, 2016.
О.Б.Арушанян, Н.И.Волченскова, С.Ф.Залеткин. Вычисление коэффициентов разложения решения задачи Коши в ряд по многочленам Чебышёва. Вестник Московского университета. Серия 1: Математика. Механика. 5, 24 - 30, 2012.
int de44d_c(S_fp f, int *m, int *k, int *iniapr, int *imax, int *jstart, double *yx, double *x, double *xj0, double *au, double *ajk, double *h, double *hd4i, double *rabc, double *alp, double *alpn, double *cmar, double *p, double *s, double *xp, double *yp, double *ajkp, double *u, double *zfi)
Параметры
f - |
имя функции вычисления значений правой
части дифференциального уравнения. Первый
оператор функции должен иметь вид: int f (x, y , dy, m). Здесь: x, y - значения независимой и зависимой переменных, соответственно. Вычисленное значение правой части должно быть помещено в dy. В случае системы уравнений, т.е. когда m ≠ 1 , параметры y и dy представляют массивы длины m (тип параметров x, y и dy: с двойной точностью); |
m - | количество уравнений в системе (тип: целый); |
k - | порядок частичной суммы смещенного ряда Чебышёва, с помощью которой аппроксимируется производная решения задачи Коши на элементарном сегменте [x, x + h] разбиения интервала интегрирования; при этом само решение задачи Коши приближается на элементарном сегменте [x, x + h] частичной суммой (k + 1) - го порядка; k ≥ 2. Если обращение к функции de44d_c осуществляется со значением параметра jstart = 1 (см. ниже), то значение параметра k должно совпадать с его значением при предыдущем обращении к функции. Если же при очередном обращении к функции de44d_c значение параметра k необходимо изменить, то это обращение должно выполняться при нулевом значении параметра jstart(jstart = 0) (см. "Математическое описание", "Замечания по использованию" и "Примеры"; тип: целый); |
iniapr - |
целый указатель способа выбора начального
приближения коэффициентов Чебышёва для производной
решения на элементарном сегменте [x, x + h]: |
iniapr=1 - |
для первого способа, когда начальное
приближение определяется только с
использованием значения решения в
начале x элементарного сегмента; |
iniapr=2 - | для второго способа, когда начальное приближение коэффициентов Чебышёва на текущем элементарном сегменте [x, x + h] (начиная со второго) определяется через коэффициенты Чебышёва, вычисленные на предыдущем элементарном сегменте, т.е. путем экстраполяции коэффициентов с предыдущего сегмента на следующий (см. "Математическое описание"). |
Значение этого параметра может меняться от сегмента к сегменту. | |
imax - | целая переменная, задающая количество итераций, которое предполагается выполнить в итерационном процессе вычисления коэффициентов Чебышёва для производной решения задачи Коши на элементарном сегменте [x, x + h], исходя из некоторого начального приближения, способ определения которого задается параметром iniapr; imax ≥ 1. Для получения максимального порядка точности приближенного решения необходимо выполнить не менее k итераций. Значение imax может изменяться от сегмента к сегменту (см. "Математическое описание", "Замечания по использованию" и "Примеры"); |
jstart - |
целый указатель режима использования функции, имеющий следующие значения: |
0 - |
первое обращение к функции должно быть исполнено с нулевым значением jstart;
выполнить первый (начальный) шаг интегрирования для значений независимой и зависимой переменных и
шага интегрирования (длины элементарного сегмента), заданных параметрами x, yx, h,
соответственно. При данном значении параметра jstart будет применен исключительно первый способ определения
начального приближения для коэффициентов Чебышёва производной решения независимо от значения параметра iniapr.
Нулевое значение параметра jstart также может означать, что необходимо выполнить очередной шаг
интегрирования с измененным значением параметра k; |
1 - | выполнить следующий (очередной) шаг интегрирования системы дифференциальных уравнений для значений независимой и зависимой переменных и шага интегрирования (длины элементарного сегмента), заданных параметрами x, yx, h, соответственно. При данном значении параметра jstart способ определения начального приближения для коэффициентов Чебышёва производной решения определяется параметром iniapr. При обращении к функции de44d_c со значением jstart = 1 значение параметра k (см. выше) должно совпадать с его значением при предыдущем обращении к функции. |
На выходе из функции параметр jstart всегда принимает значение, равное 1 (см. "Примеры"); | |
x, yx - | начальное значение аргумента и решения (начало элементарного сегмента x и решение в нем yx); в результате работы функции в x получается новое значение аргумента, равное x + h (конец элементарного сегмента), а в yx - соответствующее значение решения. В случае системы уравнений, т.е. когда m ≠ 1, yx задается одномерным массивом длины m (тип параметров x, yx: с двойной точностью); |
xj0 - | одномерный рабочий массив длины k (тип: с удвоенной точностью); |
au - | двумерный массив размера m * (k + 2). На выходе из функции содержит коэффициенты Чебышёва ai*[y] для решения y(x + αh), 0 ≤ α ≤ 1, на элементарном сегменте [x, x + h]. При этом переменная с индексом au(n, i + 1) представляет i-й коэффициент Чебышёва n-й компоненты решения yn(x) (i = 0, 1, ... , k + 1) (тип: с удвоенной точностью); |
ajk - | двумерный массив размера m * (k + 1). На выходе из функции содержит коэффициенты Чебышёва ai*[y'] производной решения y'(x + αh), 0 ≤ α ≤ 1, на элементарном сегменте [x, x + h]. При этом переменная с индексом ajk(n, i + 1) представляет i-й коэффициент Чебышёва n-й компоненты производной решения y'n(x) (i = 0, 1, ... , k). Если при jstart = 1 (т.е. при повторных обращениях к функции) параметр iniapr = 2, то содержащиеся в массиве ajk при входе в функцию коэффициенты Чебышёва производной решения, вычисленные на предыдущем элементарном сегменте [x - h', x] во время предыдущего обращения к функции de44d_c, используются в функции при вычислении коэффициентов Чебышёва производной решения на текущем элементарном сегменте [x, x + h]. Заметим, что длина h текущего элементарного сегмента может быть больше или меньше длины h' предыдущего сегмента [x - h', x] или равна ей. Независимо от значения параметра iniapr при повторных обращениях к функции значения массива ajk при входе в функцию обязательно запоминаются в массиве ajkp и могут быть снова доступны на выходе из функции (тип: с удвоенной точностью); |
h - | длина текущего элементарного сегмента [x, x + h]. Значение h может быть переменной величиной и изменяться от сегмента к сегменту (тип: с двойной точностью); |
hd4i - | одномерный рабочий массив длины k + 1 (тип: с двойной точностью); |
rabc, - alp, alpn | одномерные рабочие массивы длины k (тип: с двойной точностью); |
cmar - | двумерный рабочий массив размера k * k (тип: с двойной точностью); |
p - | одномерный рабочий массив размера (k + 2) * (k - 1) / 2 (тип: с двойной точностью); |
s - | одномерный рабочий массив размера (k + 3) * k / 2 (тип: с двойной точностью); |
xp, yp - | переменная и одномерный массив длины m, соответственно. На выходе из функции содержат начальные значения аргумента и решения, т.е. те значения, которые имели параметры x, yx на входе в функцию. Таким образом, на выходе из функции de44d_c границы элементарного сегмента, к которому относятся вычисленные функцией коэффициенты Чебышёва решения и коэффициенты Чебышёва его производной и содержащиеся в массивах au и ajk соответственно, показываются параметрами xp и x, а именно: параметр xp содержит начало сегмента, а параметр x содержит конец этого сегмента (тип: с двойной точностью); |
ajkp - | двумерный массив размера m * (k + 1). Если обращение к функции было выполнено со значением jstart = 1 (т.е. при повторных обращениях к функции), то на выходе из функции содержит коэффициенты Чебышёва производной решения, относящиеся к предыдущему элементарному сегменту [x - h', x]; тем самым значение этого параметра определено только при повторных обращениях к функции (тип: с двойной точностью); |
u - | двумерный рабочий массив размера m * k (тип: с двойной точностью); |
zfi - | двумерный рабочий массив размера m * (k + 3) (тип: с двойной точностью). |
Версии: нет
Вызываемые подпрограммы: нет
de44d_c использует рабочие функции de70dk_c, de70dh_c, de70d0_c, de70di_c, de70df_c, de70dq_c, de71de_c, de70dp_c, de71dt_c, de71dp_c, de71di_c, de71df_c, de71ds_c, de70da_c, de70dc_c. |
Замечания по использованию
Разбиение промежутка интегрирования на элементарные сегменты (шаги) выполняется для того, чтобы на каждом таком сегменте ряды Чебышёва для решения и его производной были быстросходящимися рядами. Другими словами, длина элементарных сегментов, задаваемая параметром h, подбирается таким образом, чтобы убывание коэффициентов этих рядов Чебышёва на элементарном сегменте [x, x + h] происходило достаточно быстро, вследствие чего можно было бы считать частичные суммы этих рядов близкими к многочленам наилучшего равномерного приближения на элементарном сегменте [x, x + h] для решения и его производной. Порядок этих частичных сумм задается параметром k. Если начальное приближение для коэффициентов Чебышёва функции Φ(α) определяется первым способом (т.е. при iniapr = 1), то для получения максимального порядка точности приближенного решения в конце элементарного сегмента [x, x + h] необходимо выполнить в итерационном процессе не менее k итераций; тогда imax≥k. Если начальное приближение коэффициентов Чебышёва функции Φ(α) определяется вторым способом (т.е. при iniapr = 2), то для получения максимального порядка точности приближенного решения необходимо выполнить в итерационном процессе не менее k + 1 итераций; в этом случае imax ≥ k + 1. Однако в некоторых случаях при втором способе определения начального приближения итерационный процесс может сойтись за значительно меньшее число итераций. Если длина h элементарного сегмента [x, x + h] подобрана достаточно малой, то хорошая точность приближенного решения может быть получена и с существенно меньшим числом итераций при любом способе выбора начального приближения. Вообще, число итераций зависит от k и h. С увеличением h число итераций может также возрастать. Если правая часть дифференциального уравнения не зависит от переменной y, т.е. дифференциальное уравнение имеет вид Y'= F(X), то число итераций можно положить равным 1 при любых h и k, удовлетворяющих описанным выше условиям. В этом случае параметр imax = 1. Как следует из вышеописанного, управлять точностью приближенного решения задачи Коши можно с помощью четырех параметров h, k, imax, iniapr, подбирая для любой конкретной задачи и для каждого элементарного сегмента наиболее подходящий набор их значений. При работе функции значения параметров m, k, iniapr, imax, h сохраняются. При многократном использовании функции de44d_c для вычисления коэффициентов Чебышёва решения задачи Коши (1), (2) и его производной на последовательности элементарных сегментов, образующей промежуток интегрирования [xn, xk] системы дифференциальных уравнений, значения параметров m, k, yx, x, au, ajk, hd4i, rabc, alp, alpn, cmar, p, s не должны изменяться в вызывающей функции между последовательными обращениями к функции. При интегрировании системы уравнений с помощью функции de44d_c используется внешняя структура com70d_, элементы которой нельзя портить: struct { double wc1, wc2, wc3; double hd2, hd4, hold; int lasn; }com70d_; Если вызывающая (главная) функция содержит хотя бы одно обращение к функции de44d_c со значением параметра jstart = 1 (и, следовательно, число обращений к de44d_c более одного), то данная внешняя структура должна быть описана в вызывающей (главной) функции. Глобальные (общие) переменные, составляющие содержание внешней структуры, описываются как переменные с двойной точностью, а переменная lasn - как целая переменная (явно или неявно): Если вызывающая функция содержит одно обращение к функции de44d_c со значением параметра jstart = 0 и при этом других обращений к de44d_c нет (как в первом примере), или если вызывающая функция содержит несколько обращений к de44d_c и при этом все обращения осуществляются с нулевым значением параметра jstart (как в четвертом примере), то указанную внешнюю структуру описывать в вызывающей функции вовсе не обязательно (см. "Примеры использования"). |
Использование функции de44d_c иллюстрируется на четырех примерах. Во всех примерах решаются задачи Коши для одной и той же системы обыкновенных дифференциальных уравнений.
(7) y'1 = -2q (y2-1) + (1 -e1-y1+cos q(2x-1) ) / (x+1), y'2 = 2q (y1-1) + ( 1 -e1-y2+sin q(2x-1) ) / (x+1), q = 0,5.
Частное решение системы (7) имеет вид
y1(x) = 1 + cos q(2x - 1), y2(x) = 1 + sin q(2x - 1).
Функции y1(x), y2(x) разлагаются на отрезке [0, 1] в смещенные ряды Чебышёва, коэффициенты которых выражаются через цилиндрические функции:
∞ (8) y1(x) = 1 + J0 (q) + 2 ∑ (-1)i J2i (q) T2i* (x), i=1 ∞ (9) y2(x) = 1 + 2 ∑ (-1)i J2i+1 (q) T2i+1* (x). i=0
Задачи Коши отличаются начальными условиями. Вычисления во всех четырех примерах на Си проводились с 15-16 значащими цифрами.
1) Начальное условие задачи Коши для системы (7)
xn = 0, y1(0) = 1 + cos q, y2(0) = 1 - sin q.
Рассматривается один элементарный сегмент [0, 1]. Выполняется одно обращение к функции de44d_c из начальной точки x = 0 с шагом h = 1. Вычисляются решение yx в конце данного сегмента, т.е. при x = 1, коэффициенты Чебышёва au решения на данном сегменте и коэффициенты Чебышёва ajk его производной. Приводятся функция вычисления правой части системы (7), фрагмент вызывающей функции, результаты счета, включая точное значение решения yt в тoчke x = 1, абсолютную погрешность dely приближенного решения yx, вычисленного в точке x = 1. Кроме вышеперечисленного приводятся: значения параметров xp, x на выходе из функции, которые представляют элементарный сегмент [0, 1]; значения параметров h, k, iniapr, imax, при которых были вычислены приближенное решение yx и коэффициенты Чебышёва. Даются также точные значения коэффициентов Чебышёва на данном сегменте для компонент решения y1(x), y2(x) в (8), (9) и абсолютные погрешности их приближенных значений, вычисленных функцией de44d_c.
/* Table of constant values */ static int k = 11; /*......................................................................*/ int main(void) { /* System generated locals */ int i__1, i__2, i__3; /* Builtin functions */ double cos(double), sin(double); /* Local variables */ extern int f_c(); static double h__; static int j, l, m; static double p[65], q, s[77], u[22] /* was [2][11] */, x, au[26] /* was [2][13] */, xk; static int nx; static double xp, yp[2], yt[2], yx[2]; static int kp1, kp2; static double xj0[11], ajk[24] /* was [2][12] */, alp[11], zfi[28] /* was [2][14] */, hd4i[12]; extern int de44d_c( ); static double rabc[11], cmar[121] /* was [11][11] */, ajkp[24] /* was [2][12] */, alpn[11], dely[2]; static int imax, iniapr, jstart; m = 2; q = .5; x = 0.f; yx[0] = cos(q) + 1.; yx[1] = -sin(q) + 1.; h__ = 1.; xk = x + h__; yt[0] = cos(q * (xk * 2. - 1.)) + 1.; yt[1] = sin(q * (xk * 2. - 1.)) + 1.; imax = 16; jstart = 0; iniapr = 1; de44d_c((U_fp)f_c, &m, &k, &iniapr, &imax, &jstart, yx, &x, xj0, au, ajk, &h__, hd4i, rabc, alp, alpn, cmar, p, s, &xp, yp, ajkp, u, zfi); dely[0] = yt[0] - yx[0]; dely[1] = yt[1] - yx[1]; /* Операторы вывода на печать: h__, k, iniapr, imax, y, yt, dely,au,ajk */ . . . . . . . . . . . . . . . . . . . . . . . . . . return 0; } /* main */ /*......................................................................*/ int f_c(double *x, double *y, double *z__, int *m) { /* Builtin functions */ double cos(double), exp(double), sin(double); /* Local variables */ static double q, r__; /* Parameter adjustments */ --z__; --y; /* Function Body */ q = .5; r__ = *x * 2. - 1.; z__[1] = q * -2. * (y[2] - 1.) + (1. - exp(1. - y[1] + cos(q * r__))) / (*x + 1.); z__[2] = q * 2. * (y[1] - 1.) + (1. - exp(1. - y[2] + sin(q * r__))) / (*x + 1.); return 0; } /* f_c */ Результаты: ---------------------------------------------------------------- xp = 0.00000000000000e+000 x = 1.00000000000000e+000 h__=1.00000000000000e+000 k= 11 iniapr= 1 imax= 16 jstart= 1 yx[0]= 1.87758256189037e+000 yx[1]= 1.47942553860420e+000 yt[0]= 1.87758256189037e+000 yt[1]= 1.47942553860420e+000 dely = 2.22044604925031e-016 0.00000000000000e+000 --------------------------------------------------- COEFFICIENTS AU AND AJK ON 1 SEGMENT --------------------------------------------------- Chebyshev coefficients for 1 component for Y for Y' 0 3.87693961448163e+000 -8.09184127039189e-016 1 -6.03383919976601e-017 -4.84536915349749e-001 2 -6.12080469173653e-002 -5.67830559048549e-016 3 -2.09171962881292e-017 5.12745998917409e-003 4 3.21472952728558e-004 -3.16824203590999e-016 5 -2.00321597959748e-017 -1.61072544828346e-005 6 -6.72136925722845e-007 8.38189923284965e-017 7 -2.58599158796738e-018 2.40317345136563e-008 8 7.51644633159019e-010 1.56226756791583e-016 9 7.64287239784747e-018 -2.08937474323345e-011 10 -5.22637730246682e-013 -1.18916649530926e-016 11 -2.70265112570286e-018 1.17617775328288e-014 12 2.45037031933934e-016 --------------------------------------------------- Chebyshev coefficients for 2 component for Y for Y' 0 2.00000000000000e+000 1.87693961448163e+000 1 4.84536915349748e-001 -2.27784100175626e-016 2 -6.03426271623964e-018 -6.12080469173658e-002 3 -5.12745998917450e-003 -1.79509998445709e-016 4 -9.05054704141220e-018 3.21472952728181e-004 5 1.61072544826871e-005 -3.47012457831142e-017 6 1.76993181215101e-017 -6.72136925560432e-007 7 -2.40317346609178e-008 -4.59484880699357e-016 8 1.65929519202381e-017 7.51644945266308e-010 9 2.08935515158725e-011 -9.90459342146977e-016 10 -2.09977773558447e-017 -5.22909305103198e-013 11 -1.18843023887090e-014 -1.50548247913190e-016 12 -3.13642183152480e-018 ************************************************************************************** Chebyshev coefficients for 1 component --------------------------------------------------------------------------- approximate exact absolute error --------------------------------------------------------------------------- 0 3.87693961448163e+000 3.87693961448163e+000 0.00000000000000e+000 1 -6.03383919976601e-017 0.00000000000000e+000 6.03383919976601e-017 2 -6.12080469173653e-002 -6.12080469173653e-002 4.85722573273506e-017 3 -2.09171962881292e-017 0.00000000000000e+000 2.09171962881292e-017 4 3.21472952728558e-004 3.21472952728575e-004 1.74014448683923e-017 5 -2.00321597959748e-017 0.00000000000000e+000 2.00321597959748e-017 6 -6.72136925722845e-007 -6.72136925723770e-007 -9.24854099283289e-019 7 -2.58599158796738e-018 0.00000000000000e+000 2.58599158796738e-018 8 7.51644633159019e-010 7.51644630959522e-010 -2.19949682342596e-018 9 7.64287239784747e-018 0.00000000000000e+000 -7.64287239784747e-018 10 -5.22637730246682e-013 -5.22635472164561e-013 2.25808212174288e-018 11 -2.70265112570286e-018 0.00000000000000e+000 2.70265112570286e-018 12 2.45037031933934e-016 2.47676511895987e-016 2.63947996205305e-018 --------------------------------------------------------------------------- Chebyshev coefficients for 2 component --------------------------------------------------------------------------- approximate exact absolute error ---------------------------------------------------------------------------- 0 2.00000000000000e+000 2.00000000000000e+000 0.00000000000000e+000 1 4.84536915349748e-001 4.84536915349748e-001 -1.11022302462516e-016 2 -6.03426271623964e-018 0.00000000000000e+000 6.03426271623964e-018 3 -5.12745998917450e-003 -5.12745998917449e-003 1.21430643318377e-017 4 -9.05054704141220e-018 0.00000000000000e+000 9.05054704141220e-018 5 1.61072544826871e-005 1.61072544827149e-005 2.78606077010884e-017 6 1.76993181215101e-017 0.00000000000000e+000 -1.76993181215101e-017 7 -2.40317346609178e-008 -2.40317346555260e-008 5.39173859491050e-018 8 1.65929519202381e-017 0.00000000000000e+000 -1.65929519202381e-017 9 2.08935515158725e-011 2.08935351786580e-011 -1.63372145614378e-017 10 -2.09977773558447e-017 0.00000000000000e+000 2.09977773558447e-017 11 -1.18843023887090e-014 -1.18837079244649e-014 5.94464244125570e-019 12 -3.13642183152480e-018 0.00000000000000e+000 3.13642183152480e-018 ---------------------------------------------------------------------------
2) Начальное условие задачи Коши для системы (7)
XN = - 0,5, y1(XN) = 1 + cos q (2 * XN - 1), y2(XN) = 1 + sin q (2 * XN - 1).
Рассматриваются два элементарных сегмента: [- 0,5, 0] и [0, 1]. Выполняются два обращения к функции de44d_c. Первое обращение осуществляется из начальной точки x = - 0,5 с шагом h = 0,5. Второе обращение осуществляется из точки x = 0 с шагом h = 1. Приводятся фрагмент вызывающей функции и результаты счета. В качестве выходных данных, полученных после каждого обращения к функции de44d_c, приводятся: значения параметров xp, x (которые последовательно представляют границы каждого из двух элементарных сегментов); значения параметров h, k, iniapr, imax, при которых было вычислено приближенное значение решения yx в конце каждого элементарного сегмента; приближенное значение решения yx в конце каждого элементарного сегмента; точное значение решения yt в конце каждого элементарного сегмента и абсолютная погрешность dely приближенного значения yx. После этого для каждого элементарного сегмента приводятся приближенные значения коэффициентов Чебышёва au для компонент решения y1(x), y2(x) и приближенные значения коэффициентов Чебышёва ajk их производных y'1(x), y'2(x). Даются также точные значения коэффициентов Чебышёва решения в (8), (9) и абсолютные погрешности приближенных значений au, вычисленных за два обращения к функции de44d_c.
/* Table of constant values */ static int k = 11; /*......................................................................*/ int main(void) { /* System generated locals */ int i__1, i__2, i__3; /* Builtin functions */ double cos(double), sin(double); /* Local variables */ extern int f_c(); static double h__; static int j, l, m; static double p[65], q, s[77], u[22] /* was [2][11] */, x, au[26] /* was [2][13] */, xk; static int nx; static double xp, yp[2], yt[2], yx[2]; static int kp1, kp2; static double xj0[11], ajk[24] /* was [2][12] */, alp[11], zfi[28] /* was [2][14] */, hd4i[12]; extern int de44d_c( ); static double rabc[11], cmar[121] /* was [11][11] */, ajkp[24] /* was [2][12] */, alpn[11], dely[2]; static int imax, iniapr, jstart; m = 2; q = .5; x = -.5; yx[0] = cos(q * (x * 2. - 1.)) + 1.; yx[1] = sin(q * (x * 2. - 1.)) + 1.; h__ = .5; xk = x + h__; yt[0] = cos(q * (xk * 2. - 1.)) + 1.; yt[1] = sin(q * (xk * 2. - 1.)) + 1.; imax = 14; jstart = 0; iniapr = 1; de44d_c((U_fp)f_c, &m, &k, &iniapr, &imax, &jstart, yx, &x, xj0, au, ajk, &h__, hd4i, rabc, alp, alpn, cmar, p, s, &xp, yp, ajkp, u, zfi); dely[0] = yt[0] - yx[0]; dely[1] = yt[1] - yx[1]; /* Операторы вывода на печать: h__, k, iniapr, imax, y, yt, dely,au,ajk */ . . . . . . . . . . . . . . . . . . . . . . . . . . return 0; } /* main */ /*......................................................................*/ int f_c(double *x, double *y, double *z__, int *m) { /* Builtin functions */ double cos(double), exp(double), sin(double); /* Local variables */ static double q, r__; /* Parameter adjustments */ --z__; --y; /* Function Body */ q = .5; r__ = *x * 2. - 1.; z__[1] = q * -2. * (y[2] - 1.) + (1. - exp(1. - y[1] + cos(q * r__))) / (*x + 1.); z__[2] = q * 2. * (y[1] - 1.) + (1. - exp(1. - y[2] + sin(q * r__))) / (*x + 1.); return 0; } /* f_c */ Результаты: ---------------------------------------------------------------- RESULTS AFTER THE FIRST CALL FUNCTION de44d_c xp = -5.00000000000000e-001 x = 0.00000000000000e+000 h__=5.00000000000000e-001 k= 11 iniapr= 1 imax= 14 jstart= 1 yx[0]= 1.87758256189037e+000 yx[1]= 5.20574461395797e-001 yt[0]= 1.87758256189037e+000 yt[1]= 5.20574461395797e-001 dely = 0.00000000000000e+000 -1.11022302462516e-016 -------------------------------------------------------- COEFFICIENTS AU AND AJK ON 1 SEGMENT --------------------------------------------------- Chebyshev coefficients for 1 component for Y for Y' 0 3.44060162317046e+000 1.34205937233529e+000 1 1.69081826785891e-001 -1.81496854116473e-001 2 -1.13732097613172e-002 -1.05952419518449e-002 3 -4.42044443620046e-004 4.74502064602726e-004 4 1.48397891478288e-005 1.38246950362394e-005 5 3.45797545836282e-007 -3.71188127795182e-007 6 -7.73596475344762e-009 -7.20679721191801e-009 7 -1.28728739710609e-010 1.38180370303550e-010 8 2.15954956206678e-012 2.01221187607313e-012 9 2.79563007777306e-014 -3.08016687242813e-014 10 -3.85319776980602e-016 -6.41779923475638e-016 11 -7.29295367585953e-018 2.39134341668834e-017 12 2.49098272571702e-019 --------------------------------------------------- Chebyshev coefficients for 2 component for Y for Y' 0 6.57940627664713e-001 1.44060162317046e+000 1 1.81496854116472e-001 1.69081826785892e-001 2 1.05952419518445e-002 -1.13732097613170e-002 3 -4.74502064602706e-004 -4.42044443619773e-004 4 -1.38246950364286e-005 1.48397891479079e-005 5 3.71188127814511e-007 3.45797545942260e-007 6 7.20679739536748e-009 -7.73596467249711e-009 7 -1.38180792550140e-010 -1.28729035379438e-010 8 -2.01181598552614e-012 2.15971031070896e-012 9 3.00043136005800e-014 2.71876942346035e-014 10 3.38255958277369e-016 -6.00268532796600e-016 11 -6.82123332723409e-018 1.27217572414018e-016 12 1.32518304597935e-018 -------------------------------------------------------- RESULTS AFTER THE SECOND CALL FUNCTION de44d_c xp = 0.00000000000000e+000 x = 1.00000000000000e+000 h__=1.00000000000000e+000 k= 11 iniapr= 1 imax= 16 jstart= 1 yx[0]= 1.87758256189037e+000 yx[1]= 1.47942553860420e+000 yt[0]= 1.87758256189037e+000 yt[1]= 1.47942553860420e+000 dely = 6.66133814775094e-016 -2.22044604925031e-016 -------------------------------------------------------- COEFFICIENTS AU AND AJK ON 2 SEGMENT --------------------------------------------------- Chebyshev coefficients for 1 component for Y for Y' 0 3.87693961448163e+000 -1.44092501602397e-015 1 -2.16010342208792e-016 -4.84536915349748e-001 2 -6.12080469173653e-002 -5.76883647188803e-016 3 -2.25262765435966e-017 5.12745998917409e-003 4 3.21472952728560e-004 -3.06568328665643e-016 5 -2.26872692724381e-017 -1.61072544828690e-005 6 -6.72136925722644e-007 1.47177056783118e-016 7 -1.72310702412875e-019 2.40317344744353e-008 8 7.51644630896276e-010 1.52001756450679e-016 9 8.04502481824943e-018 -2.08937142455836e-011 10 -5.22637126820411e-013 -1.37619137006301e-016 11 -3.12770765923411e-018 1.17708272328373e-014 12 2.45225567350777e-016 --------------------------------------------------- Chebyshev coefficients for 2 component for Y for Y' 0 2.00000000000000e+000 1.87693961448163e+000 1 4.84536915349748e-001 -3.57508890113517e-016 2 -1.68949191659343e-017 -6.12080469173658e-002 3 -5.12745998917451e-003 -2.22349536786043e-016 4 -1.02571454747760e-017 3.21472952728272e-004 5 1.61072544826895e-005 -5.82352091896277e-017 6 1.76990357771944e-017 -6.72136925517585e-007 7 -2.40317346581591e-008 -4.83012067842292e-016 8 1.44812987827331e-017 7.51644910869994e-010 9 2.08935512476454e-011 -9.46413628889753e-016 10 -2.02737335925317e-017 -5.22934045241522e-013 11 -1.18848646645800e-014 -1.35464285188486e-016 12 -2.82217260809345e-018 ************************************************************************************** Chebyshev coefficients for 1 component -------------------------------------------------------------------------- approximate exact absolute error -------------------------------------------------------------------------- 0 3.87693961448163e+000 3.87693961448163e+000 4.44089209850063e-016 1 -2.16010342208792e-016 0.00000000000000e+000 2.16010342208792e-016 2 -6.12080469173653e-002 -6.12080469173653e-002 3.46944695195361e-017 3 -2.25262765435966e-017 0.00000000000000e+000 2.25262765435966e-017 4 3.21472952728560e-004 3.21472952728575e-004 1.49619899803000e-017 5 -2.26872692724381e-017 0.00000000000000e+000 2.26872692724381e-017 6 -6.72136925722644e-007 -6.72136925723770e-007 -1.12602442425619e-018 7 -1.72310702412875e-019 0.00000000000000e+000 1.72310702412875e-019 8 7.51644630896276e-010 7.51644630959522e-010 6.32458160454982e-020 9 8.04502481824943e-018 0.00000000000000e+000 -8.04502481824943e-018 10 -5.22637126820411e-013 -5.22635472164561e-013 1.65465585013911e-018 11 -3.12770765923411e-018 0.00000000000000e+000 3.12770765923411e-018 12 2.45225567350777e-016 2.47676511895987e-016 2.45094454521000e-018 --------------------------------------------------------------------------- Chebyshev coefficients for 2 component -------------------------------------------------------------------------- approximate exact absolute error -------------------------------------------------------------------------- 0 2.00000000000000e+000 2.00000000000000e+000 -4.44089209850063e-016 1 4.84536915349748e-001 4.84536915349748e-001 -1.11022302462516e-016 2 -1.68949191659343e-017 0.00000000000000e+000 1.68949191659343e-017 3 -5.12745998917451e-003 -5.12745998917449e-003 2.25514051876985e-017 4 -1.02571454747760e-017 0.00000000000000e+000 1.02571454747760e-017 5 1.61072544826895e-005 1.61072544827149e-005 2.54448697355192e-017 6 1.76990357771944e-017 0.00000000000000e+000 -1.76990357771944e-017 7 -2.40317346581591e-008 -2.40317346555260e-008 2.63307470843390e-018 8 1.44812987827331e-017 0.00000000000000e+000 -1.44812987827331e-017 9 2.08935512476454e-011 2.08935351786580e-011 -1.60689874636281e-017 10 -2.02737335925317e-017 0.00000000000000e+000 2.02737335925317e-017 11 -1.18848646645800e-014 -1.18837079244649e-014 1.15674011511216e-018 12 -2.82217260809345e-018 0.00000000000000e+000 2.82217260809345e-018 ---------------------------------------------------------------------------
3) Начальное условие задачи Коши для системы (7)
XN = - 4/9, y1(XN) = 1 + cos q (2 * XN - 1), y2(XN) = 1 + sin q (2 * XN - 1).
Рассматриваются три элементарных сегмента: [- 4/9, - 1/3], [- 1/3, 0] и [0, 1]. Выполняются три обращения к функции de44d_c. Первое обращение осуществляется из начальной точки x = - 4/9 с шагом h = 1/9. Второе обращение осуществляется из точки x = - 1/3 с шагом h = 1/3. Третье обращение осуществляется из точки x = 0 с шагом h = 1. Приводятся фрагмент вызывающей функции и результаты счета, аналогичные результатам из примера 2. А именно, после каждого обращения к функции de44d_c приводятся: значения параметров xp, x (которые последовательно представляют границы каждого из трех элементарных сегментов); значения параметров h, k, iniapr, imax, при которых было вычислено приближенное значение решения yx в конце каждого элементарного сегмента; приближенное значение решения yx в конце каждого элементарного сегмента; точное значение решения yt в конце каждого элементарного сегмента и абсолютная погрешность dely приближенного значения yx. После этого для каждого элементарного сегмента приводятся приближенные значения коэффициентов Чебышёва au для компонент решения y1(x) и y2(x) и приближенные значения коэффициентов Чебышёва ajk их производных y'1(x), y'2(x). Даются также, как и в примерах 1 и 2, точные значения коэффициентов Чебышёва для компонент решения y1(x), y2(x) в (8), (9) и абсолютные погрешности приближенных значений au, вычисленных за три обращения к функции de44d_c.
/* Table of constant values */ static int k = 11; /*......................................................................*/ int main(void) { /* System generated locals */ int i__1, i__2, i__3; /* Builtin functions */ double cos(double), sin(double); /* Local variables */ extern int f_c(); static double h__; static int j, l, m; static double p[65], q, s[77], u[22] /* was [2][11] */, x, au[26] /* was [2][13] */, xk; static int nx; static double xp, yp[2], yt[2], yx[2]; static int kp1, kp2; static double xj0[11], ajk[24] /* was [2][12] */, alp[11], zfi[28] /* was [2][14] */, hd4i[12]; extern int de44d_c( ); static double rabc[11], cmar[121] /* was [11][11] */, ajkp[24] /* was [2][12] */, alpn[11], dely[2]; static int imax, iniapr, jstart; m = 2; q = .5; x = -.44444444444444442; yx[0] = cos(q * (x * 2. - 1.)) + 1.; yx[1] = sin(q * (x * 2. - 1.)) + 1.; h__ = .1111111111111111; xk = x + h__; yt[0] = cos(q * (xk * 2. - 1.)) + 1.; yt[1] = sin(q * (xk * 2. - 1.)) + 1.; imax = 10; jstart = 0; iniapr = 1; de44d_c((U_fp)f_c, &m, &k, &iniapr, &imax, &jstart, yx, &x, xj0, au, ajk, &h__, hd4i, rabc, alp, alpn, cmar, p, s, &xp, yp, ajkp, u, zfi); dely[0] = yt[0] - yx[0]; dely[1] = yt[1] - yx[1]; /* Операторы вывода на печать: h__, k, iniapr, imax, y, yt, dely,au,ajk */ . . . . . . . . . . . . . . . . . . . . . . . . . . return 0; } /* main */ /*......................................................................*/ int f_c(double *x, double *y, double *z__, int *m) { /* Builtin functions */ double cos(double), exp(double), sin(double); /* Local variables */ static double q, r__; /* Parameter adjustments */ --z__; --y; /* Function Body */ q = .5; r__ = *x * 2. - 1.; z__[1] = q * -2. * (y[2] - 1.) + (1. - exp(1. - y[1] + cos(q * r__))) / (*x + 1.); z__[2] = q * 2. * (y[1] - 1.) + (1. - exp(1. - y[2] + sin(q * r__))) / (*x + 1.); return 0; } /* f_c */ Результаты: ---------------------------------------------------------------- RESULTS AFTER THE FIRST CALL FUNCTION de44d_c xp = -4.44444444444444e-001 x = -3.33333333333333e-001 h__=1.11111111111111e-001 k= 11 iniapr= 1 imax= 10 jstart= 1 yx[0]= 1.67241224408306e+000 yx[1]= 2.59823146803963e-001 yt[0]= 1.67241224408306e+000 yt[1]= 2.59823146803963e-001 dely = 0.00000000000000e+000 5.55111512312578e-017 -------------------------------------------------------- COEFFICIENTS AU AND AJK ON 1 SEGMENT --------------------------------------------------- Chebyshev coefficients for 1 component for Y for Y' 0 3.25957764277103e+000 1.55154596888058e+000 1 4.31151352007386e-002 -3.50017733622689e-002 2 -4.86198270661225e-004 -5.98898346005630e-004 3 -5.54571166090741e-006 4.50212533930263e-006 4 3.12659655801833e-008 3.85133723700343e-008 5 2.13968681688411e-010 -1.73704243764988e-010 6 -8.04199120959076e-013 -9.90333879626829e-013 7 -3.93083311238531e-015 2.76636217188750e-015 8 1.23358113847240e-017 2.36064694267984e-016 9 1.46003382834130e-018 -7.86351506913002e-016 10 -2.30626366287524e-018 -2.36986266114597e-016 11 -5.98450166956053e-019 4.39034117220849e-017 12 1.01628267875197e-019 --------------------------------------------------- Chebyshev coefficients for 2 component for Y for Y' 0 4.48454031119416e-001 1.25957764277103e+000 1 3.50017733622692e-002 4.31151352007386e-002 2 5.98898346005547e-004 -4.86198270661385e-004 3 -4.50212533913760e-006 -5.54571166076969e-006 4 -3.85133724266720e-008 3.12659654762732e-008 5 1.73704275279245e-010 2.13968671075690e-010 6 9.90615131521051e-013 -8.04073990820931e-013 7 -3.19171880442511e-015 -4.19733285671534e-015 8 -1.23693280078730e-017 2.39147894195990e-016 9 1.22166202546893e-018 -6.34966390447925e-016 10 -1.82355840918940e-018 -1.56670602055944e-016 11 -3.95632833474607e-019 2.15146368602592e-017 12 4.98024001394890e-020 -------------------------------------------------------- RESULTS AFTER THE SECOND CALL FUNCTION de44d_c xp = -3.33333333333333e-001 x = 0.00000000000000e+000 h__=3.33333333333333e-001 k= 11 iniapr= 1 imax= 14 jstart= 1 yx[0]= 1.87758256189037e+000 yx[1]= 5.20574461395797e-001 yt[0]= 1.87758256189037e+000 yt[1]= 5.20574461395797e-001 dely = -2.22044604925031e-016 -1.11022302462516e-016 -------------------------------------------------------- COEFFICIENTS AU AND AJK ON 2 SEGMENT --------------------------------------------------- Chebyshev coefficients for 1 component for Y for Y' 0 3.56087835592219e+000 1.22816603568965e+000 1 1.02704194891648e-001 -1.30526940340578e-001 2 -5.44492816475258e-003 -4.28430301012680e-003 3 -1.19077351393357e-004 1.51335613483477e-004 4 3.15392064583845e-006 2.48164003407144e-006 5 4.13702452596326e-008 -5.25775167690656e-008 6 -7.30364059220792e-010 -5.74681506510877e-010 7 -6.84229863929684e-012 8.69549483144879e-012 8 9.05943999091517e-014 7.15791900578189e-014 9 6.65150503638104e-016 -1.56755982977028e-015 10 -1.38375255083883e-017 -2.57064335096313e-016 11 -1.94745708406298e-018 9.29432312363199e-017 12 6.45439105807777e-019 --------------------------------------------------- Chebyshev coefficients for 2 component for Y for Y' 0 7.71833964310354e-001 1.56087835592219e+000 1 1.30526940340579e-001 1.02704194891648e-001 2 4.28430301012671e-003 -5.44492816475268e-003 3 -1.51335613483290e-004 -1.19077351393215e-004 4 -2.48164003413723e-006 3.15392064576174e-006 5 5.25775168279014e-008 4.13702453724316e-008 6 5.74681778144508e-010 -7.30363912351020e-010 7 -8.69588987890305e-012 -6.84265397300635e-012 8 -7.12764187308045e-014 9.08374768362596e-014 9 8.43394062341305e-016 -1.17774849118027e-016 10 -2.17218775880208e-018 -2.49081896601389e-016 11 -1.88698406516203e-018 1.42887681938222e-016 12 9.92275569015434e-019 -------------------------------------------------------- RESULTS AFTER THE THIRD CALL FUNCTION de44d_c xp = 0.00000000000000e+000 x = 1.00000000000000e+000 h__=1.00000000000000e+000 k= 11 iniapr= 2 imax= 17 jstart= 1 yx[0]= 1.87758256189037e+000 yx[1]= 1.47942553860420e+000 yt[0]= 1.87758256189037e+000 yt[1]= 1.47942553860420e+000 dely = 0.00000000000000e+000 -4.44089209850063e-016 -------------------------------------------------------- COEFFICIENTS AU AND AJK ON 3 SEGMENT --------------------------------------------------- Chebyshev coefficients for 1 component for Y for Y' 0 3.87693961448163e+000 -3.77464986350828e-016 1 -7.36122453140822e-017 -4.84536915349748e-001 2 -6.12080469173653e-002 -8.30160050944995e-017 3 -2.81581986098905e-018 5.12745998917446e-003 4 3.21472952728575e-004 -4.92261667626309e-017 5 -9.17150334628011e-018 -1.61072544827402e-005 6 -6.72136925720834e-007 1.34203900162971e-016 7 -1.37909064283675e-018 2.40317345598162e-008 8 7.51644632555614e-010 1.72818438162400e-016 9 8.31325191821329e-018 -2.08936819634639e-011 10 -5.22637126820411e-013 -1.26458630893278e-016 11 -2.87405979302905e-018 1.18031093525230e-014 12 2.45898111510896e-016 --------------------------------------------------- Chebyshev coefficients for 2 component for Y for Y' 0 2.00000000000000e+000 1.87693961448163e+000 1 4.84536915349748e-001 3.23708887386281e-016 2 1.68949191659343e-017 -6.12080469173654e-002 3 -5.12745998917449e-003 1.88549534058807e-016 4 1.02575689912496e-017 3.21472952728537e-004 5 1.61072544827040e-005 2.44284301988140e-017 6 2.01125149882376e-017 -6.72136925542325e-007 7 -2.40317346605727e-008 -4.58271929518889e-016 8 1.56881089743337e-017 7.51644953709532e-010 9 2.08935520521385e-011 -9.60291416697567e-016 10 -1.95496898292187e-017 -5.22920167453714e-013 11 -1.18845492603117e-014 -1.78303823528819e-016 12 -3.71466299018373e-018 ************************************************************************************** Chebyshev coefficients for 1 component -------------------------------------------------------------------------- approximate exact absolute error -------------------------------------------------------------------------- 0 3.87693961448163e+000 3.87693961448163e+000 -4.44089209850063e-016 1 -7.36122453140822e-017 0.00000000000000e+000 7.36122453140822e-017 2 -6.12080469173653e-002 -6.12080469173653e-002 4.16333634234434e-017 3 -2.81581986098905e-018 0.00000000000000e+000 2.81581986098905e-018 4 3.21472952728575e-004 3.21472952728575e-004 1.62630325872826e-019 5 -9.17150334628011e-018 0.00000000000000e+000 9.17150334628011e-018 6 -6.72136925720834e-007 -6.72136925723770e-007 -2.93613383253863e-018 7 -1.37909064283675e-018 0.00000000000000e+000 1.37909064283675e-018 8 7.51644632555614e-010 7.51644630959522e-010 -1.59609172762568e-018 9 8.31325191821329e-018 0.00000000000000e+000 -8.31325191821329e-018 10 -5.22637126820411e-013 -5.22635472164561e-013 1.65465585013911e-018 11 -2.87405979302905e-018 0.00000000000000e+000 2.87405979302905e-018 12 2.45898111510896e-016 2.47676511895987e-016 1.77840038509009e-018 --------------------------------------------------------------------------- Chebyshev coefficients for 2 component -------------------------------------------------------------------------- approximate exact absolute error -------------------------------------------------------------------------- 0 2.00000000000000e+000 2.00000000000000e+000 -4.44089209850063e-016 1 4.84536915349748e-001 4.84536915349748e-001 -2.77555756156289e-016 2 1.68949191659343e-017 0.00000000000000e+000 -1.68949191659343e-017 3 -5.12745998917449e-003 -5.12745998917449e-003 7.80625564189563e-018 4 1.02575689912496e-017 0.00000000000000e+000 -1.02575689912496e-017 5 1.61072544827040e-005 1.61072544827149e-005 1.09639944692597e-017 6 2.01125149882376e-017 0.00000000000000e+000 -2.01125149882376e-017 7 -2.40317346605727e-008 -2.40317346555260e-008 5.04663553463092e-018 8 1.56881089743337e-017 0.00000000000000e+000 -1.56881089743337e-017 9 2.08935520521385e-011 2.08935351786580e-011 -1.68734805314627e-017 10 -1.95496898292187e-017 0.00000000000000e+000 1.95496898292187e-017 11 -1.18845492603117e-014 -1.18837079244649e-014 8.41335846753027e-019 12 -3.71466299018373e-018 0.00000000000000e+000 3.71466299018373e-018 --------------------------------------------------------------------------
Заметим, что во втором и третьем примерах последовательные обращения к функции de44d_c выполнялись при одном и том же значении k (k = 11). При этом изменялись только параметры h, imax, iniapr.
4) Четвертый пример служит иллюстрацией того, как последовательные обращения к функции de44d_c можно выполнять не только с разными значениями параметров h, iniapr, imax, но и с разными значениями параметра k.
Рассматриваются начальные условия и элементарные сегменты из примера 3. Выполняются также, как и в примере 3, три обращения к функции. Первое обращение осуществляется из начальной точки x = - 4/9 с шагом h = 1/9 со значением параметра k = 6. Второе обращение осуществляется из точки x = - 1/3 с шагом h = 1/3 и со значением параметра k = 8. Третье обращение осуществляется из точки x = 0 с шагом h = 1 и со значением k = 11. Дополнительным и существенным отличием является только то, что каждое последующее обращение к функции de44d_c с новым значением параметра k (отличным от значения k при предыдущем обращении) выполняется с нулевым значением параметра jstart. Приводится фрагмент вызывающей функции и результаты счета, полностью аналогичные результатам из примера 3. Обратим внимание на то, что в примере 4 дается значение параметра jstart на входе в функцию de44d_c при каждом обращении к ней, в то время как в первых трех примерах приведено значение параметра jstart на выходе из функции de44d_c, которое всегда полагается равным 1.
int main(void) { /* System generated locals */ int i__1, i__2, i__3; /* Builtin functions */ double cos(double), sin(double); /* Local variables */ extern int f_c(); static double h__; static int j, l, m; static double p[104], q, s[119], u[28] /* was [2][14] */, x; static int k0; static double au[32] /* was [2][16] */, xk; static int nx; static double xp, yp[2], yt[2], yx[2]; static int kp1, kp2; static double xj0[14], ajk[30] /* was [2][15] */, alp[14], zfi[34] /* was [2][17] */, hd4i[15]; extern int de44d_c( ); static double rabc[14], cmar[196] /* was [14][14] */, ajkp[30] /* was [2][15] */, alpn[14], dely[2]; static int imax, iniapr, jstarn, jstart; /* take into consideraitoin: all arraies dependent on K */ /* must be described for maximal value K */ m = 2; q = .5; x = -.44444444444444442; yx[0] = cos(q * (x * 2. - 1.)) + 1.; yx[1] = sin(q * (x * 2. - 1.)) + 1.; h__ = .1111111111111111; xk = x + h__; yt[0] = cos(q * (xk * 2. - 1.)) + 1.; yt[1] = sin(q * (xk * 2. - 1.)) + 1.; imax = 10; jstarn = 0; jstart = jstarn; iniapr = 1; k0 = 6; de44d_c((U_fp)f_c, &m, &k0, &iniapr, &imax, &jstart, yx, &x, xj0, au, ajk, &h__, hd4i, rabc, alp, alpn, cmar, p, s, &xp, yp, ajkp, u, zfi); dely[0] = yt[0] - yx[0]; dely[1] = yt[1] - yx[1]; /* RESULTS AFTER THE FIRST CALL FUNCTION de44d_c */ /* Операторы вывода на печать: h__, k0, iniapr, imax, y, yt, dely,yx,yt */ . . . . . . . . . . . . . . . . . . . . . . . . . . nx = 1; goto L15; L1: h__ = .33333333333333331; xk = x + h__; yt[0] = cos(q * (xk * 2. - 1.)) + 1.; yt[1] = sin(q * (xk * 2. - 1.)) + 1.; imax = 14; /* take into consideraitoin: parameter JSTART must be equal to zero */ jstart = jstarn; k0 = 8; de44d_c((U_fp)f_c, &m, &k0, &iniapr, &imax, &jstart, yx, &x, xj0, au, ajk, &h__, hd4i, rabc, alp, alpn, cmar, p, s, &xp, yp, ajkp, u, zfi); dely[0] = yt[0] - yx[0]; dely[1] = yt[1] - yx[1]; /* RESULTS AFTER THE SECOND CALL FUNCTION de44d_c */ /* Операторы вывода на печать: h__, k0, iniapr, imax, y, yt, dely,yx,yt */ . . . . . . . . . . . . . . . . . . . . . . . . . . nx = 2; goto L15; L2: h__ = 1.; xk = x + h__; yt[0] = cos(q * (xk * 2. - 1.)) + 1.; yt[1] = sin(q * (xk * 2. - 1.)) + 1.; imax = 17; /* take into consideraitoin: parameter JSTART must be equal to zero */ jstart = jstarn; k0 = 11; de44d_c((U_fp)f_c, &m, &k0, &iniapr, &imax, &jstart, yx, &x, xj0, au, ajk, &h__, hd4i, rabc, alp, alpn, cmar, p, s, &xp, yp, ajkp, u, zfi); dely[0] = yt[0] - yx[0]; dely[1] = yt[1] - yx[1]; /* RESULTS AFTER THE THIRD CALL FUNCTION de44d_c */ /* Операторы вывода на печать: h__, k0, iniapr, imax, y, yt, dely,yx,yt */ . . . . . . . . . . . . . . . . . . . . . . . . . . nx = 3; L15: kp2 = k0 + 2; kp1 = k0 + 1; /* Операторы вывода на печать: au,ajk */ . . . . . . . . . . . . . . . . . . . . . . . . . . return 0; } /* main */ /*.................................................................*/ int f_c(double *x, double *y, double *z__, int *m) { /* Builtin functions */ double cos(double), exp(double), sin(double); /* Local variables */ static double q, r__; /* Parameter adjustments */ --z__; --y; /* Function Body */ q = .5; r__ = *x * 2. - 1.; z__[1] = q * -2. * (y[2] - 1.) + (1. - exp(1. - y[1] + cos(q * r__))) / (*x + 1.); z__[2] = q * 2. * (y[1] - 1.) + (1. - exp(1. - y[2] + sin(q * r__))) / (*x + 1.); return 0; } /* f_c */ Результаты: ---------------------------------------------------------------- RESULTS AFTER THE FIRST CALL FUNCTION de44d_c xp = -4.44444444444444e-001 x = -3.33333333333333e-001 h__=1.11111111111111e-001 k= 6 iniapr= 1 imax= 10 jstart(initial)= 0 yx[0]= 1.67241224408306e+000 yx[1]= 2.59823146803963e-001 yt[0]= 1.67241224408306e+000 yt[1]= 2.59823146803963e-001 dely = 0.00000000000000e+000 1.11022302462516e-016 -------------------------------------------------------- COEFFICIENTS AU AND AJK ON 1 SEGMENT --------------------------------------------------- Chebyshev coefficients for 1 component for Y for Y' 0 3.25957764277103e+000 1.55154596888058e+000 1 4.31151352007386e-002 -3.50017733622692e-002 2 -4.86198270661225e-004 -5.98898346005527e-004 3 -5.54571166091108e-006 4.50212533902731e-006 4 3.12659655804515e-008 3.85133728696211e-008 5 2.13968703344107e-010 -1.73704557702504e-010 6 -8.04187767141221e-013 -9.93732318112749e-013 7 -3.94338221473313e-015 --------------------------------------------------- Chebyshev coefficients for 2 component for Y for Y' 0 4.48454031119416e-001 1.25957764277103e+000 1 3.50017733622692e-002 4.31151352007385e-002 2 5.98898346005548e-004 -4.86198270661180e-004 3 -4.50212533913881e-006 -5.54571166096443e-006 4 -3.85133724260480e-008 3.12659658113662e-008 5 1.73704256202067e-010 2.13968386479396e-010 6 9.90594381849057e-013 -8.00305005913774e-013 7 -3.17581351553085e-015 -------------------------------------------------------- RESULTS AFTER THE SECOND CALL FUNCTION de44d_c xp = -3.33333333333333e-001 x = 0.00000000000000e+000 h__=3.33333333333333e-001 k= 8 iniapr= 1 imax= 14 jstart(initial)= 0 yx[0]= 1.87758256189037e+000 yx[1]= 5.20574461395797e-001 yt[0]= 1.87758256189037e+000 yt[1]= 5.20574461395797e-001 dely = -2.22044604925031e-016 0.00000000000000e+000 -------------------------------------------------------- COEFFICIENTS AU AND AJK ON 2 SEGMENT --------------------------------------------------- Chebyshev coefficients for 1 component for Y for Y' 0 3.56087835592219e+000 1.22816603568965e+000 1 1.02704194891648e-001 -1.30526940340579e-001 2 -5.44492816475259e-003 -4.28430301012680e-003 3 -1.19077351393360e-004 1.51335613483700e-004 4 3.15392064584961e-006 2.48164003415786e-006 5 4.13702452639391e-008 -5.25775170815055e-008 6 -7.30364064978640e-010 -5.74681678485670e-010 7 -6.84230978754115e-012 8.69559695651717e-012 8 9.05791349637206e-014 7.23436677859020e-014 9 6.69848775795389e-016 --------------------------------------------------- Chebyshev coefficients for 2 component for Y for Y' 0 7.71833964310354e-001 1.56087835592219e+000 1 1.30526940340579e-001 1.02704194891648e-001 2 4.28430301012670e-003 -5.44492816475271e-003 3 -1.51335613483295e-004 -1.19077351392997e-004 4 -2.48164003412617e-006 3.15392064591683e-006 5 5.25775168328894e-008 4.13702450594665e-008 6 5.74681773120332e-010 -7.30364056532968e-010 7 -8.69588248277269e-012 -6.84260519746112e-012 8 -7.12771374735533e-014 9.00720199380894e-014 9 8.34000184611939e-016 -------------------------------------------------------- RESULTS AFTER THE THIRD CALL FUNCTION de44d_c xp = 0.00000000000000e+000 x = 1.00000000000000e+000 h__=1.00000000000000e+000 k=11 iniapr= 1 imax= 17 jstart(initial)= 0 yx[0]= 1.87758256189037e+000 yx[1]= 1.47942553860420e+000 yt[0]= 1.87758256189037e+000 yt[1]= 1.47942553860420e+000 dely = 0.00000000000000e+000 -4.44089209850063e-016 -------------------------------------------------------- COEFFICIENTS AU AND AJK ON 3 SEGMENT --------------------------------------------------- Chebyshev coefficients for 1 component for Y for Y' 0 3.87693961448163e+000 -2.47736808281149e-016 1 -3.98232540151609e-017 -4.84536915349748e-001 2 -6.12080469173653e-002 -8.84437922205050e-017 3 -6.83809698318397e-018 5.12745998917447e-003 4 3.21472952728576e-004 -6.38662842229742e-018 5 -1.08609952628735e-017 -1.61072544827396e-005 6 -6.72136925720834e-007 2.10833276835173e-016 7 -5.17174116652126e-019 2.40317345604193e-008 8 7.51644633460668e-010 2.25314152101433e-016 9 9.38597208852490e-018 -2.08937103221270e-011 10 -5.22637368140097e-013 -1.12580843085464e-016 11 -2.55865552466963e-018 1.17844034769159e-014 12 2.45508405769081e-016 --------------------------------------------------- Chebyshev coefficients for 2 component for Y for Y' 0 2.00000000000000e+000 1.87693961448163e+000 1 4.84536915349748e-001 2.27167460190025e-016 2 1.08606564496946e-017 -6.12080469173654e-002 3 -5.12745998917449e-003 1.40282208592468e-016 4 7.84394860804845e-018 3.21472952728518e-004 5 1.61072544827011e-005 1.47790308636930e-017 6 1.76993181215101e-017 -6.72136925503708e-007 7 -2.40317346588488e-008 -4.10004604052550e-016 8 1.77997621118387e-017 7.51644944060133e-010 9 2.08935533930858e-011 -9.79596991631387e-016 10 -2.00323292025642e-017 -5.22978090954779e-013 11 -1.18858657035177e-014 -1.78303823528819e-016 12 -3.71466299018373e-018 ************************************************************************************** Chebyshev coefficients for 1 component -------------------------------------------------------------------------- approximate exact absolute error -------------------------------------------------------------------------- 0 3.87693961448163e+000 3.87693961448163e+000 -4.44089209850063e-016 1 -3.98232540151609e-017 0.00000000000000e+000 3.98232540151609e-017 2 -6.12080469173653e-002 -6.12080469173653e-002 3.46944695195361e-017 3 -6.83809698318397e-018 0.00000000000000e+000 6.83809698318397e-018 4 3.21472952728576e-004 3.21472952728575e-004 -7.58941520739853e-019 5 -1.08609952628735e-017 0.00000000000000e+000 1.08609952628735e-017 6 -6.72136925720834e-007 -6.72136925723770e-007 -2.93613383253863e-018 7 -5.17174116652126e-019 0.00000000000000e+000 5.17174116652126e-019 8 7.51644633460668e-010 7.51644630959522e-010 -2.50114643176690e-018 9 9.38597208852490e-018 0.00000000000000e+000 -9.38597208852490e-018 10 -5.22637368140097e-013 -5.22635472164561e-013 1.89597553679167e-018 11 -2.55865552466963e-018 0.00000000000000e+000 2.55865552466963e-018 12 2.45508405769081e-016 2.47676511895987e-016 2.16810612690604e-018 --------------------------------------------------------------------------- Chebyshev coefficients for 2 component -------------------------------------------------------------------------- approximate exact absolute error -------------------------------------------------------------------------- 0 2.00000000000000e+000 2.00000000000000e+000 -4.44089209850063e-016 1 4.84536915349748e-001 4.84536915349748e-001 -2.77555756156289e-016 2 1.08606564496946e-017 0.00000000000000e+000 -1.08606564496946e-017 3 -5.12745998917449e-003 -5.12745998917449e-003 7.80625564189563e-018 4 7.84394860804845e-018 0.00000000000000e+000 -7.84394860804845e-018 5 1.61072544827011e-005 1.61072544827149e-005 1.38608471488694e-017 6 1.76993181215101e-017 0.00000000000000e+000 -1.76993181215101e-017 7 -2.40317346588488e-008 -2.40317346555260e-008 3.32280106423776e-018 8 1.77997621118387e-017 0.00000000000000e+000 -1.77997621118387e-017 9 2.08935533930858e-011 2.08935351786580e-011 -1.82144278046103e-017 10 -2.00323292025642e-017 0.00000000000000e+000 2.00323292025642e-017 11 -1.18858657035177e-014 -1.18837079244649e-014 2.15777905277648e-018 12 -3.71466299018373e-018 0.00000000000000e+000 3.71466299018373e-018 --------------------------------------------------------------------------
В процессе интегрирования дифференциальных уравнений (1), (2) с помощью фукнкции de44d_c нужно следить за тем, чтобы параметры h, k, iniapr, imax удовлетворяли приведенным выше условиям, сформулированным в "Математическом описании" и в "Замечаниях по использованию". Особенно это относится к длине элементарного сегмента h и параметру k, определяющему порядок используемых частичных сумм рядов Чебышёва для решения и его производной. Необходимо заботиться о том, чтобы указанные ряды Чебышёва на каждом сегменте [x, x + h] длиной h быстро сходились, при этом сумма ряда Чебышёва для решения должна хорошо приближаться частичной суммой порядка k + 1, а сумма ряда Чебышёва для производной должна хорошо приближаться частичной суммой k-го порядка.