Какой из них лучше: Фортран или Питон? И я думаю, что в обоих случаях вам нужен Gnuplot, я прав?
Я сейчас работаю на машине с Windows.
Я хотел бы использовать его для получения численных решений физических задач, включая моделирование по методу Монте-Карло, численное интегрирование и дифференцирование, молекулярную динамику и т. Д.
Я видел курс по вычислительной физике, который знакомит как с Фортраном (как мне кажется, 77) и с Питоном. Я планирую начать с одного, а затем изучить другой, но я не знаю, какой переход может быть самым легким.
Также, какие компиляторы вы бы порекомендовали?
Основной вопрос для меня сводится к тому, какой из них легче всего выучить, какой из них самый быстрый, какой наиболее удобный и, прежде всего, какой наиболее часто используется (так что сравнение этих 4)? И, кроме того, какие самые распространенные (бесплатные или платные) компиляторы используются? В настоящее время я рассматриваю возможность преобразования старого ноутбука (раннее двухъядерное Intel) в Linux; надеюсь, это достаточно быстро.
Большое спасибо за ответы до сих пор! Ответы, которые соответствуют тому, что я ищу, - это ответы Л.Клевина и SAAD.
Я знаю основы C ++, Maple, и я почти полностью владею MATLAB и Mathematica9, если это поможет.
Ответы:
Простота обучения
Python и Fortran - относительно простые в изучении языки. Вероятно, легче найти хорошие учебные материалы по Python, чем хорошие учебные материалы по Фортрану, потому что Python используется более широко, и Фортран в настоящее время считается «специальным» языком для числовых вычислений.
Я считаю, что переход с Python на Fortran будет проще. Python является интерпретируемым языком, поэтому количество шагов, необходимых для запуска вашей первой программы, меньше (откройте интерпретатор, введите
print("Hello, world!")
в командной строке), чем для Fortran (напишите программу «Hello world», скомпилируйте, запустите). Я также думаю, что есть лучшие материалы для обучения объектно-ориентированному стилю на Python, чем на Fortran, и на GitHub доступно больше кода Python, чем на Fortran.Начало работы с Windows
Установка Python должна быть менее болезненной; Есть доступные дистрибутивы Windows. Я рекомендую использовать научный дистрибутив, такой как Anaconda или Enthought Canopy. Там на самом деле нет компилятора; переводчик берет эту роль. Вы захотите использовать интерпретатор на основе CPython, потому что доступно больше числовых библиотек, и он прекрасно взаимодействует с C, C ++ и Fortran. Другие реализации интерпретатора включают Jython и PyPy.
На компьютере с Windows установка компилятора Fortran будет раздражать. Типичными компиляторами командной строки являются такие программы, как gfortran, ifort (от Intel; бесплатны для личного использования, в противном случае стоит денег) и pgfortran (от PGI; бесплатные пробные версии, в противном случае стоят денег). Чтобы установить эти компиляторы, вам может потребоваться установить какой-либо уровень совместимости типа UNIX / POSIX, например Cygwin или MinGW. Мне было трудно работать, но некоторым людям нравится этот рабочий процесс. Вы также можете установить компилятор с графическим интерфейсом, например Visual Fortran (опять же, вам придется заплатить за лицензию).
В Linux будет проще установить Python и компиляторы; Я бы по-прежнему устанавливал Anaconda или Enthought Canopy в качестве дистрибутива Python.
Скорость: компромисс между производительностью и производительностью
Используя Python (или MATLAB, Mathematica, Maple или любой другой интерпретируемый язык), вы снижаете производительность ради производительности. По сравнению с Fortran (или C ++, C или любым другим скомпилированным языком), вы будете писать меньше строк кода для выполнения той же задачи, что обычно означает, что вам понадобится меньше времени, чтобы получить работающее решение.
Эффективное снижение производительности при использовании Python варьируется и уменьшается за счет делегирования сложных вычислительных задач скомпилированным языкам. MATLAB делает нечто подобное. Когда вы делаете матричное умножение в MATLAB, он вызывает BLAS; потеря производительности практически равна нулю, и вам не нужно было писать на Fortran, C или C ++, чтобы получить высокую производительность. Аналогичная ситуация существует в Python. Если вы можете использовать библиотеки (например, NumPy, SciPy, petsc4py, dolfin из FEniCS, PyClaw), вы можете написать весь свой код на Python и получить хорошую производительность (штраф может составлять 10-40%), поскольку все в вычислительном отношении Интенсивные части - это вызовы в быстро скомпилированные языковые библиотеки. Однако, если бы вы написали все на чистом Python, снижение производительности было бы в 100-1000 раз больше. Так что, если вы хотите использовать Python и должны были включить кастом, Вычислительная подпрограмма, вам лучше написать эту часть на скомпилированном языке, таком как C, C ++ или Fortran, а затем обернуть ее интерфейсом Python. Существуют библиотеки, которые облегчают этот процесс (например, Cython и f2py), и учебники, которые помогут вам; это вообще не обременительно.
Сфера использования
Python более широко используется в качестве языка общего назначения. Fortran в основном ограничивается числовыми и научными вычислениями и в основном конкурирует с C и C ++ за пользователей в этой области.
В вычислительной науке Python обычно не конкурирует напрямую со скомпилированными языками из-за проблем производительности, о которых я упоминал. Вы должны использовать Python в тех случаях, когда вам нужна высокая производительность, а производительность является второстепенным фактором, например, при создании прототипов численных алгоритмов, обработке данных и визуализации. Вы будете использовать Fortran (или другой скомпилированный язык), когда у вас есть хорошее представление о том, каким должен быть ваш алгоритм и дизайн приложения, вы готовы тратить больше времени на написание и отладку своего кода, а производительность имеет первостепенное значение. (Например, производительность - это ограничивающий шаг в процессе моделирования или ключевой результат в ваших исследованиях.) Обычная стратегия - смешивать Python и скомпилированный язык (обычно C или C ++, но также используется Fortran), и использовать только скомпилированный язык для наиболее чувствительных к производительности частей кода; Разумеется, стоимость разработки заключается в том, что написание и отладку программы на двух языках труднее, чем на одном языке.
С точки зрения параллелизма, текущий стандарт MPI (MPI-3) имеет родные привязки Fortran и C. Стандарт MPI-2 имеет нативные привязки C ++, а MPI-3 - нет, и вам придется использовать привязки C. Существуют сторонние привязки MPI, такие как mpi4py. Я использовал mpi4py; он работает хорошо и прост в использовании. Для крупномасштабного параллелизма (десятки тысяч ядер) вы, вероятно, захотите использовать скомпилированный язык, потому что такие вещи, как динамическая загрузка модулей Python, будут кусать вас в задницу в масштабе, если вы сделаете это наивным способом. Есть способы обойти это узкое место, как продемонстрировали разработчики PyClaw, но этого проще избежать.
Личные мнения
У меня есть примерно десятилетний опыт работы на Фортране 90/95, и я также программировал на Фортране 2003. У меня есть примерно пять лет опыта программирования на Python. Я использую Python гораздо больше, чем Фортран, потому что, честно говоря, я делаю больше в Python. Большая часть работы, которую мне нужно сделать, не требует больших ресурсов суперкомпьютеров и, как правило, не стоит пересматривать на другом языке, поэтому Python отлично подходит для решения ODE и PDE. Если мне нужно использовать скомпилированный язык, я буду использовать C, C ++ или Fortran в этом порядке.
Большая часть кода на Фортране, который я видел, была безобразна, главным образом потому, что большая часть компьютерного научного сообщества, кажется, не знает или не склонна к каким-либо лучшим методам, обнаруженным разработчиками программного обеспечения за последние 30 лет. Для остроумия: в Фортране нет хорошей платформы для юнит-тестирования (Лучшее, с чем я столкнулся, это FUnit от NASA, и он больше не поддерживается.) Есть несколько хороших платформ для модульного тестирования Python, хорошие генераторы документации по Python и, как правило, множество лучших примеров хороших практик программирования.
источник
Я бы держался подальше от Фортана или, если нужно, использовал бы достаточно новую версию (2003, а не 77). Большая часть программного обеспечения для физики (в частности, симуляции Монте-Карло) написана на Фортране просто потому, что проекты были начаты в 80-х годах.
Тем не менее, Python и Fortran - два совершенно разных языка, и то, для чего они должны использоваться, совсем другое. Python высокого уровня и в целом не так быстро (по сравнению с Fortran & C ++). Причина, по которой он так часто используется, заключается в том, что он достаточно быстр для большинства вещей и имеет отличные (на Фортране) библиотеки для многих (но не всех) вещей, которые вы хотели бы сделать. Он также имеет превосходный Matplotlib для построения графиков (поэтому нет необходимости в GNUplot), и вы можете получить довольно приличную производительность, используя такие вещи, как Cython для написания дорогих битов. Однако он не будет таким же быстрым, как Fortran или C ++, и распараллеливание довольно ужасно, что делает его недостаточным для высокопроизводительных численных вычислений. Если то, что вы хотите, может быть обработано путем вызова библиотек Fortran или C,
Фортран - язык несколько более низкого уровня. Для чисел поддержка библиотеки на удивление хороша, но все еще находится на очень низком уровне, давая вам кучу ошибок, которых вы могли бы избежать, например, случайной передачи неправильного размера массива методу. Эти ошибки трудно найти, и вы можете их вообще не заметить. Поверьте мне, я потратил довольно много времени на написание Фортрана 77.
C ++ является (по моему скромному мнению) счастливым медиумом. С такими библиотеками, как Armadillo или Eigen, вы можете использовать довольно высокий уровень кодирования, одновременно получая низкоуровневый стиль исполнения.
Говоря о производительности, единственным реальным выбором для числового Python сейчас является CPython. Если вы скачаете что- то вроде WinPython, вы также получите большинство необходимых вам библиотек.
Для Фортрана на окнах все немного сложнее. Я бы порекомендовал перейти на Linux и использовать компилятор gfortran или Intel. По моему опыту, Ifort быстрее работает с числовым кодом, но бесплатен только для некоммерческого, не академического использования.
Подводя итог: если вы не хотите запускать действительно тяжелые симуляции, то Python - гораздо более легкий выбор и с ним гораздо приятнее работать. Он также должен быть достаточно быстрым для большинства проектов студенческого уровня. Если вам нужна более высокая производительность, начните с изучения большого количества уже написанных библиотек и позвольте этому выбрать ваш язык. Если вам нужно писать вещи с нуля, используйте C ++.
Также предупреждение: большая часть кода, написанного физиками, довольно ужасна, вероятно потому, что физики склонны считать программирование легким и не требует той же строгости, которую они могли бы использовать в математике. Подумайте о том, чтобы взять урок или купить книгу, которая учит программированию.
Отказ от ответственности: я физик, который провел довольно много времени с кодами Монте-Карло на основе Fortran 77 и в настоящее время выполняет всю свою обработку данных в Python.
источник
Python - очень медленный язык высокого уровня. Для быстрого сокращения чисел вам придется писать основные вычислительные ядра на языках низкого уровня, таких как C / C ++, что означает, что теперь вы должны изучать не один, а как минимум два языка. Вам также придется иметь дело с дополнительной головной болью, связанной с отладкой / установкой / обслуживанием и т. Д. Большинство людей используют Python как синтаксический сахар, чтобы скрыть недостатки C / C ++.
Современный Fortran (90 и более поздние версии) - это быстрый и высокий уровень с почти MATLAB-подобным синтаксисом. Так что вы можете делать такие вещи, как:
или
или даже проще
и т.п.
В Linux есть несколько бесплатных компиляторов Фортрана. я использую
Я не использую Mac / OSX, но есть бесплатный PGI.
И, пожалуйста, не используйте FORTRAN 77. Никто не использует его для написания нового кода.
Отказ от ответственности: я лично посмотрел на Python для написания своего собственного небольшого неструктурированного кода FE (построенного на основе PETSc), но объем работ / кодирования был больше, чем просто написание его на чистом языке Fortran 95.
источник
Python очень удобен для полного анализа моделирования с хорошо документированными универсальными пакетами: создание сетки, вычисление массива и обработка структуры данных ( numpy и pandas ), а также визуализация данных с помощью matplotlib. Для сложных симуляций с большими файлами результатов еще лучше работать с пакетом VTK, который позволяет экспортировать данные для чтения с помощью расширенных приложений с открытым исходным кодом (таких как Paraview или Visit).
Фортран в течение некоторого времени был предпочтительным языком для разных областей моделирования. Это легко читается (менее читабельно, чем код Python, хотя). Обработка массива является одной из сильных сторон языка, ее довольно легко определить и использовать при использовании всех видов операций с массивами. Это также удобно при отладке.
Сравнение сводится к производительности : я делал масштабные вычисления только с использованием скомпилированных языков (C ++ и Fortran 90), но никогда с Python. Другой поток дает больше информации о производительности интерпретируемых и скомпилированных языков: Какой язык я должен использовать при преподавании курса бакалавриата по компьютерному программированию?
Лично мне нравится работать с Python в целом, особенно для постобработки. Программирование на Python - это весело!
источник
С Python вам не нужен Gnuplot, вы можете использовать, например, matplotlib и / или использовать оболочку IPython. IPython - это интерактивная оболочка Python, которая в режиме% pylab предоставляет практически те же команды построения графиков, которые доступны в MATLAB.
Вполне вероятно, что в ближайшие 5 лет научные вычисления в значительной степени перейдут от MATLAB к Python.
источник
Я бы продолжал использовать MATLAB, он вызывает быстрые математические библиотеки, и вы не увидите большой разницы в производительности, переключившись на FORTRAN в Windows. В то же время у вас будет лучшая инфраструктура в MATLAB для составления отчетов о результатах и выполнения вашего кода. Недостатком MATLAB является его стоимость. FORTRAN в основном бесплатный, и есть множество бесплатных библиотек.
FORTRAN очень прост в изучении и начале программирования. Он в основном делает то, что предлагает название: переводит ваши формулы в код, который легко читать и понимать. Вот почему физики часто использовали его в старые времена. Пока большая часть вашего кода посвящена решению физических проблем (не построению графического интерфейса или выполнению других интересных вещей), код на FORTRAN будет легко поддерживать.
Я бы порекомендовал Python, только если вам нравится программирование. Подумайте об этом: когда вы пишете решение проблемы физики, вам нравится программировать часть решения? Если вы это сделаете, то Python является вариантом, потому что язык намного лучше, чем MATLAB.
источник