MathCAD

       

Задача маленького Гаусса


Пакет Mathcad с выключенным режимом оптимизации (умолчание), столкнувшись с суммированием, начнет по примеру нормальных (талант – это аномалия) одноклассников Гаусса прибавлять к единице двойку и т.д.: 1+2+3+4+5+...+100. В среде Mathcad мы тоже можем написать такое длинное выражение, но проще воспользоваться оператором суммирования – см. рис. 7.14. Если в примере на рис. 7.14 увеличить значение n до миллиона, например, то время счета станет неприемлемо долгим. Если это не суммирование, а интегрирование (в руководстве пользователя Mathcad приведен пример с тройным интегралом), то это сути дела не меняет: пакет Mathcad будет по-прежнему что-то там долго и упорно суммировать[36], опираясь на соответствующий численный метод (прямоугольников, трапеций, парабол и т.д.[37]). Такие расчеты можно и нужно оптимизировать. В конце рис. 7.14 получена простая формула, которой можно заменить сумму членов натурального ряда: (n2+n)/2. Если включить режим оптимизации (переключателем Optimize в меню Math –см. рис. 7.14), то пакет Mathcad будет пытаться во всех выражениях искать упрощающие формулы и работать уже с ними, а не с исходными выражениями. Это будет глобальная оптимизация. Возможна и «точечная», локальная оптимизация, когда упрощающая формула ищется только для отдельных выражений. Для этого правой кнопкой мыши вызывается локальное меню с командами, применимыми к математическому выражению, а через него вызывается диалоговое окно свойств выражения Properties[38]. В этом окне у позиции Enable Optimization (возможность оптимизации) ставится флажок[39]. Включенный тем или иным способом режим оптимизации суммы (произведения, интеграла, дифференциала – всего, что можно заменить более простой формулой, – см. первые страницы справочников по высшей математике) заставляет систему Mathcad вспомнить о лаврах Гаусса и отказаться от лобовой атаки. Если более оптимальное решение найдено (его поиск отображается мерцанием на экране докторской четырехуголки – признак того, что работает символьная математика), то правее выражения появляется красная шестиугольная звезда[40]. Свершилось чудо – машина стала считать не только быстрее, но и умнее. Пользователь может просмотреть не только численный результат, но и аналитическое выражение, упростившее расчеты (заменившее собой сумму). Оно заносится в специальный буфер, отображаемый на дисплее командой Show Popup в локальном меню или щелчком по красной звездочке.


Программисты могут здесь вспомнить оптимизирующие компиляторы, вмешивающиеся не только в кодирование алгоритма, но и в упрощение формул. Ввел программист строку S := (A * A - B * B) / (A - B), нажал Enter, а на экране – S := A + B.
Оптимизация в задаче маленького Гаусса – это стрельба из пушки по воробьям: отрезок суммируемого ряда надо значительно увеличить, «чтобы почувствовать разницу» во времени счета. При каком значении n такая оптимизация оправдана – это новая оптимизационная задача: оптимизация, так сказать, в квадрате. Оставим ее для студенческих лабораторных работ, а сами стрельнем из пушки не по воробьям, а по... двум зайцам и покажем, что в ряде случаев оптимизация не только ускоряет расчеты, но и повышает их точность. Скажем осторожнее – влияет на точность. И не только количественно, но и качественно – за счет исправления методологических
ошибок (промахов) численных методов и их конкретных оптимизаций в среде Mathcad.
Упоминавшийся пример оптимизации интеграла из документации к пакету Mathcad тривиален – ясно, что криволинейная трапеция (сам интеграл) и набор маленьких вписанных прямоугольников (приближение к интегралу) никогда не сравняются по площади. А вот более сложный пример (рис. 7.15), показывающий двойственность процесса оптимизации.

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