URSS.ru Магазин научной книги
Обложка Вабищевич П.Н. Вычислительные технологии: Базовый уровень Обложка Вабищевич П.Н. Вычислительные технологии: Базовый уровень
Id: 220315
770 р.

Вычислительные технологии:
Базовый уровень

2017. 272 с.
Типографская бумага
Алгоритмический язык C • Элементы языка C++ • GCC компиляторы • Работа с Eclipse • Научная библиотека GSL • Визуализация расчетных данных • Численное моделирование.

Аннотация

Основным объектом исследования при научных и инженерных вычислениях являются краевые задачи для систем нелинейных, многомерных, нестационарных уравнений с частными производными. Применяются те или иные аппроксимации по времени и по пространству. После дискретизации для приближенного решения систем нелинейных алгебраических уравнений используются итерационные методы. Ядром вычислительных алгоритмов являются методы решения больших разреженных систем... (Подробнее)


Оглавление
top
Предисловие
Введение
Алгоритмический язык C
 1.1 Лексика
 1.2 Константы и переменные
 1.3 Выражения и операции
 1.4 Операторы
 1.5 Массивы
 1.6 Указатели
 1.7 Функции
 1.8 Структуры
 1.9 Ввод/вывод
 1.10 Программы на С
Элементы языка C++
 2.1 Расширенные возможности языка С++
 2.2 Классы
 2.3 Перегрузка функций и операторов
 2.4 Наследование
 2.5 Ввод/вывод в С++
 2.6 Стандартные библиотеки
GCC компиляторы
 3.1 Общая информация
 3.2 Помощь по GCC
 3.3 Работа компилятора
 3.4 Компиляция программ
 3.5 Компоновка программ, библиотеки
 3.6 Отладка программ
 3.7 Утилита make
Работа с Eclipse
 4.1 Среда разработки
 4.2 Работа с проектом
 4.3 Редактор Eclipse
 4.4 Отладка приложения
Научная библиотека GSL
 5.1 Общая информация
 5.2 Функции и константы
 5.3 Комбинаторика
 5.4 Линейная алгебра
 5.5 Численное дифференцирование и интегрирование
 5.6 Задача Коши для систем обыкновенных дифференциальных уравнений
 5.7 Решение уравнений
 5.8 Интерполяция и приближение функций
 5.9 Быстрое преобразование Фурье и приближения Чебышева
Визуализация расчетных данных
 6.1 Основы gnuplot
 6.2 Работа с данными
 6.3 Интерполяция данных
 6.4 Использование стилей
 6.5 Оформление графика
Численное моделирование
 7.1 Аппроксимация экспериментальных данных
 7.2 Моделирование системы хищник-жертва
 7.3 Просачивание воды в грунт
 7.4 Кручение цилиндрических стержней
Список литературы

Предисловие
top

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

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

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

Программное обеспечение научных и инженерных исследований в значительной степени базируется на сторонних разработках. На основе модульного анализа прикладной математической модели выделяются базовые вычислительные задачи, организуется алгоритмический интерфейс между ними. Вычислительная реализация выделенных отдельных подзадач проводится с использованием стандартизованных вычислительных компонент. Компонентный подход может использоваться также при подготовке расчетной задачи (препроцессинге), при обработке и визуализации расчетных данных (постпроцессинг). Компонентное программирование тем более уместно при разработке самого программного продукта, например, с использованием компонент пользовательского графического интерфейса – компоненты GUI (Graphical User Interface).

Разработка прикладного программного обеспечения проводится на основе определенных стандартов и соглашений. Это касается, в частности, языка программирования. Достаточно долго программирование при проведении научных и инженерных вычислений проводилось с использованием алгоритмического языка Fortran. Его основное преимущество состоит в наличии большого количество написанных на нñм программ и библиотек подпрограмм, которые чаще всего доступны в исходных кодах и хорошо документированы. В настоящее время ситуация меняется в пользу других языков программирования, прежде всего C и C++. Новые вычислительные библиотеки, отдельные компоненты пишутся обычно на C/C++, имеющееся хорошо зарекомендовавшееся прикладное программное обеспечение переписывается с языка Fortran.

В исследовательских работах мы традиционно ориентируемся на использование свободного программного обеспечения (СПО). Особенно уместно использование СПО в учебном процессе. Естественная, с нашей точки зрения, бизнес-модель с оплатой учебному заведению услуг по обучению пользователей проприетарного программного обеспечения не очень широко распространена и практически не приветствуется основными игроками на рынке платного программного продукта. Второе требование касается кроссплатформенности, когда программное обеспечение должно работать более чем на одной аппаратной платформе и/или операционной системе. Кроссплатформенными должны быть используемые языки программирования (компиляторы для языка под различные платформы), библиотеки (компоненты) и прикладное программное обеспечение.

Еще один важный момент связан с многопроцессорностью вычислительной техники. Разработка прикладного программного продукта для многопроцессорных систем с общей памятью (многоядерные компьютеры) базируется на использовании OpenMP. Для систем с распределенной памятью (кластеры) де-юре стандартом программирования стал MPI. Основные особенности прикладных задач, которые описываются уравнениями с частными производными и решаются на параллельных компьютерах, учитываются библиотекой PETSc.

Приведенные соображения определили структуру книги, ее общую направленность на создание современного прикладного программного продукта. Дается описание основных технологических элементов современных вычислительных технологий с использованием алгоритмических языков C/C++. Мы ориентируемся на компиляторы и библиотеки GNU (GNU's Not UNIX), свободное программное обеспечение для решения задач вычислительной математики и визуализации расчетов. Сам набор используемых средств разработки в других условиях мог бы быть и несколько другим, однако это никак не изменяет общей направленности. Вопросы приближенного решения прикладных проблем на параллельных вычислительных системах обсуждаются в отдельной работе.

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

П.Н.Вабищевич
Москва, Якутск, ноябрь 2016 г.

Введение
top

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

Язык программирования C++ произошел от C. Большая часть подмножества C в C++ не изменена и поэтому программы научных и инженерных вычислений на языке C обычно нормально компилируются на компиляторах C++. Принципиальным является то, что язык C основан на концепции структурного программирования, а язык C++ является полностью объектно-ориентированным. Язык C++ предоставляет гибкие и эффективные средства определения новых типов (классов). Классы обеспечивают скрытие данных, динамическое задание типов, возможности управления памятью и перегрузку операций.

Для перевода программы с языка C/C++ в машинный код используется набор компиляторов GCC (GNU Compiler Collection). GCC является свободным программным обеспечением, распространяется фондом свободного программного обеспечения (FSF, Free Software Foundation). Этот компилятор является стандартным не только для свободных Unix-подобных операционных систем, но и для некоторых проприетарных операционных систем. Рассмотрены вопросы компиляции и компоновки программ, их отладки с помощью GNU Debugger.

Разработка программного обеспечения проводится с использованием интегрированной среды разработки (IDE, Integrated development environment). Одной из наиболее популярных свободных IDE является Eclipse. Дается краткое описание среды разработки, ее использование при работе с проектом. Отмечаются основные возможности по редактированию кода, компиляции, отладке и сборке приложения.

При проведении инженерных и научных вычислений широко используется библиотека GSL (GNU Scientific Library). Эта библиотека написана на языке программирования C и является частью проекта GNU. С ее помощью, в частности, решаются стандартные задачи вычислительной математики: работа с векторами и матрицами, задачи линейной алгебры, решение нелинейных уравнений, численное дифференцирование и интегрирование, интерполирование, задачи с начальными данными для обыкновенных дифференциальных уравнений.

При численном решении прикладных проблем особое внимание уделяется анализу результатов. В частности, используются средства визуализации расчетных данных. Для представления одномерных и двумерных функций используется gnuplot. Это программное обеспечение базируется на собственной системе команд, поддерживается интерактивная работа в режиме командной строки. Вторая возможность связана с выполнением скриптов при чтении их из файлов. Имеется возможность вывода графических данных на дисплей, графики могут быть записаны в файл в общеупотребительных графических форматах (в частности, в PNG, EPS).

Базовые возможности рассматриваемых нами вычислительных технологий проиллюстрированы на решении модельных задач. Их численное решение начинается с постановки задачи, далее выбирается вычислительный алгоритм для ее исследования. Программная реализация базируется на использовании алгоритмического языка C/C++ и стандартного математического обеспечения (библиотеки GSL). Для визуализации расчетов, приготовления графического материала применяется программа gnuplot.


О редакторе
top
photoВабищевич Петр Николаевич
Доктор физико-математических наук, профессор. Специалист в области вычислительной математики и математического моделирования. Работает в Московском государственном университете имени М. В. Ломоносова и Северо-Восточном федеральном университете имени М. К. Аммосова (г. Якутск). П. Н. Вабищевич разработал новые эффективные вычислительные алгоритмы для численного решения многомерных задач математической физики, внёс большой вклад в разработку методов численного решения обратных задач математической физики. Созданные им методы применяются при решении прикладных проблем механики сплошной среды, тепло- и массопереноса. Автор более 300 научных работ, в том числе нескольких монографий и учебных пособий, обладатель более 10 патентов РФ.