Qual é o melhor: FORTRAN ou Python? E acho que nos dois casos você precisa do Gnuplot, estou certo?
Estou trabalhando em uma máquina Windows no momento.
Gostaria de usá-lo para obter soluções numéricas para problemas físicos, incluindo simulações de Monte-Carlo, integração e diferenciação numéricas, dinâmica molecular, etc.
Eu vi um curso de física computacional que introduz o FORTRAN (77 eu acredito) e o Python. Estou planejando começar com um e depois aprender o outro, mas não sei qual transição pode ser a mais fácil.
Também quais compiladores você recomendaria?
A questão básica para mim se resume a: qual é o mais fácil de aprender, qual é o mais rápido, qual é o mais fácil de usar e, acima de tudo, qual é o mais usado (para uma comparação desses 4)? Além disso, quais são os compiladores mais comuns (gratuitos ou pagos) em uso? Atualmente, estou pensando em converter um laptop antigo (antigo Intel dual core) em Linux; espero que seja rápido o suficiente.
Muito obrigado pelas respostas até agora! As respostas que estão alinhadas com o que estou procurando são as de LKlevin e SAAD.
Eu sei o básico de C ++, Maple e domino o MATLAB e o Mathematica9 quase completamente, se isso for de alguma ajuda.
Respostas:
Facilidade de aprendizado
Python e Fortran são linguagens relativamente fáceis de aprender. Provavelmente é mais fácil encontrar bons materiais de aprendizado em Python do que bons materiais de aprendizado em Fortran, porque o Python é usado mais amplamente, e o Fortran atualmente é considerado uma linguagem "especializada" para computação numérica.
Acredito que a transição do Python para o Fortran seria mais fácil. Python é uma linguagem interpretada, portanto, o número de etapas necessárias para executar o primeiro programa é menor (abra o interpretador, digite
print("Hello, world!")
no prompt) do que para o Fortran (escreva um programa "Hello world", compile, execute). Também acho que existem materiais melhores para ensinar estilo orientado a objetos no Python do que no Fortran, e há mais código Python disponível no GitHub do que o código Fortran.Instalando e executando no Windows
Instalar o Python deve ser menos doloroso; existem distribuições do Windows disponíveis. Eu recomendo usar uma distribuição científica como Anaconda ou Enthought Canopy. Não existe realmente um compilador, por si só; o intérprete assume esse papel. Você deseja usar um intérprete baseado em CPython, porque há mais bibliotecas numéricas disponíveis e ele interopera bem com C, C ++ e Fortran. Outras implementações de intérpretes incluem Jython e PyPy.
Em uma máquina Windows, a instalação de um compilador Fortran será irritante. Compiladores de linha de comando típicos são programas como gfortran, ifort (da Intel; gratuito para uso pessoal, caso contrário custa dinheiro) e pgfortran (da PGI; versões de avaliação gratuita, caso contrário, custa dinheiro). Para instalar esses compiladores, pode ser necessário instalar algum tipo de camada de compatibilidade do tipo UNIX / POSIX, como Cygwin ou MinGW. Achei difícil trabalhar com isso, mas algumas pessoas gostam desse fluxo de trabalho. Você também pode instalar um compilador com uma GUI, como o Visual Fortran (novamente, você teria que pagar por uma licença).
No Linux, será mais fácil instalar o Python e os compiladores; Eu ainda instalaria o Anaconda ou o Enthought Canopy como uma distribuição Python.
Velocidade: uma troca entre produtividade e desempenho
Ao usar Python (ou MATLAB, Mathematica, Maple ou qualquer linguagem interpretada), você desiste do desempenho pela produtividade. Comparado ao Fortran (ou C ++, C ou qualquer outra linguagem compilada), você escreverá menos linhas de código para realizar a mesma tarefa, o que geralmente significa que levará menos tempo para obter uma solução funcional.
A penalidade de desempenho efetiva pelo uso do Python varia e é atenuada pela delegação de tarefas computacionalmente intensivas em linguagens compiladas. O MATLAB faz algo semelhante. Quando você faz uma multiplicação de matrizes no MATLAB, ele chama BLAS; a penalidade de desempenho é praticamente zero e você não precisa escrever nenhum Fortran, C ou C ++ para obter o alto desempenho. Uma situação semelhante existe no Python. Se você pode usar bibliotecas (por exemplo, NumPy, SciPy, petsc4py, dolfin do FEniCS, PyClaw), você pode escrever todo o seu código em Python e obter um bom desempenho (uma penalidade de talvez 10-40%), porque tudo computacionalmente partes intensivas são chamadas para bibliotecas de idiomas compiladas rapidamente. No entanto, se você escrever tudo em Python puro, a penalidade de desempenho seria um fator de 100-1000x. Portanto, se você quisesse usar o Python e tivesse que incluir um personalizado, Na rotina de computação intensiva, seria melhor escrever essa parte em uma linguagem compilada como C, C ++ ou Fortran e, em seguida, agrupá-la com uma interface Python. Existem bibliotecas que facilitam esse processo (como Cython e f2py) e tutoriais para ajudá-lo; geralmente não é oneroso.
Âmbito de uso
O Python é usado mais amplamente como uma linguagem de uso geral. O Fortran é amplamente limitado à computação numérica e científica e está competindo principalmente com C e C ++ pelos usuários desse domínio.
Na ciência da computação, o Python normalmente não compete diretamente com linguagens compiladas devido às penalidades de desempenho que mencionei. Você usaria o Python para casos em que deseja alta produtividade e desempenho. É uma consideração secundária, como na prototipagem de algoritmos numericamente intensivos, processamento de dados e visualização. Você usaria o Fortran (ou outra linguagem compilada) quando tiver uma boa idéia de qual deve ser o design do seu algoritmo e aplicativo; você está disposto a gastar mais tempo escrevendo e depurando seu código, e o desempenho é fundamental. (Por exemplo, o desempenho é uma etapa limitante do seu processo de simulação ou é uma entrega essencial em sua pesquisa.) Uma estratégia comum é misturar o Python e uma linguagem compilada (geralmente C ou C ++, mas o Fortran também foi usado), e use apenas a linguagem compilada para as partes mais sensíveis ao desempenho do código; o custo de desenvolvimento é, obviamente, mais difícil de escrever e depurar um programa em dois idiomas do que um programa em um único idioma.
Em termos de paralelismo, o atual padrão MPI (MPI-3) possui ligações Fortran e C nativas. O padrão MPI-2 tinha ligações C ++ nativas, mas o MPI-3 não, e você teria que usar as ligações C. Existem ligações MPI de terceiros, como mpi4py. Eu usei o mpi4py; funciona bem e é fácil de usar. Para o paralelismo em larga escala (dezenas de milhares de núcleos), você provavelmente desejaria usar uma linguagem compilada, porque coisas como carregar dinamicamente os módulos Python o morderão em grande escala se você fizer isso de uma maneira ingênua. Existem maneiras de contornar esse gargalo, como demonstrado pelos desenvolvedores do PyClaw, mas é mais simples evitá-lo.
Opiniões pessoais
Tenho cerca de uma década de experiência no Fortran 90/95 e também programado no Fortran 2003. Tenho cerca de cinco anos de experiência em programação em Python. Eu uso o Python muito mais do que o Fortran porque, francamente, eu faço mais no Python. A maior parte do trabalho que eu preciso fazer não requer grandes recursos de supercomputação e geralmente não vale a pena ser re-desenvolvida em outra linguagem; portanto, o Python é adequado para resolver ODEs e PDEs. Se eu precisar usar uma linguagem compilada, usarei C, C ++ ou Fortran, nessa ordem.
A maior parte do código Fortran que eu vi foi feia, principalmente porque a maioria da comunidade de ciência da computação parece desconhecer ou aversa a quaisquer práticas recomendadas descobertas por engenheiros de software nos últimos 30 anos. A saber: não há uma boa estrutura de teste de unidade no Fortran. (O melhor que me deparei é o FUnit, da NASA, e isso não é mais mantido.) Existem algumas boas estruturas de teste de unidade Python, bons geradores de documentação Python e geralmente muitos exemplos melhores de boas práticas de programação.
fonte
Eu ficaria longe de Fortan ou, se precisar, usaria uma versão razoavelmente nova (2003 em vez de 77). Muitos softwares de física (simulações de Monte Carlo em particular) são escritos no Fortran, simplesmente porque os projetos foram originalmente iniciados nos anos 80.
Dito isto, python e Fortran são duas linguagens muito diferentes, e para o que elas devem ser usadas é bem diferente. O Python é de alto nível e, em geral, não é tão rápido (em comparação com o Fortran e C ++). O motivo pelo qual está sendo usado tanto é que é rápido o suficiente para a maioria das coisas e possui excelentes bibliotecas (alimentadas pelo Fortran) para muitas (mas não todas) as coisas que você gostaria de fazer. Ele também possui o excelente Matplotlib para plotagem (portanto, não há necessidade do GNUplot) e você pode obter um desempenho bastante decente usando coisas como Cython para escrever os bits caros. No entanto, não será tão rápido quanto o Fortran ou C ++, e a paralelização é bastante terrível, tornando-o inadequado para computação numérica de alto desempenho. Se o que você deseja pode ser tratado chamando as bibliotecas Fortran ou C, no entanto,
Fortran é uma linguagem de nível um pouco inferior. Para numéricos, o suporte à biblioteca é surpreendentemente bom, mas ainda é um nível muito baixo, oferecendo uma série de bugs que você poderia evitar, como passar acidentalmente o tamanho errado da matriz para um método. Esses erros são difíceis de encontrar e você pode nem perceber. Confie em mim, passei um bom tempo escrevendo Fortran 77.
C ++ é (na minha humilde opinião) um meio feliz. Com bibliotecas como Armadillo ou Eigen, você pode obter um estilo de codificação de nível bastante alto e obter um estilo de desempenho de baixo nível.
Falando em desempenho, a única opção real para python numérico no momento é o CPython. Se você baixar algo como o WinPython , também obterá a maioria das bibliotecas necessárias.
Para Fortran no Windows, as coisas são um pouco mais difíceis. Eu recomendaria mudar para o linux e usar o compilador gfortran ou Intels ifort. Ifort tende a ser mais rápido para código numérico na minha experiência, mas é gratuito apenas para uso não comercial e não acadêmico.
Resumindo: a menos que você queira executar simulações realmente pesadas, o python é de longe a escolha mais fácil e muito mais agradável de se trabalhar. Também deve ser rápido o suficiente para a maioria dos projetos no nível do aluno. Se você precisar de melhor desempenho, comece analisando as quantidades desperdiçadas de bibliotecas já escritas e deixe que isso decida seu idioma. Se você precisar escrever coisas do zero, use C ++.
Também é um aviso: a maioria dos códigos escritos por físicos é bastante terrível, presumivelmente porque os físicos tendem a assumir que a programação é fácil e não requer o mesmo rigor que eles podem usar em matemática. Considere fazer uma aula ou comprar um livro que ensina programação.
Disclaimer: Eu sou um físico que passou bastante tempo com os códigos de Monte Carlo baseados em Fortran 77 e atualmente faz todo o processamento de dados em Python.
fonte
Python é uma linguagem muito lenta e de alto nível. Para processamento rápido de números, você precisará escrever os principais kernels de computação em linguagens de baixo nível, como C / C ++, o que significa que agora você precisa aprender não um, mas pelo menos dois idiomas. Você também terá que lidar com dores de cabeça adicionais associadas à depuração / instalação / manutenção, etc. A maioria das pessoas usa o Python como um açúcar sintático para ocultar deficiências do C / C ++.
O Fortran moderno (90 e posterior) é de nível rápido e alto, com quase a sintaxe do MATLAB. Então você pode fazer coisas como:
ou
ou ainda mais simples
etc.
No Linux, existem vários compiladores Fortran gratuitos. eu uso
Eu não uso Macs / OSX, mas há IGP grátis.
E por favor não use o FORTRAN 77. Ninguém o usa para escrever um novo código.
Exoneração de responsabilidade: Eu olhei pessoalmente para o Python para escrever meu próprio pequeno código FE não estruturado (parte superior do PETSc), mas a quantidade de trabalho / codificação envolvida foi mais do que simplesmente escrever o Fortran 95.
fonte
O Python é muito prático para análise de simulação completa com pacotes versáteis e bem documentados: geração de grade, computação em array e manipulação da estrutura de dados ( numpy e pandas ), bem como visualização de dados com o matplotlib. Para simulações complexas com grandes arquivos de resultados, é ainda melhor trabalhar com o pacote VTK, que permite que a exportação de dados seja lida por aplicativos avançados de código aberto (como Paraview ou Visit)
O Fortran é há algum tempo o idioma preferido para diferentes domínios nas simulações. É facilmente legível (embora menos legível que o código Python). A manipulação de matrizes é um dos pontos fortes da linguagem, bastante fácil de definir e usar em todos os tipos de operações de matriz. Também é útil ao depurar.
A comparação se resume ao desempenho : só fiz cálculos em grande escala usando linguagens compiladas (C ++ e Fortran 90), mas nunca com Python. Outro tópico fornece mais informações de desempenho sobre linguagens interpretadas e compiladas: Qual idioma devo usar ao ensinar um curso de graduação em programação de computadores?
Pessoalmente, gosto de trabalhar com o Python em geral, especialmente para pós-processamento. A programação em Python é divertida!
fonte
Com o Python, você não precisa do Gnuplot, pode usar, por exemplo, matplotlib e / ou usar o shell IPython. O IPython é um shell Python interativo que, no modo% pylab, fornece praticamente os mesmos comandos de plotagem disponíveis no MATLAB.
É bem provável que a computação científica mude muito do MATLAB para o Python nos próximos 5 anos ou mais.
fonte
Eu continuaria usando o MATLAB, ele chama bibliotecas matemáticas rápidas e você não verá muita diferença no desempenho ao mudar para o FORTRAN no Windows. Ao mesmo tempo, você terá uma infraestrutura melhor no MATLAB para relatar resultados e executar seu código. A desvantagem do MATLAB é o seu custo. O FORTRAN é basicamente gratuito, e há várias bibliotecas gratuitas por aí.
O FORTRAN é muito fácil de aprender e iniciar a programação. Basicamente, faz o que o nome sugere: converte suas fórmulas em código, o que é fácil de ler e entender. É por isso que os físicos costumavam usá-lo muito nos velhos tempos. Enquanto a maior parte do seu código é sobre a solução de problemas físicos (não criando GUIs ou fazendo outras coisas legais), o código FORTRAN será fácil de manter.
Eu recomendaria o Python apenas se você gosta de programação. Pense no seguinte: quando você codifica uma solução para um problema de física, gosta de programar parte da solução? Se o fizer, o Python é uma opção, porque a linguagem é muito melhor que a do MATLAB.
fonte