Иллюстрированный самоучитель по Mathematica

         

Недостатки численных расчетов


Большинство первых CKM (Eureka, Mercury, Excel, Lotus-123, Mathcad для MS-DOS, PC MATLAB и др.) предназначались для численных расчетов. Они как бы превращали компьютер в большой программируемый калькулятор, способный быстро и автоматически (по введенной программе) выполнять арифметические и логические операции над числами или массивами чисел. Их результат всегда конкретен — это или число, или набор чисел, представляющих таблицы, матрицы или точки графиков. Разумеется, компьютер позволяет выполнять такие вычисления с немыслимой ранее скоростью, педантичностью и даже точностью, выводя результаты в виде хорошо оформленных таблиц или графиков.

Однако результаты вычислений редко бывают абсолютно точными в математическом смысле: как правило, при операциях с вещественными числами происходит их округление, обусловленное принципиальным ограничением разрядной сетки компьютера при хранении чисел в памяти. Реализация большинства численных методов (например, решения нелинейных или дифференциальных уравнений) также базируется на заведомо приближенных алгоритмах. Часто из-за накопления погрешностей эти методы теряют вычислительную устойчивость и расходятся, давая неверные решения или даже ведя к полному краху работы вычислительной системы — вплоть до злополучного «зависания».

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


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



Понятие о символьных (аналитических) вычислениях

Символьные операции — это как раз то, что кардинально отличает систему Mathematica (и подобные ей символьные математические системы) от систем для выполнения численных расчетов. При символьных операциях, называемых также аналитическими, задания на вычисление составляются в виде символьных (формульных) выражений, и результаты вычислений также получаются в символьном виде. Численные результаты при этом являются частными случаями символьных.

Выражения, представленные в символьном виде, отличаются высокой степенью общности. К примеру, тождество sin(x) 2 + соs(x) 2 = 1 справедливо при любых значениях аргумента х. Если результат символьной операции равен, к примеру, sin(1), то он и будет выведен как sin(1) — конкретное вещественное число, приближенно представляющее или аппроксимирующее sin(1), вычисляться не будет, ибо носит частный характер.

Результат вычисления sin(х) 2 + cos(x) 2 можно проверить с помощью систем для численных расчетов, задав ряд конкретных значений х и вычислив сумму квадратов синуса и косинуса. Однако всякий раз мы будем получать частный результат, не имея никакой гарантии того, что он действительно справедлив при любом значении х. К тому же этот результат нередко может оказаться равным 0,9999999 или 1,0000001, так что лишь наша фантазия округляет его до точной единицы.Между тем это как раз то, что абсолютно недопустимо в действиях профессионала — математика-аналитика. Его приведет в ужас малейшее отличие указанного выражения от единицы! Ведь почтенные классики математики давно уже доказали, что этот результат равен в точности единице!

Так чему равна сумма квадратов синуса и косинуса?

Попытка вычислить в общем виде выражение sin(x) 2 + соs(x) 2 с помощью численных математических систем или программ на обычных языках программирования к успеху не приведет. Вместо ожидаемого результата появится сообщение об ошибке вида: «Переменная х не определена!». Компьютер будет ждать ввода конкретного значения для х.Так будет независимо от того, запрограммировали вы вычисления на простеньком Бейсике или на языке профессионалов-программистов C++. И лишь системы символьной математики при вычислениях дадут долгожданное и абсолютно точное значение 1 (рис. 1. 3)

Содержание раздела