MathCAD
d7c8102a

Структура данных


Не спеши выполнять приказ: очень вероятно, что его отменят.

Армейский и деловой фольклор

Вышеприведенная трилингва BASIC-Mathcad-Maple не только поясняет особенности интерфейса при работе в этих средах, но затрагивает и более глубокие пласты. Ахиллесова пята численных методов – это погрешность расчетов. Очень часто даже самая мизерная ошибка вычислений искажает расчет и может свести на нет ценность результата. Символьная компьютерная математика протаскивает через чащу преобразований исходную величину в ее первозданном виде: на рис. 7.21 во всех многоэтажных формулах, как в скорлупе, сидит исходная тройка. «Не спеши выполнять приказ: очень вероятно, что его отменят» – это бюрократическое правило порождает не только волокиту, но и амортизирует неразумные распоряжения начальства и просьбы посетителей. Maple не спешит переводить число в традиционную форму (в вещественное число с плавающей запятой, например) и не попадает в ловушку, подобную той, какая проиллюстрирована на рис. 7.19 и 7.20 (исчезновение тройки). Функция evalf в среде Maple может возвратить значение переменной длиной до 500000 знаков. Но тройку из выражения, хранимого в переменной е, абсолютно безошибочно и сверхбыстро может извлечь («разбить скорлупу») первая и в каком-то в смысле главная функция символьной математики – simplify (упростить). Одним словом: не спеши вычислять – очень вероятно, что это не понадобится[50].

Протоколы на рис. 7.19 и 7.20 – это, в сущности, реализация на компьютере детской игры в испорченный телефон. Игрок а задумывает слово и шепчет его с небольшими искажениями игроку b, тот – игроку c и т.д. Слово по цепочке переходит к последнему игроку, который громко называет то, что услышал от соседа. Игрок a называет исходное слово, и тут раздается хохот – спутник любой игры. Но искажения чисел компьютером вызывают не смех, а слезы. Переход от числа к символу при решении задач на компьютере по значимости можно сравнить с переходом от аналогового к цифровому

способу записи звука и изображения.


Символьная форма хранения числа позволяет решить не только проблему точности, но и проблему экономии памяти компьютера: например, корень из трех, записанный в символьном виде (Ö3), хранит 1,73... (до бесконечности). Программисту при работе с Maple уже не надо ломать голову над выбором типа переменных (одинарная, двойная и прочая точность). Если говорить о сверхточности, обеспечиваемой «длинными» типами переменных, не следует забывать, что природа не любит не только острых углов, но и избыточности. Если решение «разваливается», это может свидетельствовать не только о дефекте в вычислительной процедуре, но и о неправильной исходной модели. Вот еще один диалог, но уже не на Шаболовке, а в музее. Экскурсовод: «Этому экспонату один миллиард и двадцать лет». – Посетитель: «Откуда такая точность?!» – Экскурсовод: «Когда я поступил сюда на работу, мне сказали, что этому экспонату миллиард лет, а с тех пор прошло еще двадцать». Подобной излишней педантичностью страдает и автор: на многих рисунках книги в расчетах оператором «=» выводятся все 15 знаков числа, хотя там достаточно трех-четырех.
Переменные в среде Maple могут хранить (естественно, в символьном виде) все что угодно: константу, выражение, функцию, равенство, неравенство, график, геометрический образ и т.д. Сами же переменные группируются в последовательности (sequence), массивы (array), списки (list), множества (set) и таблицы (table). Элементом массива может быть список, элементом списка – массив и т.д. Комбинируя структуры и создавая новые, пользователь способен моделировать довольно сложные математические абстракции, ограничивая себя лишь своей фантазией и объемом памяти компьютера. По знаменитой формуле Вирта: программа – это алгоритм плюс структура данных. Говоря о Maple, можно сказать, что протокол решения задачи – это умело спроектированная структура символьных данных, процеженных сквозь сито функций и команд. В Maple встроен fortran-подобный язык, позволяющий реализовывать сложные алгоритмы, но к программированию прибегают в особых случаях – Maple и Mathcad задумывались как средства программирования без программирования (в те времена слова «работа на компьютере» и «программирование» были почти синонимами). К программированию и в среде Maple, и в среде Mathcad прибегают в тех случаях, когда для решения задач не хватает встроенных средств (см. этюд 6).
Существует ошибочный взгляд на компьютерную символьную математику как на вычислительную математику без погрешностей и ошибок. Пример, приведенный на рис. 7.22, опровергает это мнение[51].

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