Главная -> Книги

(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) (58) (59) (60) (61) (62) (63) (64) (65) (66) (67) (68) (69) (70) (71) (72) (73) (74) (75) (76) (77) (78) (79) (80) (81) (82) (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96) (97) (98) (99) (100) (5)

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

Таким образом, если даже погрешность округления результата операции не Превышает веса единицы последнего разряда операнда, то после 10 операций погрешность округления по мажоритарной оценке перейдет в старший разряд. Например, при вычислениях иа ЭВМ с быстродействием 10* опер./с вследствие только погрешности округления результат вычислений через 1 с может иметь ошибочные цифры в шести десятичных разрядах. Практически погрешности округления различного знака частично компенсируются, но накопление погрешностей может привести к значительным ошибкам, поэтому необходимо выбирать такие алгоритмы, при которых накопление операционных погрешностей минимально.

Наибольшие операционные погрешности возникают при вычитании близких чисел и особен.</ г,;» де-пенни иа разность 5лизк..х чисел. Поэтому необходимо в алгоритме вычислений устранить подобные операции. Во многих случаях это удается достичь при умножении и делении разности близких чисел на их сумму с последующим сокращением подобных членов в разности квадратов. Например, при вычислениях иа ПМК рассмотренных типов по формуле а = У10-Ь*- - 103 для x=100; 10; 1; 0,1; 0,01 соответственно получим а = 4,9910- 4,99Х Х10; 4,99.20-; 0; 0. Однако после предварительного преобразования этой

формулы а={уШ+х=10) (yi¥+x+ \0)/{{\W+x+ W) ==x/{\W+x-\-m) для тех же значений х получим более точные значения: 0=4,999875210-2; 4,9996877.10-3; 4,999999-10-4; 5-10-5; з.ю-е. При вычислениях ПМК по формуле с делением иа разность близких чисел о=*(У10*-1-*-103) для *=1000; 100; 10; 1; 0,5; 0,4; 0,2 соответственно получим а = 2000, 8003; 2004, 008; 2040, 8163; 2500; 5000; оо - явно ошибочный результат при малых значениях х. Между тем при вычислениях по предварительно преобразованной формуле а=х{У\0+х+ -f 103)/(уГ0в+7-103) (уТ0ё+-)-103) =уТо«Тж-Ь10з для тех же значений д: получим значительно более точные результаты: 0=2000,4998; 2000,0499; 2000,004; 2000,002; 2000,001; 2000.

Подобная ситуация характерна и при решении часто встречающейся задачи вычисления вещественных корней алгебраического уравнения х+а[Х+ао=0. Если коэффициенты oj и оо соизмеримы по абсолютному значению, то погрешность вычисления корней *i.2=-Oi/2d:y(oi/2).....Оо достаточно мала. Однако

при 01» Оо относительная погрешность меньшего по модулю корня существенно возрастает и при Oi>2-10<-ao вычисленные по обычной формуле корни д:1 = -о,, «2 = 0 в этих случаях больший корень следует вычислять по формуле *i = = ±(а±Уа-Оо), где а=-ja), а знак корня противоположен знаку Для вычисления меньшего корня эту формулу следует преобразовать, умножив и разделив ее на множитель а-Уа-Оо, откуда получим X2=ao/xi. В этом случае, например, при решении уравнения ж+Ю 000*+8=0 получим л:,=-10 000, *2= = 0 по обычной формуле и *i =-10 000, ;t2 = -8-10- по преобразованной формуле.

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



дует еще на этапе выбора метода оценить приближенно возможные погрешности результата и после этого приступать к выбору и оптимизации алгоритма.

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

Аа = а - а* =2

да dWf

i= 1

8а =

1= 1

да dWi

dwi Wi

2 5; Ьщ.

;= 1

Формулы для вычисления коэффициентов и 5,- при оценке погрешностей результатов отдельных операций приведены в табл. 1.3. Если допущение о малости погрешностей ш, несправедливо, то используют нелинейные члены разложения в многомерный ряд Тейлора или другие методы оценки погрешностей.

Для проверки точности следует использовать по возможности более простые методы, например, для вычисления специальных функций сравнения с известны-

Таблица 1.3. Коэффициенты пропорциональности Ri и 5, малых приращений операндов погрешностям результатов операций

Результат

у/х хУ \/х Ух

10" In X

sin х

cos X

tgx arcsin x arccos X

arctg X

1/=, Rx= - > Ry--x, Rx = y Ry=\Jx, R-y/x Ry-~=xy \ax, Rx=-yx«-

- llx 1/2 V7

10"In 10

\lx \/x In 10 cos x

- sin X

1 / COS X

x/VT

\/{\-x)

Sy--y/{y + x), Sx = X/(y + X) Syy/(y-x), Sx=-xl(y--x)

S;,==Sj/=l Sy=\, 5д;=-1

Sy = y \r\x, Sx = y

1/2 x

x\n 10 l/lnx I/In 10 Inx x/igx -X igx 2х1&т 2x x/(l/l -x arcsin л:) 1/(»1 -л;" arccos лг) л:/((1-ж2) arctg.X)



ми точными значениями, точность корней нелинейных уравнений /(а:)=0 и систем уравнений обычно оценивают по иевязкам уравнений - значениям их левых частей при подстановке вычисленных значений корней.

Анализ операционных погрешностей несколько упрощается при использовании графов накопления погрешностей [14, 15].

При использовании прямых (точных) методов вычислений, когда точно известно число операций, операционные погрешности можно оценить заранее. При использовании косвенных методов вычислений (связанных с численным интегрированием, суммированием бесконечных рядов, решением уравнений методами последовательных приближений) точное значение результата теоретически может быть получено лишь после бесконечного числа операций. Так как практически выполнимо лишь конечное их число, то возникает методическая (остаточная) погрешность. Поэтому при использовании косвенных методов алгоритм вычислений следует выбирать так [15], чтобы минимизировать сумму операционной и методической составляющих погрешности результата.

Элементарные функции ПМК вычисляет по микропрограммам, реализующим методы последовательных приближений с методической погрешностью, причем точность результатов для уменьшения затрат времени ограничена восмью верными цифрами при выполнении операторов х, У и 1/х, семью при вычислении Тригонометрических и логарифмических функций (включая антилогарифмы) и только шестью при выполнении оператора Х.

Решение уравнений методами последовательных приближений на ПМК реализуют с помощью циклов с выходом из них по достижении требуемой точности согласно условию Ixi-ATi-il или Ixi-л:(-,/л:,1 :е, где лгг-текущее значение результата вычислений в цикле; е - малое число. Теоретически максимальная точность достигается при е = 0, однако, иногда эта точность не может быть достигнута н программа «зацикливается», так как на каждой итерации возникает операционная погрешность, близкая половине единицы последнего разряда или кратная ей, два очередных значения Xi и Xi-i будут периодически отличаться на единицу или более последнего разряда мантиссы и условие 8 = 0 окажется невыполнимым [14].

Не следует добиваться точности выше требуемой по условиям задачи; это приведет лишь к затратам времени.

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

1.4. Оптимизация программ

Основным экономическим критерием целесообразности использования любого вычислительного средства являются затраты на решение задачи, равные при обращении к ЭВМ сумме стоимости машинного времени и рабочего времени пользователя. Стоимость 1 ч машинного времени ПМК около 10 коп. [11], что меньше стоимости рабочего времени пользователя. Поэтому оптимальность программы вычислений иа ПМК определяется минимальными затратами времени



(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) (58) (59) (60) (61) (62) (63) (64) (65) (66) (67) (68) (69) (70) (71) (72) (73) (74) (75) (76) (77) (78) (79) (80) (81) (82) (83) (84) (85) (86) (87) (88) (89) (90) (91) (92) (93) (94) (95) (96) (97) (98) (99) (100)