Джинчвелашвили Г.А.
Использование пакетов компьютерной математики в научных и алгебраических вычислениях.
На вашем столе стоит (или скоро будет стоять) персональный компьютер, имеющий массу умных программ. Вам лишь предстоит нажимать
на кнопки, и большую часть задач, которые возникнут в вашей практической деятельности, решит «сам» умный компьютер.
Творческий инженер не ограничится «кнопочными алгоритмами». Он ДОЛЖЕН знать, как ЭТО делается. В противном случае он
перестает быть инженером и станет заложником компьютера.
Появление компьютеров изменило все сферы современной науки и общественной, и даже личной, жизни. Появилась возможность проводить сложнейшие вычислительные
эксперименты, что экономит не только деньги, но и время. Последнее обстоятельство особенно важно для научных работников, педагогов и студентов. Однако в нашей стране именно в области образования применение
современных компьютерных методов и систем оставляет желать лучшего. Частично это связано с объективными причинами (дороговизна оборудования, программных продуктов и т. д.), однако очень часто и с
субъективными — нежеланием что-либо менять, поскольку наше образование и так «самое лучшее в мире».
Между тем появление современных систем компьютерной математики позволяет, не отказываясь от принципов фундаментальности классического образования,
качественно изменить подходы и методы изложения материала, сделать его более наглядным и доступным, а следовательно, более интересным и привлекательным для основной массы обучающихся.
Сегодня нечасто вспоминают о том, что компьютеры были созданы в первую очередь для проведения научных расчетов. Очень скоро начали доминировать
приложения к задачам управления. Однако научные приложения остаются наиболее важными, особенно если взглянуть на требуемую производительность компьютера: наиболее мощные компьютеры обычно
предназначаются для научных исследований.
До сих пор научные и инженерные расчеты остаются одной из важнейших, хотя, пожалуй, и не самой бросающейся в глаза сфер приложения компьютеров. За многие
годы накоплены обширные библиотеки научных подпрограмм, в первую очередь, на языке FORTRAN, предназначенных для решения типовых задач (задачи линейной алгебры, интегрирование, решение дифференциальных
уравнений и т. д.).
В настоящее время появились хорошо работающие системы такие как Maple, Mathematica,
Mathcad, Matlab, Derive и некоторые другие. Все упомянутые выше системы, так же как и большинство неупомянутых, являются весьма дружественными по отношению к пользователю. Конечно же и
синтаксис языка пользователя у них различный, и библиотеки доступных функций могут меняться от нескольких сотен до тысяч, и внутренние структуры и даже используемые алгоритмы значительно отличаются друг
от друга, но все они обладают общими свойствами. Таких принципиальных общих свойств значительно больше, чем различий и, таким образом, после освоения одной из систем компьютерной алгебры переход к другой
системе не является сложной проблемой.
Разработка, развитие и даже использование этих систем постепенно выделились в автономную научную дисциплину, относящуюся, очевидно, к информатике. Ее
цели лежат в области искусственного интеллекта, несмотря на то, что методы все более и более удаляются от нее. Кроме того, используемые алгоритмы вводят в действие все более менее элементарные
математические средства. Таким образом, эта дисциплина лежит на стыке нескольких областей, что одновременно обогащает ее и делает более трудной в исследовательском плане.
Для новичка языки систем компьютерной алгебры – одни из наиболее простых для использования. Действительно,
сначала ему требуется знать лишь несколько функций, которые позволят ему переписать рассматриваемую проблему в виде, очень похожем на ее математическую формулировку. Даже если переписывание выполняется
неуклюже или некорректно, интерактивный режим позволяет после нескольких шагов наощупь быстро получить результаты, которые нельзя получить с помощью карандаша и бумаги. А для очень многих приложений этого
достаточно.
Пакет Mathematica, по-видимому, является сегодня наиболее популярным в научных кругах, особенно среди теоретиков. Пакет предоставляет широкие
возможности в проведении символических (аналитических) преобразований, однако требует значительных ресурсов компьютера. Система команд пакета во многом напоминает какой-то язык программирования,
Пакет Maple также весьма популярен в научных кругах. Пользователи характеризуют Maple как очень надежный и устойчиво работающий Пакет. Кроме
аналитических преобразований пакет в состоянии решать задачи численно. Характерной особенностью пакета является то, что ряд других программных продуктов используют интегрированный символический
процессор Maple.
Подобно упомянутым выше пакетам, пакет Matlab фактически представляет собой своеобразный язык программирования высокого уровня, ориентированный на
решение научных задач. Характерной особенностью пакета является то, что он позволяет сохранять документы в формате языка программирования С.
Пакет Mathcad популярен, пожалуй, более в инженерной, чем в научной среде. Характерной особенностью пакета является использование привычных
стандартных математических обозначений, то есть документ на экране выглядит точно так же обычный математический расчет. Для использования пакета не требуется изучать какую-либо систему команд, как,
например, в случае пакетов Mathematica или Maple. Пакет ориентирован в первую очередь на проведение численных расчетов, но имеет встроенный символический процессор Maple, что позволяет выполнять
аналитические преобразования. В последних версиях предусмотрена возможность создавать связки документов Mathcad с документами Matlab. В отличие от упомянутых выше пакетов, Mathcad является средой визуального
программирования, то есть не требует знания специфического набора команд. Простота освоения пакета, дружественный интерфейс, относительная непритязательность к возможностям компьютера явились главными
причинами того, что именно этот пакет был выбран для обучения студентов численным методам.
Однако, в отличии от языка программирования типа FORTRAN, в котором синтаксические тонкости требуют тщательного изучения, в то
время как принципы работы компилятора можно полностью игнорировать, здесь пользователь должен очень быстро разобраться, "как это работает", в частности, как представляются и обрабатываются данные.
В действительности, хотя обычно трудно предсказать время вычисления и размер результатов, знание принципов работы может дать
представление о порядке их величины и при необходимости оптимизировать их. Эти оценки в действительности существенны: для большинства алгебраических вычислений результаты получаются почти моментально, и
все идет отлично. Но если это не так, то требуемое время и память возрастают обычно экспоненциально. Таким образом, выполнимость данных вычислений не всегда очевидна, и глупо жертвовать значительными
ресурсами, когда неудачу можно предсказать заранее. Например, если требуется найти собственные значения матрицы, то для программы на яыке FORTRAN нет принципиальной разницы 100x100 или 500x500 эта матрица,
так как время выполнения растет практически линейно. В Maple V.4 вычисления с матрицей 5x5 могут занимать 15 секунд, в то время как те же вычисления с матрицей 6x6 займут 15
минут.
Поэтому владение эффективным стилем программирования и способность предвидеть размер вычислений являются здесь значительно более весомыми, чем в
численных расчетах, где возрастание обычно бывает линейным. К сожалению, это в значительной степени приобретается с опытом и трудно передается с помощью учебника.
В последнее время просматривается тенденция к сближению и интеграции различных пакетов. Например, последние выпуски пакетов Mathematica и Maple имеют
хорошие возможности для визуального программирования; в Matlab включена библиотека аналитических преобразований Maple; Mathcad позволяет работать совместно с Matlab.
К сожалению, существует настоящая пропасть между теми численными методами, которые описаны в общедоступных учебниках, и теми, которые применяются на
практике, В замечательной, хотя и недоступной для большинства студентов книге «Numerical Recipes in C», авторы замечают: «Увы, времена меняются; ... классические формулы почти абсолютно бесполезны. Они являются
музейными экспонатами, хотя и прекрасными», В данной статье делается попытка перебросить мостик через эту пропасть.
Обычно, начиная работать с любой из систем символьных вычислений, пользователь достаточно легко решает небольшие и несложные
примеры и задачи из учебника. Однако, приступая к решению настоящих задач, пользователь сталкивается с рядом проблем: то компьютер слишком долго считает, то не хватает памяти, то в ответе получается формула
на 5-10 страниц, а то машина выдает и вообще неправильный ответ. После этого встает вопрос - "Стоит ли тратить время на детальное изучение таких "игрушечных" систем и не лучше ли потратить это время на
написание самих формул?".
Бездумное применение пользователем систем компьютерной математики таит в себе большие проблемы.
Например, пакет Maple испытывает затруднения при вычислении уже простых радикалов с рациональными степенями от отрицательных
значений, если знаменатель показателя является нечетным числом. В этом случае даже функция evalf оказывается бессильной, что хорошо иллюстрируют следующие весьма простые примеры:
> evalf((-8)^(1/3)), evalf((-8)^(4/3)), evalf(-8^(4/3)); Þ 1.000000+1.732051*I, -8.000000 -13.85641*I, -16.00000
> evalf((8)^(1/3)), evalf(8^(1/3)); Þ 2.000000, 2.000000
Аналогичные затруднения испытывает пакет Mathcad:
.
Неискушенному читателю сразу заметна некорректная работа этих пакетов. А вот более «тонкий» пример.
Пусть в Пакете Mathcad решается задача Коши для ОДУ, широко используемого в приложениях , при следующих начальных условиях:
, , где , , c, круговая частота рад/с.
Имеем:
Увеличим теперь круговую частоту в три раза рад/с. Решим ту же задачу. Тогда:
Представим теперь полученные решения на одном графике (см. рис.1). Видно, что во втором случае решение получилось неустойчивым.
Рис.1.
Причина неустойчивости состоит в том, что в команде Odesolve реализована явная схема, не учитывающая «жесткости» системы.
Рассматривая более устойчивую разностную схему можно убедиться, что решение вполне корректное (см. рис. 2).
Рис.2.
В заключение, отметим, что пользователь пакетов компьютерной математики должен
иметь представление об основных численных методах. Вообще говоря, появление современных вычислительных систем значительно облегчает доступ к компьютеру непрофессионалам в области программирования, и
поддерживает постоянное стремление к их усовершенствованию и освоению новых компьютерных технологий.