Турчак Л.И. Основы численных методов. Под ред. В.В.Щенникова (1987) (1095857), страница 5
Текст из файла (страница 5)
Получим В1п 0.5236 = 0.5236 — 0.2393 10 '+ 0.3281 10 ' = 0.500 Это отличный результат в рамках принятой точности. Зная из курса высшей математики, что это разложение синуса справедливо при любом значении аргумента ( — о ( х ( ), используем его для вычисления Функции при х = 6.807 (390') . Опуская вычисления, получаем В1п 6.807 = 0.5493. Относительная погрешность составляет здесь около 10/о (вместо ожидаемого значения 0.010/О по признаку Лейбница).
Это объясняется погрешностями округлений и спосооом суммирования ряда (слева направо, без учета величины членов). Не всегда помогает и повышенная точность вычислений. В частности, для данного ряда при х = 25.66 (1470' =4. 360'+ 30') даже при учете членов ряда до 10 ' и вычислениях с восемью значащими цифрами в результате аналогичных вычислений (суммирование слева направо) получается результат, пе имеющий смысла; В1п 25.66 = 24. В программах, использующих степенные ряды для вычисления значений функций, могут быть приняты различные меры по предотвращению подобной потери точно сти. Так, для тригонометрических функций можно использовать формулы приведения„олагодаря чему аргумент будет-находиться иа отрезке ~0, 11. ??ри вычислении % 2, погРГптностп вычпс,'Гний экспоненты аргумент х можно разбить на сумму целой н дробной частей (е" = е"+' = е" е") и использовать разложение в ряд только для е", а е вычислять умножением.
Таким образом, при организации вычислений можно своевременно распознать подобные «подводные камни», когда возможна потеря точности, и попытаться затем исправить положение. 3. О решении квадратного уравнения. Мы убедплпсь в том, что при численном решении задач на ЗВМ вычислителя ожидают всякие «ловушки», которые могут привести к заметной потере точности результатов или даже к прекращению счета, Хорошей иллюстрацией к этому является анализ алгоритма решения такой простой задачи, как решение квадратного уравнения ах'+ Ьх+ с = О. Его корни определяются соотношениями х. = ' 1, 0 = Ь2 — 4ас. (1Л) Из анализа этих формул видно, что здесь имеется ряд особенностей вычислительного характера, которые необходимо иметь в виду при составлении алгоритма.
Рассмотрим простейший случаи: а =- О. Здесь уравнение становится линейным, и его единственный корень есть х= — с/Ь, если ЬФО. При а,=Ь=О и с~О уравнение не имеет решения, а в случае а = Ь = с = О его решением будет любое число. Заметим, что в машинной арифметике редко получаются точно нулевые значения. Поэтому коэффициенты можно сравнивать не с нулем, а с некоторой малой величиной е. Это в свою очередь порождает ряд ситуаций, зависящих от соотношения между коэффициентами. Далее необходимо предусмотреть разветвление алгоритма в зависимости от знака дискриминанта Й: В >.
О— корпи действительные (см. (1.4) ); Р = Π— корни равные: х, = х, = — Ы (2а); 0 ( Π— корни комплексные: х,, = Л =Ь У, где Л = — Ы(2а), 1 = Ч вЂ” Е)1(2а). Менее очевидным вопросом является возможность появления погрешностей в зависимости от соотношения между коэффициентами уравнения. Рассмотрим один пз важнейших случаев, когда коэффициент Ь значительно превышает по абсолютной величине остальные.
При атом Ь'-' » 4ас и возникает опасность вычитания близких чисел в числителе одного из выражений (1.4) из-за того, что й= 1И. 24 гл. и точность ньтчпслптнльного зкспгипмннтл Положение можно исправить разными способами. Например, при Ь ) 0 формулу для х, можно преобразовать следующим образом: TЮ вЂ” д ~/'Б — ' Ь 2« 2а ~г'Д-,~ д д+ ~,~Б При Ь ( О аналогичным способом можно записать формулу для хо Более универсальным способом является использование значения з1дп Ь'(«знак величины Ь»): 1, Ь)0, з1~п Ъ = Тогда один из корней может быть вычислен по формуле х, = — (Ь+ з1цп Ь Ъ'Г)/(2и), (1.5) Приравнивая свободные члены, получаем х~ = с/(ах,), (1,6) На рпс.
1 представлен один из вариантов блок-схемы алгоритма решения квадратного уравнения с учетом рассмотренных здесь особенностей. При Х~ ) 0 значения корней вычисляются по формулам (1.5), ('1.6). Заметим, что в приведенном иа блок-схеме алгоритме предусмотрены еще не все случаи возможных вычислительных затруднений, которые могут встретиться при решении квадратных уравнений. Можно привести некоторые примеры, когда реализация этого алгоритма па ЭВЦ йевозможна, Примеры.
1. а=10-", Ь вЂ” 3 10-", с 2 10-", При вычислении произведений Ь' и 4ас получается машинный нуль, т. е. 0 0; решение пойдет по ветви разных корней: х, =х, =1,5. Точные значения корней, как нетрудно видеть, равны х~ = 1, х. = 2. 2. а = 10"', Ь = — 3 10", с 2 10"'. -Выражение для вычисления значения второго корня можно получить следующим путем.
Представим квадратное уравнение в виде ах'+ Ьх + с = п (х — х,) (х — х,) = = ах- '— ах (х, + х,) + ах,х, $3. УСТОЙЧИВОСТЬ. КОРРЕКТНОСТЬ. СХОДИМОСТЪ Этот вариант аналогичен предыдущему случаю с той лишь разницей, что вместо получения машинного нуля произойдет переполнение и прерывание счета.
3. а = 10 ', Ь = 10", с = — 10". Это трудный для реализации на ЭВ11 случай. В практических расчетах встречаются уравнения с малым коэффициентом прп х'. В этом случае Ь'»4ас, но при вычислении Ь' произойдет переполнение. Простейшим выходом из этого положения может быть сведение к случаю а = 0 с обязательной проверкой других коэффициентов. Ряс, 1. Блок-схсма решения квадратного уравнения Таким'образом, анализ даже такой задачи, как реше. пие квадратного уравнения, показывает, что использование численного алгоритма может быть сопряжено с некоторыми трудностями.
э 3. Устойчивость. Корректность. Сходпмость 1. Устойчивость. Рассмотрим погрешности исходных данных. Поскольку это так называемые неустранимые погрешности и вычислитель не может с нпмп бороться, то нужно хотя оы иметь представление об пх влиянии на точность окончательных результатов.
Конечно, мы вппа" 'г6 Гл. ь точность ВычислительнОГО экспеРнментА ве надеяться на то, что погрешность результатов имеет порядок погрешности исходных данных. Всегда ли это так? Е сожалению, иет. Некоторые задачи весьма чувствительны к неточностям в исходных данных. Эта чувствительность характеризуется так называемой устойчивостью. Пусть в результате решения задачи по исходному значению величины х находится значение искомой величины у. Если исходная величина имеет абсолютную погрешность Лх, то решение имеет погрешность Лу.
Зада га называется устойчивой по исходному параметру х, если решение у непрерывно от него зависит, т. е. малое приращение исходной величины Лх приводит к малому,приращению искомой величины Лу. Другимн словами, малые погрешности в исходной величине ириводят к малым погрешностям в результате расчетов. Отсутствие устойчивости означает, что даже незначительные погрешности в исходных данных приводят и больгпим погрешностям в решении или вовсе к неверному результату. О подобных неустойчивых задачах также говорят, что они цвствительны к погрешностям исходных данных. Примером такой задачи является отыскание действительных корней многочленов вида (х — а)" = е, 0 < в « 1.
Изменение правой части на величину порядка в приводит к погрешности корней порядка е"". Интересной иллюстрацией неустойчивой задачи является так называемый пример Уилкинсона. Рассматривается многочлен Р (х) = (х — 1) (х — 2)... (х — 20) = х'-' — 210х" -~... Очевидно, что корнями этого многочлена являются х,=1, х,=2, ..., х„=20. Предположим, что один из коэффициентов многочлеиа вычислен с некоторой малой погрешностью. Например, коэффициент — 210 при х" увеличим на2 "(около 10 '). В результате вычислений даже с точностью до 11 значащих цифр получим существенно другие значения корней, Приведем для наглядности эти значения, округленные до трех знаков; х, = 1.00, х, = 8,92, х~ = 2,00, х„„= 10,1 ~ 0.6448, 6 3.
устойчивость. коРРектность. сходпмость 27 х1: 13 = 11.8 ~: 1.оо!, х,,„= 14.0 ~'= 2.52~, хщ „= 16.7 ~ 2.8й, х„„= 19.5 ~ 1.94~, х„= 20.8. х, = 3.00, х, = 4.00,' х,=500, х, = 6.00, х-, = 7.00, х, = 8.01, Таким образом, изменение коэффициента †2 при х" на †2 + 10 ' привело к тому, что половина корней стали комплексными.
Причина такого явления — неустойчивость самой задачи; вычисления выполнялись очень точно (11 разрядов), а погрепшости округлений не моглп принести к таким последствиям. 2. Корректность. Задача называется поставленной корректно, если для любых значений исходных данных из некоторого класса ее решение существует, единственно и устойчиво по исходным данным. Рассмотренные выше примеры неустойчивых задач являются некорректно поставленными. Применять для ретпення таких задач численные методы, как правило, нецелесообразно, поскольку возникающие в расчетах погре1пностн округлений будут сильно возрастать в ходе вычислений, что приведет к значительному искажению результатов, Вместе с тем отметим, что в настоящее время развиты методы решения некоторых некорректных задач.
Это в основном так называемые методы регуляризауии. Они основываются на замене исходной задачи корректно поставленной задачей. Последняя содержит некоторый параметр, при стремлении которого к нулю решение этой задачи переходит в решение исходной задачи. 3. Пеустойчпвость методов. Иногда при решении корректно поставленной задачи может оказаться неустойчивым метод ее решения. Такие случаи имели место в $ 2. В частности, по этой причине при вычислении синуса большого аргумента был получен результат, не имеющий смысла. Рассмотрим еще один пример неустойчивого алгоритма. Построим численный метод вычисления интеграла т Х„= х е' 'дх, п=1,2..., о оЯ ГЛ.
1. тО~ТТТОСТТ ВТ РТТТС.'ТТТТЕЛТгНОГО ЭТ'СНГгТеТТХТЕНта Интегрируя по частям, находим — х — 1~Т Т 1,= "хе Ых=хе ~о — ~ е Ых= —, „1 е~ о о 1 1 1., = ~ хое'" ттх =х'-е' ' ~', — 2 ~ хе'" т/х = — 1 — 21„ ° ° ° ° ° ° е 1 1 Х„= ~ х"е* 'Нх= х'е' '(г — гг ~х" 'е* 'Ых = 1 — х1„ о о Пользуясь Вычисляем 1, 1о 1з 1, 1, полученным рекуррентным соотношением, = 0,367879, = 0.263242, = 0.207274, = ОЛ70904, = ОЛ45480, 1в = ОЛ27120, 1, = ОЛ10160, 1в = О '118720, 1, = — 0,0684800.
Значение интеграла 1, не может быть отрицательным, поскольку подынтегральная Функция х'е" '- на всем отрезке интегрирования [О, Ц неотрицательна. Исследуем источник погрешности. Видим, что округление в 1, дает погреинюсть, равную примерно лпшь 4.4 10 '. Однако . На каждом этапе зта погрешность умножается на число, модуль которого больше единпцы ( — 2, — 3, ..., — 9), что в итоге дает 9!.