Вы многое найдете научных вычислениях могут понадобиться инструменты, которые не представлены в рассмотренном пакете SciPy или же возможности модулей этого пакета окажутся недостаточными. Прежде чем программировать что-то свое (программу на языке Python, включение сторонних программ на других язы- ках) нужно посмотреть, кто и как подобные задачи уже решал.
Поиски во всемирной сети уместно начать с репозитария пакетов Python43. Вторая общая возможность связана с тенденцией обеспечения интерфейса на языке Python к прикладному программному, написанному на других языках программирования. Поэтому нужно обратиться к ресурсам по интересующему вас программному обеспечению. Здесь мы отметим некоторые пакеты Python, которые расширяют возможности SciPy44 прежде всего по решению задач вычислительной математики.
Начнем мы с систем аналитических вычислений, которые традиционно хорошо представлены в таких общих математический инструментах, как пакет прикладных программ для решения задач технических вычислений MAT- LAB45, программа для выполнения и документирования инженерных и научных расчётов Mat head46, системы компьютерной алгебры Mathematica47 и Maple48. Наиболее полная поддержка символьных вычислений обеспечивается Sage49. Этот программный продукт позиционируется как свободно-программная альтернатива тех же Maple, Mathematica и MATLAB. Для иллюстрации поддержки символьных вычислений при работе на Python мы ограничимся возможностями пакета SymPy.
В пакете SciPy мы выделили модуль optimize, в котором решаются нелинейные уравнения и минимизируются функции. Более широкие возможности по задачам оптимизации предоставляет специализированный пакет OpenOpt50. Помимо всего в этом пакете реализован интерфейс с другими программными продуктами решения задач оптимизации. В частности, к пакету решения задач выпуклой оптимизации CVXOPT51.
При численном решении задачи Коши для системы обыкновенных дифференциальных уравнений использовался модуль integrate пакета SciPy. Дополнительные возможности работы с такими математическими объектами предоставляет пакет Model Builder52. С использованием графической оболочки строятся математические модели, находиться численное решение и ви- дуализируются данные расчетов. Пакет PyDDE53позволяет найти решение систем обыкновенных дифференциальных уравнений с запаздыванием.
Для научных вычислений и прикладных исследований наибольший интерес представляют программные продукты, которые предназначены для решения краевых задач для уравнений с частными производными. В настоящее время необходимо ориентироваться на приближенное решение многомерных нелинейных задач в нерегулярных расчетных областях. В силу этого необходимо иметь возможность подготовки входных данных (область, уравнения, граничные условия), генерации расчетной сетки, аппроксимации (построения дискретной задачи), решения дискретных задач, обработки и визуализации расчетных данных.
Для подготовки сложных трехмерных геометрических моделей (расчетной области) используются CAD инструменты. Среди свободного программного обеспечения упомянем набор библиотек и программного обеспечения для 3D моделирования Open CASCADE54. На ее основе строятся многие как платные, так и бесплатные программные продукты. Отметим в этой связи открытую интегрируемую платформу для численного моделирования SALOME55. На основе Open CASCADE реализована Python 3D CAD библиотека pythonOCC56. При численном решении задач математической физики используются регулярные и нерегулярные (структурированные, блочно-структурированные и неструктурированные) сетки. Сеточные генераторы являются важной составной частью любого программного продукта, ориентированного на решение задач для уравнений с частными производными и они включены в общие инструменты численного моделирования. Среди пакетов Pethon, которые ориентированы на подготовку расчетных сеток, отметим Mesh Ру57Имеется возможность строить 2D и 3D неструктурированные сетки на основе разбиения Вороного (триангуляция Делоне).
Особое внимание уделяется программным продуктам для решения дискретных задач. При решении многомерных задач мы должны учитывать основную специфику таких проблем, которая связана прежде всего с разреженной структурой расчетных данных. Мы упоминали выше о модуле sparse в пакете SciPy, который даст инструменты для работы с разреженными матрицами. В част ности, в модою sparse.linalg представлены функции для решения систем уравнений с такими матрицами. Аналогичные возможности предоставляет пакет Pysparse58. Из других пакетов линейной алгебры, ориентированных на численное решение задач математической физики, стоит упомянуть pyAMG59, в котором реализован алгебраический многосеточный итерационный метод для решения сеточных задач.
Для решения задач большой размерности необходимо использовать компьютеры с параллельной архитектурой. Разработка программного обеспечения для решения задач на таких вычислительных многопроцессорных и/или многоядерных комплексах базируется на тех или иных алгоритмах распределенных вычислений. Среди специализированных инструментов Python можно отметить паке]' mpi4py60, который обеспечивает поддержку MPI (Message passing Interface) стандарт для многопроцессорных систем. Для разбиения задачи на подзадачи используется пакет PyMetis61. Среди общих инструментов прикладного численного анализа отметим коллекцию библиотек Trilinos62. В настоящее время пакет PyTrilinos63обеспечивает интерфейс на языке Python к отдельным библиотекам этой коллекции. Пакет PySUNDIALS64дает возможность работы с другой популярной коллекцией программного обеспечения численного анализа SUNDIALS65 (SUite of Nonlinear and Dlfferential/ALgebraic equation Solvers). В этой связи отметим, что предоставление интерфейса для работы на языке Python разрабатываемому прикладному программному обеспечению является общей тенденцией.
При проведении научных вычислений отдельного обсуждения заслуживает проблема визуализации расчетных данных. Особенно это актуально при оперировании с большими массивами данных на компьютерах параллельной архитектуры. Для большинства случаев может быть достаточно возможностей графической библиотеки Matplotlib, которая достаточно подробно обсуждалась нами выше, и им подобным (Gnuplot, DISLIN, Chaco). Для научной визуализации трехмерных данных (скаляров, векторов) можно ориентироваться на более мощные инструменты, такие, например, как Mayavi266и Visualization Toolkit (VTK)67. Вторая возможность связана с записью расчетных данных в надлежащем формате и использованию сторонних программных продуктов для их визуализации. Хорошим примером программы визуализации данных расчетов является ParaView68, — свободно распространяемая программа с открытым кодом для параллельной и интерактивной научной визуализации.
Имеется ряд интегрированных программных продуктов, которые обеспечивают численное решение краевых задач для уравнений с частными производными. Так например, DOLFIN69обеспечивает интерфейс на языке Python для коллекции свободных программных продуктов FEniCS70— инструменты для работы с сетками, конечно-элементными аппроксимациями уравнений с частными производными и решения дискретных задач. В качестве второго примера программного инструментария для решения многомерных целиной- ных задач на основе метода конечных элементов отметим Escript71. В пакете FiPy72для решения стационарных и нестационарных задач математической физики применяется метод конечных объемов.
При разработке современных программных продуктов большое внимание уделяется графическому интерфейсу пользователя. На этот элемент программирования при проведении научных расчетов практически часто не обращается внимания. Однако совсем отказываться от удобств, который предоставляет GUI (Graphical user interface) вряд ли целесообразно. На примере пакета form layout мы проиллюстрируем разработку программ на языке Python с минимальным графическим интерактивным вводом параметров.