emnip: (Default)
Иоганн Вольфгангович Корнцанг ([personal profile] emnip) wrote2013-11-26 04:42 am

ВОЛЧЬИ ЯМЫ ОКРУГЛЕНИЯ

Американский математик Уилкинсон (*) исследовал уравнение (x-1)(x-2)(x-3)...(x-20)=x^20-210x^19+...+20!=0
Он заменил коэффициент -210 на -(210+2^-23), т.е. величил его примерно на 10^-7. Ни один из корней нового уравнения не был близок к корням 11, 13, 15 старого, причем среди них оказались и комплексные корни.

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

Наиболее опасной в смысле потери точности является вычитание близких друг к другу чисел. Попробуем вычислить на микрокалькуляторе e^-10 согласно разложению
e^-10=1-10+10^2/2!-10^3/3!+...
Вместо истинного результата 0,0000454 получается 0,0001112 - число, в 2,5 раза большее. Откуда жэ набижала погрешность? Покуда в слагаемых ряда рост факториала в знаменателе обгонит рост степени в числителе, они возрастают до десятого включительно, принимая значения, превышающие 2000. А так как счет ведется только до восьми значащих цифр, то ответ получается с точностью лишь до 0,0001. Вот и набегают ошибки, значительно превосходящие искомый ответ. Чтобы получить верный результат, надо записать e^-10 в виде 1/е^10, разложить знаменатель этой дроби в ряд
e^10=1+10+10^2/2!+10^3/3!+...
и затем от найденной суммы ряда взять обратную величину.

Разумеется, нет смысла считать е^-10 на калькуляторе, имеющим клавишу e^x. Но ведь иногда приходится вычислять значения и более экзотических функций, скажем, беселевой или гипергеометрической, используя опять таки степенные ряды, где подстерегают "волчьи ямы" округления.

Ошибки, вызванные вычитанием мало отличающихся друг ото друга чисел, могут возникнуть и при такой простой операции, как нахождение корней квадратного уравнения x=-b+(-)sqrt(b^2-4ac). Если b^2 значительно превосходит 4ac, то в числителе формулы приходится вычитать именно такие числа. Например, решая на микрокалькуляторе уравнение x^2-10^5x+1=0, вместо одного из корней 0,0000100 мы получим нуль. Это уже никуда не годится.

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


Н. Виленкин, Москва. НиЖ 1985 №12

Виленкин - это, наверно, Н.Я. Виленкин, известный популяризатор математики. Напр., книга "Расказы о множествах", с прекрасными иллюстрациями, например -



_____
* Нашол эту-вот книжку Уилкинсона -

Uilkinson Dzh.X. (_Wilkinson_) Algebraicheskaya problema sobstvennyx znachenij (Nauka, 1970)(ru)(K)(600dpi)(T)(564s)_MAl_.djvu

на 18-м колхозном ДВД, и пытаюсь её теперь осилить, т.к. столкнулся с тем же самым. Ладно, у него там 20-я степень, там всё что угодно может быть, но когда джва кубических уравнения - ( корни одного входят в коэффициенты другого - и причем коэффициенты вот эти все в районе единицы, и для чисел двойной точности) - в виде корней второго дают бесмысленный результат, отличающийся в разы ... (да-да, вычитание близких чисел в дискриминанте и т.д.)

Post a comment in response:

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting