Численное программирование это


Вычисление, в смысле выполнения математических вычислений. — это навык. Который человечество развило за тысячи лет. Программирование. С другой стороны. Находится в зачаточном состоянии. С историей. Которая охватывает только несколько десятилетий. Обе темы чрезвычайно обширны и обычно преподаются как отдельные предметы в учебных заведениях по всему миру. Особенно на уровне бакалавриата. Эта книга о сочетании этих двух. Потому что вычисления сегодня становятся намного более мощными в сочетании с программированием.

Большинство университетов и колледжей неявно требуют. Чтобы студенты специализировались на компьютерных науках. Если они хотят научиться ремеслу программирования. Поскольку другие студенческие программы. Как правило. Не предлагают программирование в той степени. Которая требуется для реального овладения этим ремеслом. Общие аргументы утверждают. Что этого достаточно с кратким введением. Что не хватает места для изучения программирования в дополнение ко всем другим обязательным предметам. И что существует так много программного обеспечения. Что мало кому действительно нужно программировать себя.

Следствием этого является то. Что студенты инженерных специальностей часто заканчивают обучение с незначительными знаниями о программировании. Если только они не выбрали направление информатики.

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

Зачем изучать программирование?

  1. Готовое программное обеспечение ограничивается обработкой некоторых стандартных проблем. Что вы делаете. Когда проблема под рукой не покрывается программным обеспечением. Которое вы купили? К счастью, многие современные программные системы расширяются с помощью программирования. На самом деле. Многие системы требуют. Чтобы части спецификации проблемы (например. Модели материалов) были заданы компьютерным кодом.
  2. Обладая навыками программирования. Вы можете расширить гибкость существующих программных пакетов. Объединив их. Например, вы можете интегрировать пакеты. Которые не разговаривают друг с другом с самого начала.

    Это делает рабочий процесс проще. Эффективнее и надежнее. И это дает вам возможность атаковать новые проблемы.

  3. Легко использовать отличное готовое программное обеспечение неправильно. Понимание в программировании и математике является фундаментальным для понимания сложного программного обеспечения. Избегая ловушек. И стать безопасным пользователем.
  4. Баги (ошибки в компьютерном коде) присутствуют в большинстве крупных компьютерных программ (в том числе и в тех. Что продаются в магазине!). Что вы делаете. Когда готовое программное обеспечение дает неожиданные результаты?

    Является ли это ошибкой. Неправильным использованием или математически правильным результатом? Опыт работы с математическим программированием дает вам хорошую основу для ответа на эти вопросы. Тот, кто умеет программировать. Может также создать индивидуальный код для упрощенной постановки задачи и использовать его для проверки вычислений. Выполняемых с помощью готового программного обеспечения.

  5. Многие квалифицированные специалисты по всему миру решают вычислительные задачи. Пишут свой собственный код и предлагают его бесплатно в Интернете. Чтобы воспользоваться преимуществами этого поистине великого источника программного обеспечения надежным способом, нужно. Как правило. Уметь понимать и, возможно. Модифицировать компьютерный код. Предлагаемый другими.

  6. Во всем мире признается. Что студенты борются с математикой и физикой. Слишком многие находят такие предметы трудными и скучными. С помощью программирования мы можем выполнять старые добрые предметы совершенно по-новому! По собственному опыту авторов. Студенты находят это гораздо более мотивирующим и поучительным. Когда программирование становится неотъемлемой частью курсов математики и физики. В частности. Решаемая задача может быть гораздо более реалистичной. Чем когда математика ограничивается тем. Что вы можете сделать с ручкой и бумагой.

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

По опыту авторов. Программирование является отличным педагогическим инструментом для понимания математики:

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

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

Целевая аудитория и фоновые знания

Эта книга была написана для студентов. Преподавателей. Инженеров и ученых. Которые ничего не знают о программировании и численных методах из прошлого. Но которые стремятся к минимуму из фундаментальных навыков. Необходимых для начала работы с программированием как инструментом решения научных и инженерных задач. Предполагается некоторое знание исчисления с одной и несколькими переменными. Основные понятия программирования представлены всего на 50 страницах (главы 1 и 2). Прежде чем практическое применение этих понятий будет продемонстрировано в важных математических предметах. Рассмотренных в остальных частях книги (главы 3-6).

За каждой главой следует комплекс упражнений. Охватывающих широкий спектр прикладных областей. Например биологию, геологию. Статистику. Физику и математику. Упражнения были специально разработаны для того. Чтобы выявить важные моменты из текста. Читатель поймет. Что скромное содержание первых 50 страниц может на самом деле привести вас довольно далеко в мощном решении проблем!

Изучение самых основ программирования не должно занимать много времени. Нои в любом другом ремесле. Овладение этим навыком требует постоянной и обширной практики. Некоторая начальная практика приобретается в главах 3-6, но авторы настоятельно подчеркивают. Что это только начало. Студенты должны продолжать практиковать программирование на последующих курсах. В то время как те. Кто занимается самообучением. Должны продолжать процесс обучения. Продолжая применять это ремесло. Книга является хорошей отправной точкой при обучении компьютерному программированию как интегрированной части стандартных университетских курсов по математике и физическим наукам. По нашему опыту. Такая интеграция выполнима и действительно полезна.

Численные методы

Общая цель этой книги-мотивировать компьютерное программирование как очень мощный инструмент для занятий математикой. Все примеры связаны с математикой и ее использованием в технике и науке. Однако для решения математических задач с помощью компьютерного программирования необходимы численные методы. Поэтому объяснение основных численных методов является неотъемлемой частью книги. Наш выбор тем определяется тем. Что наиболее необходимо в науке и технике. А также в преподавании прикладных физических дисциплин. Математические модели являются тогда центральными. А дифференциальные уравнения составляют наиболее распространенный тип моделей. Следовательно. Численное внимание в этой книге сосредоточено на дифференциальных уравнениях. В качестве мягкого педагогического стартера для программирования математики мы выбрали тему численного интегрирования. Существует также глава о поиске корней. Которая важна для численного решения нелинейных дифференциальных уравнений. Заметим, что книга намеренно коротка по численным методам. Это потому. Что наше внимание сосредоточено на но для разработки надежных. Работающих программ программист должен быть уверен в основных идеях используемых численных приближений.

Компьютерный язык: Python

Мы решили использовать язык программирования Python. Потому что этот язык дает очень компактный и читаемый код. Который очень напоминает математический рецепт решения поставленной задачи. Python также имеет мягкую кривую обучения. В этой книге есть MATLAB/Octave companion. Если этот язык предпочтителен. Сравнение этих двух версий книги дает прекрасную демонстрацию того. Насколько похожи эти языки. Другие компьютерные языки. Такие как Fortran, C и C++. Занимают прочные позиции в науке и технике. Однако за последние два десятилетия произошел значительный сдвиг в популярности от этих скомпилированных языков к более высокоуровневым и более простым для чтения языкам. Таким как Matlab. Python, R, Maple. Mathematica и IDL, например. Этот последний класс языков вычислительно менее эффективен. Но превосходит по общей эффективности решения человеческих проблем. Эта книга подчеркивает как думать . Как программист, а не сосредотачиваться на технических деталях языка. Таким образом. Книга должна подготовить читателя к дальнейшему изучению других языков программирования. В том числе классических: Фортран, Си и Си++.

Чем отличается эта книга

Существует множество текстов по компьютерному программированию и численным методам. Так чем же нынешний отличается от существующей литературы? По сравнению с книгами по численным методам. Наша книга имеет гораздо более сильный акцент на ремесле программирования и на верификации. Мы хотим дать студентам полное понимание того. Как человек думает о программировании как о методе решения проблем и как он может быть уверен. Что программы верны (ну. Вы никогда не можете быть полностью уверены. Но мы покажем. Как вы можете предоставить убедительные доказательства правильности).

Хотя есть много книг по численным методам. Где многие алгоритмы имеют соответствующую компьютерную реализации (см., например, [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] [14] [15] [16] [17] — последние два-единственные известные нам тексты. Применяющие Python). Предполагается. Что читатель Настоящая книга учит искусству структурированного программирования наряду с фундаментальными идеями численных методов. Кроме того, мы до сих пор не нашли ни одной другой книги по численным методам. В которой был бы сделан сильный акцент на проверке реализаций. В этой книге модульное тестирование и соответствующие ему тестовые функции рассматриваются на ранней стадии. Мы также уделяем большое внимание алгоритмам кодирования как функциям, в отличие от Функции многоразовы. Потому что они используют общую формулировку математического алгоритма таким образом. Что он становится применимым к большому классу задач.

Существует также множество книг по компьютерному программированию. Ноолько нам известно. Только одна [18] направлена на то. Чтобы научить думать о программировании в контексте численных методов и научных приложений. Эта книга [18] имеет свой основной акцент на обучении Python и является очень всеобъемлющим введением в Python как язык и мышление о программировании как ученый-компьютерщик. Иногда нужен текст. Который не углубляется так глубоко в языковые детали. А вместо этого нацелен на кратчайший путь к надежному решению математических задач с помощью программирования. Имея в виду это отношение. Многие темы были исключены из настоящей книги просто потому. Что они не были строго необходим в процессе решения математических задач. Примерами таких тем являются объектно-ориентированное программирование и словари Python (последнее упущение, возможно. Вызывает больше споров). Если вы найдете эту книгу слишком поверхностной, [18] может быть правильным выбором для вас. Этот источник также должен хорошо работать в качестве более глубокого преемника настоящего текста.

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

Дополнительные материалы

Все файлы программ и данных. Упомянутые в этой книге. Доступны с основного веб-сайта книги: http://hplgit.github.io/prog4comp/.

Подтверждения

Прежде всего. Мы хотим поблагодарить всех студентов. Которые посещали курсы FM1006 Modeling and Simulation of dynamic systems. FM1115 Scientific Computing. FB1012 Mathematics I и FB2112 Physics в Университетском колледже Юго-Восточной Норвегии в течение последних двух лет. Они работали над ранними версиями этого текста и дали нам конструктивные и положительные отзывы. Которые помогли нам исправить ошибки и улучшить книгу во многих отношениях. Особое признание получает Гуандун Коу и Эдирисингхе В. П. Дж. Манджула за внимательное прочтение рукописи и конструктивные предложения по ее улучшению. Тщательное корректурное чтение Yapi Donatien Achou также высоко ценится. Мы благодарим всех наших хороших коллег из Университетского колледжа Юго-Восточной Норвегии. Университета Осло и Исследовательской лаборатории Simula за их постоянную поддержку и интерес. Просвещающие дискуссии. А также за создание такой вдохновляющей среды для преподавания и науки. В частности. Свейн Линге благодарен Мариусу Лысакеру за плодотворное сотрудничество по внедрению программирования в качестве неотъемлемой части бакалавр математики и физики в Университетском колледже Юго-Восточной Норвегии. Наконец, авторы должны поблагодарить команду Springer вместе с доктором Мартином Питерсом. Тхань-Ха Ле Тхи и Ивонной Шлаттер за эффективный редакторский и производственный процесс.

Текст был написан на языке разметки DocOnce [19], что позволило нам работать с одним источником текста как для Python. Так и для версии Matlab этой книги. А также производить различные электронные версии книги.