Главная страница  Алгоритмы 

[0] [1] [2] [3] [4] [5] [6] [7] [ 8 ] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57]

3. Интегрирование уравнения yi=\+y\, имеющего решение yi=tgx (второй пример «Подтверждения» Г- Тачера), для входных данных

X-О, yll]-О, п=2, prim=true, eta = 10- xfin=i0.5, 1.0, 1.5 и eps=il(>-7, 10-5, 1,0-3.

Результаты интегрирования совпали с результатами Г. Тачера, приведенными в нижеследующей табл. 5, кроме двух значений hmin (глобальный параметр hs) для (xfin, eps) = (0.5; 10-з) и (xfin, eps) = (1.0; ICr), которые получились в два раза большими, чем у Г. Тачера (т. е. О.бО вместо 0.25).

Значения tg (х), получаемые в результате интегрирования, сравнивались со значениями tg (х), получаемыми по стандартной программе транслятора ТА-IM, а также со значениями tg (х), приведенными в таблицах К. Гай-аши [57] и равными g-(0.5) =0.6463024898; g-(1.0) = = 1.5574077247 и tg (1.5) =14.1014199472.

Время t{c) вычислений на машине М-220 карэктери-зуется следующими цифрами:

хйп = 0.5 xfln=1.0 x{in=1.5

eps 10- 10-» 10- 10- 10-» 10- 10- 10-» 10-

t 5 II 35 6 14 35 24 75 115

Во всех расчетах процедура сотр задавалась описанием, приведенным в нижеследующем «Подтверждении» Г. Тачера. При этом .константа - 999 в теле процедуры сотр была заменена на -18, что соотвелтвует порядку наименьшего положительного числа, представкмого на маш,ине М-220.

Подтверждение к алгоритму 9 Г. Тачер (Thacher Н. С. «САСМ», 1966, № 4)

Алгоритм 9 был переведен на конкретное представление АЛГОЛа для машины CDC 3600 и прошел успешно. В качестве глобальной процедуры сотр была использована следующая процедура: real procedure comp (a,b,c);

value a,b,c; real a,b,c; begin integer ae,be,ce;

integer procedure expon(x);

value x; real x; comment Эта функция вычисляет показатель десятичного



порядка нормализованного числа х с плавающей запятой; ехроп:= if х=0 Шеп -999 else

en tier (0.4342944819Xln(abs(x)) + 1; comment Число 999 может быть заменено любым другим, меньшим, чем -показатель порядка наименьшего положительного числа, иредста-вкмого в используемой машине. Для этого алгоритма предполагается, что истинный нуль имеет показатель порядка, меньший, чем любое ненулевое число с плавающей запятой. Пользователи, реализующие процедуру сотр в машинном коде, должны быть уверены, что данное условие удовлетворяется для их программы; ае: = ехроп(а); be: = expon(b); се: = ехроп(с); if ae<be then ae: = be; if ae<ce then ae: = ce; comp: = abs(a-b)/10f ae

end comp;

- Положительная сторона этой процедуры - независимость от машины, а отрицательная - значительная неэффективность по сравнению с программой (в машинном коде.

Алгоритм был проверен с использованием двух следующих процедур f: procedure f (x,y,n,z);

real x; integer n; array y,z;

comment (dyi/dx) =zi=y2, (dy/dx) =Z2=-yi. При у(0) = 0, yj(0)=l решением является yi=sinx и у2=со5х; begin zll]: = y[21; zp]:-yll]end;

procedure f(x,y,n,z);

real x; integer n; array y,z;

comment (dyi/dx) == 1+yi2. Для yi(0)==0,

y(x)-::tgx;

zCll: = l-fyll]t2;

Алгоритм 9 был использован для интегрирования дифференциальных уравнений, представляемых первой процедурой / при х=0, 0.5, 1.0, 1.5,...,7.0, eps = eta = - lOS j/i;(0)=O и j/2i(0)=l. Для большей части интервала величина шага h была равна 0.0625, но она уменьшалась до 0,03125 в окрестности x=kn/2, где то или другое из решений мало. Для x=7.0 были получены реше-



ния: 1/1=6.6698602746XlO-i, г/2=7.5390270246X10- с ло-грешностями -5.71Х10~ и 4.48Х10- соответственно.

Результаты для второго дифференциального уравнения при eta=l(y- приведены в табл. 5.

Таблица 5

Ошибка

абсолютная

относительная

10- 10-» I0-

0.03125

0.125

0.25

-1Х10-» -5XI0-

-1Х10-»

-2Х10-» -9Х10- -2Х10-»

10- 10-» 10-

0.03125 . 0.0625 0.25

9Х10-» 8Х10- -2X10-,*

6Х10-* 5Х10- -1Х10-*

10- 10-» 10-

0.00390625

0.0078125

0.03125

-1Х10-» -2Х10-* -3x10- =

-8Х10-» -1Х10-» -2Х10-

Эффективность процедуры для большинства машин несколько возрастет, если изменить тип переменной ss с real на integer.

Погрешность в алгоритме 9 оценивается путем сравнения результатов последовательных пар шагов с результатами одного двойного шага. Такой метод требует несколько больше времени, чем процесс Кутта - Мерсо-на, представленный в алгоритме 218 («САСМ», 1963, № 12). Однакю метод изменения величины шага в алгоритме 9, в котором эффективно применяется приближенный критерий относительной ошибки eps для \y\>eta и критерий абсолютной ошибки etaxeps для \y\<.eta, имеет -цреимущество, когда решение колеблется по величине.

АЛГОРИТМ 106 . Значения полинома Чебышева 7п(л;)[822]

Процедура cheb вычисляет значение полинома Чебышева Tn(x)-cos {пХагсCOSх) для любого действительного аргумента х и любого порядка п по рекуррентной формуле r„+i(x)=2xr„(x)-Г„ 1(д;) [32, с. 144}.




[0] [1] [2] [3] [4] [5] [6] [7] [ 8 ] [9] [10] [11] [12] [13] [14] [15] [16] [17] [18] [19] [20] [21] [22] [23] [24] [25] [26] [27] [28] [29] [30] [31] [32] [33] [34] [35] [36] [37] [38] [39] [40] [41] [42] [43] [44] [45] [46] [47] [48] [49] [50] [51] [52] [53] [54] [55] [56] [57]

0.0153