Python gegen FORTRAN


17

Welches ist besser: FORTRAN oder Python? Und in beiden Fällen brauchst du wohl Gnuplot, oder?

Ich arbeite gerade an einem Windows-Computer.

Ich würde es gerne verwenden, um numerische Lösungen für physikalische Probleme zu erhalten, einschließlich Monte-Carlo-Simulationen, numerische Integration und Differenzierung, Molekulardynamik usw.

Ich habe einen Kurs über Computerphysik gesehen, in dem sowohl FORTRAN (glaube ich) als auch Python vorgestellt werden. Ich plane, mit dem einen zu beginnen und dann das andere zu lernen, aber ich weiß nicht, welcher Übergang der einfachste sein könnte.

Auch welche Compiler würden Sie empfehlen?

Die Grundfrage für mich lautet: Welches ist am einfachsten zu lernen, welches ist am schnellsten, welches ist am benutzerfreundlichsten und vor allem welches wird am häufigsten verwendet (also ein Vergleich dieser 4)? Und daneben, welche (kostenlosen oder kostenpflichtigen) Compiler werden am häufigsten verwendet? Ich überlege derzeit, einen alten Laptop (früher Intel Dual Core) auf Linux umzustellen. hoffentlich ist das schnell genug.

Vielen Dank für die bisherigen Antworten! Die Antworten, nach denen ich suche, sind die von LKlevin und SAAD.

Ich kenne die Grundlagen von C ++, Maple und beherrsche MATLAB und Mathematica9 fast vollständig, wenn das hilft.


12
Sie müssen wirklich genauer sein; Das ist wie die Frage "Was ist besser: ein Hammer oder ein Schraubenzieher?". Schauen Sie sich scicomp.stackexchange.com/questions/11006 an (es geht um C ++ anstelle von Fortran, aber die meisten Punkte sollten gleichermaßen zutreffen).
Christian Clason

@ChristianClason, angemessener Punkt: p
Nick

Vielen Dank für Ihre Bearbeitung, auch wenn dies nicht wirklich einschränkt. Ich bin mir nicht sicher, was mehr gesagt werden kann, als bereits als Antwort auf die oben verlinkte Frage angegeben wurde.
Christian Clason

2
Auch die Frage nach Compilern ist ein separates Thema und sollte eine separate Frage sein. (Anderenfalls wird es nicht angezeigt, wenn Sie mit Fortran vertraut sind, aber kein Interesse an Python haben.) Einige Empfehlungen finden Sie bereits unter scicomp.stackexchange.com/questions/8617 .
Christian Clason

1
Wenn Sie matlab kennen, können Sie die meisten numerischen Algorithmen erlernen, indem Sie sie dort implementieren, obwohl Ihre Leistung fast immer schlechter ist als die der integrierten matlab-Routinen. Von dort aus können Sie entscheiden, was Ihre Leistungsanforderungen sind, und zu einer effizienteren Bibliothek / Sprache wechseln.
Godric Seer

Antworten:


29

Einfaches Lernen

Python und Fortran sind relativ einfach zu erlernende Sprachen. Es ist wahrscheinlich einfacher, gute Python-Lernmaterialien zu finden als gute Fortran-Lernmaterialien, da Python häufiger verwendet wird und Fortran derzeit als Spezialsprache für das numerische Rechnen gilt.

Ich glaube, der Übergang von Python nach Fortran wäre einfacher. Python ist eine interpretierte Sprache, daher ist die Anzahl der Schritte, die erforderlich sind, um Ihr erstes Programm zum Laufen zu bringen, geringer (öffnen Sie den Interpreter, geben Sie print("Hello, world!")an der Eingabeaufforderung ein) als die für Fortran (schreiben Sie ein "Hallo Welt" -Programm, kompilieren Sie, führen Sie es aus). Ich denke auch, dass es in Python bessere Materialien zum Unterrichten des objektorientierten Stils gibt als in Fortran, und dass auf GitHub mehr Python-Code verfügbar ist als in Fortran-Code.

Unter Windows einsatzbereit

Die Installation von Python sollte weniger schmerzhaft sein. Es sind Windows-Distributionen verfügbar. Ich empfehle eine wissenschaftliche Distribution wie Anaconda oder Enthought Canopy. Es gibt an sich keinen Compiler; Der Dolmetscher übernimmt diese Rolle. Sie sollten einen CPython-basierten Interpreter verwenden, da mehr numerische Bibliotheken verfügbar sind und eine gute Zusammenarbeit mit C, C ++ und Fortran besteht. Andere Interpreter-Implementierungen umfassen Jython und PyPy.

Auf einem Windows-Computer ist die Installation eines Fortran-Compilers ärgerlich. Typische Befehlszeilen-Compiler sind Programme wie gfortran, ifort (von Intel; für den persönlichen Gebrauch kostenlos, sonst kosten sie Geld) und pgfortran (von PGI; kostenlose Testversionen, sonst kosten sie Geld). Um diese Compiler zu installieren, müssen Sie möglicherweise eine Art UNIX / POSIX-Kompatibilitätsebene wie Cygwin oder MinGW installieren. Ich fand es schwierig, damit zu arbeiten, aber manche Leute mögen diesen Workflow. Sie können auch einen Compiler mit einer grafischen Benutzeroberfläche wie Visual Fortran installieren (erneut müssen Sie eine Lizenz bezahlen).

Unter Linux ist es einfacher, Python und Compiler zu installieren. Ich würde weiterhin Anaconda oder Enthought Canopy als Python-Distribution installieren.

Geschwindigkeit: ein Kompromiss zwischen Produktivität und Leistung

Wenn Sie Python (oder MATLAB, Mathematica, Maple oder eine andere interpretierte Sprache) verwenden, geben Sie die Leistung für die Produktivität auf. Im Vergleich zu Fortran (oder C ++, C oder einer anderen kompilierten Sprache) schreiben Sie weniger Codezeilen, um dieselbe Aufgabe zu erledigen, was im Allgemeinen bedeutet, dass Sie weniger Zeit benötigen, um eine funktionierende Lösung zu finden.

Die effektive Leistungseinbuße für die Verwendung von Python ist unterschiedlich und wird gemindert, indem rechenintensive Aufgaben an kompilierte Sprachen delegiert werden. MATLAB macht etwas Ähnliches. Wenn Sie in MATLAB eine Matrixmultiplikation durchführen, wird BLAS aufgerufen. Die Performance-Einbußen sind praktisch Null, und Sie mussten kein Fortran, C oder C ++ schreiben, um die hohe Performance zu erzielen. Eine ähnliche Situation besteht in Python. Wenn Sie Bibliotheken verwenden können (z. B. NumPy, SciPy, petsc4py, dolfin von FEniCS, PyClaw), können Sie Ihren gesamten Code in Python schreiben und erhalten eine gute Leistung (eine Strafe von vielleicht 10-40%), weil alle rechnerisch Intensive Teile sind Aufrufe an schnell kompilierte Sprachbibliotheken. Wenn Sie jedoch alles in reinem Python schreiben würden, wäre der Leistungsverlust ein Faktor von 100-1000x. Also, wenn Sie Python verwenden wollten und eine benutzerdefinierte einschließen mussten, Bei einer rechenintensiven Routine ist es besser, diesen Teil in einer kompilierten Sprache wie C, C ++ oder Fortran zu schreiben und ihn dann mit einer Python-Schnittstelle zu verpacken. Es gibt Bibliotheken (wie Cython und f2py), die diesen Prozess erleichtern, und Tutorials, die Ihnen helfen. es ist im Allgemeinen nicht lästig.

Nutzungsumfang

Python wird allgemein als Allzwecksprache verwendet. Fortran beschränkt sich weitgehend auf numerisches und wissenschaftliches Rechnen und konkurriert hauptsächlich mit C und C ++ um Benutzer in dieser Domäne.

In der Computerwissenschaft konkurriert Python normalerweise nicht direkt mit kompilierten Sprachen, da die von mir genannten Performance-Nachteile auftreten. Sie würden Python in Fällen einsetzen, in denen hohe Produktivität und Leistung von untergeordneter Bedeutung sind, z. B. beim Prototyping numerisch intensiver Algorithmen, der Datenverarbeitung und der Visualisierung. Sie würden Fortran (oder eine andere kompilierte Sprache) verwenden, wenn Sie eine gute Vorstellung davon haben, wie Ihr Algorithmus und Ihr Anwendungsdesign aussehen sollten, Sie bereit sind, mehr Zeit mit dem Schreiben und Debuggen Ihres Codes zu verbringen, und die Leistung ist von größter Bedeutung. (Zum Beispiel ist die Leistung ein einschränkender Schritt in Ihrem Simulationsprozess oder ein wesentlicher Bestandteil Ihrer Forschung.) Eine gängige Strategie besteht darin, Python und eine kompilierte Sprache zu mischen (normalerweise C oder C ++, aber Fortran wurde auch verwendet). Verwenden Sie die kompilierte Sprache nur für die leistungsempfindlichsten Teile des Codes. Die Entwicklungskosten liegen natürlich darin, dass es schwieriger ist, ein Programm in zwei Sprachen zu schreiben und zu debuggen, als ein Programm in einer einzigen Sprache.

In Bezug auf die Parallelität weist der aktuelle MPI-Standard (MPI-3) native Fortran- und C-Bindungen auf. Der MPI-2-Standard hatte native C ++ - Bindungen, MPI-3 jedoch nicht, und Sie müssten die C-Bindungen verwenden. Es gibt MPI-Bindungen von Drittanbietern, z. B. mpi4py. Ich habe MPI4PY verwendet. es funktioniert gut und ist einfach zu bedienen. Für eine groß angelegte Parallelität (Zehntausende von Kernen) möchten Sie wahrscheinlich eine kompilierte Sprache verwenden, da Dinge wie das dynamische Laden der Python-Module Sie in den Arsch reißen, wenn Sie dies auf naive Weise tun. Es gibt Möglichkeiten, diesen Engpass zu umgehen, wie die PyClaw-Entwickler gezeigt haben, aber es ist einfacher, ihn zu vermeiden.

Persönliche Meinungen

Ich habe ungefähr ein Jahrzehnt Erfahrung in Fortran 90/95 und ich habe auch in Fortran 2003 programmiert. Ich habe ungefähr fünf Jahre Erfahrung im Programmieren in Python. Ich benutze Python viel häufiger als Fortran, weil ich ehrlich gesagt in Python mehr erledige. Der Großteil der Arbeit, die ich zu erledigen habe, erfordert keine großen Supercomputer-Ressourcen und ist im Allgemeinen nicht wert, in einer anderen Sprache neu entwickelt zu werden. Python ist daher gut geeignet, um ODEs und PDEs zu lösen. Wenn ich eine kompilierte Sprache verwenden muss, verwende ich C, C ++ oder Fortran in dieser Reihenfolge.

Der größte Teil des Fortran-Codes, den ich gesehen habe, war hässlich, vor allem, weil die meisten Computerwissenschaftler keine Best Practices kannten oder diesen ablehnten, die von Software-Ingenieuren in den letzten 30 Jahren entdeckt wurden. Das heißt: In Fortran gibt es kein gutes Unit-Testing-Framework. (Das Beste, auf das ich gestoßen bin, ist FUnit von der NASA, und das wird nicht mehr gepflegt.) Es gibt einige gute Python-Unit-Test-Frameworks, gute Python-Dokumentationsgeneratoren und im Allgemeinen viele bessere Beispiele für gute Programmierpraktiken.


Sehr schöne und vollständige Antwort :). Ich habe gestern Linux installiert, wo der Python-Compiler bereits vorhanden war. Jetzt habe ich mich gefragt, ob es eine einfache Möglichkeit gibt, Dateien zwischen meinem Linux- und Windows-Computer auszutauschen. Mir ist aufgefallen, dass immer wenn ich einen Stick zum Übertragen von Daten benutze, sowohl der Windows- als auch der Linux-Rechner bestimmte Teile auf de stich ignorieren (die im NFTS-Format formatiert sind).
Nick

und mein letztes Problem wurde mit dem FAT32-Format gelöst (so weit zumindest).
Nick

NB: FAT32 hat eine begrenzte maximale Dateigröße.
Meawoppl

@Meawoppl, gibt es eine bequemere Möglichkeit, Dateien zwischen Linux und Windows auszutauschen? Vielleicht Dropbox dann? Gibt es auch eine hardwarebasierte Lösung?
Nick

Halten Sie Ihre Dateien unter 4 GB: P Ich kenne keine gute Lösung. Die Konventionen für Dateinamen weisen ebenfalls einige Unzulänglichkeiten auf. Ich erinnere mich, dass ich einige Windows-Unterstützungen einmal gebrochen habe, indem ich eine Datei <3.txt benannt habe, was M $ ziemlich traurig machte. Die NTFS-Unterstützung unter Linux ist jetzt ziemlich gut, unter OSX jedoch ein absolutes No-Go. Ich dachte wirklich, wir hätten dieses Problem inzwischen gelöst.
Meawoppl

7

Ich würde mich von Fortan fernhalten oder, wenn Sie müssen, eine einigermaßen neue Version (2003 statt 77) verwenden. Viele physikalische Software (insbesondere Monte-Carlo-Simulationen) wurde in Fortran geschrieben, einfach weil die Projekte ursprünglich in den 80er Jahren begonnen wurden.

Davon abgesehen sind Python und Fortran zwei sehr unterschiedliche Sprachen, und wofür sie verwendet werden sollten, ist ganz anders. Python ist auf hohem Niveau und im Allgemeinen nicht so schnell (verglichen mit Fortran & C ++). Der Grund, warum es so häufig verwendet wird, ist, dass es für die meisten Dinge schnell genug ist und exzellente (mit Fortran betriebene) Bibliotheken für viele (aber nicht alle) Dinge hat, die Sie gerne tun würden. Es hat auch die exzellente Matplotlib zum Plotten (es wird also kein GNUplot benötigt) und Sie können eine recht anständige Leistung erzielen, wenn Sie Dinge wie Cython zum Schreiben der teuren Bits verwenden. Es wird jedoch nicht so schnell sein wie Fortran oder C ++, und die Parallelisierung ist ziemlich schrecklich, was es für hochperformantes numerisches Rechnen ungeeignet macht. Wenn das, was Sie wollen, durch Aufrufen von Fortran- oder C-Bibliotheken erledigt werden kann,

Fortran ist eine etwas niedrigere Sprache. Für numerische Daten ist die Bibliotheksunterstützung überraschend gut, sie ist jedoch immer noch sehr niedrig, sodass Sie eine Vielzahl von Fehlern erhalten, die Sie sonst vermeiden könnten, z. B. die versehentliche Übergabe der falschen Arraygröße an eine Methode. Diese Fehler sind schwer zu finden und Sie werden sie möglicherweise gar nicht bemerken. Vertrauen Sie mir, ich habe eine ganze Weile damit verbracht, Fortran 77 zu schreiben.

C ++ ist (meiner bescheidenen Meinung nach) ein fröhliches Medium. Mit Bibliotheken wie Armadillo oder Eigen kommen Sie mit einer relativ hohen Codierungsstufe und einer niedrigen Leistungsstufe klar.

Was die Leistung betrifft, so ist CPython derzeit die einzige echte Wahl für numerisches Python. Wenn Sie so etwas wie WinPython herunterladen, erhalten Sie auch die meisten Bibliotheken, die Sie benötigen.

Für Fortran an Fenstern ist es etwas schwieriger. Ich würde empfehlen, auf Linux umzusteigen und entweder Gfortran oder Intel Ifort Compiler zu verwenden. Nach meiner Erfahrung ist Ifort für numerischen Code in der Regel schneller, ist jedoch nur für den nicht kommerziellen, nicht akademischen Gebrauch kostenlos.

Zusammenfassend lässt sich sagen, dass Python die einfachere Wahl ist und die Arbeit viel angenehmer macht, es sei denn, Sie möchten wirklich schwere Simulationen ausführen. Es sollte auch für die meisten Projekte auf Studentenebene schnell genug sein. Wenn Sie eine bessere Leistung benötigen, schauen Sie sich zunächst die verschwendeten Mengen der bereits geschriebenen Bibliotheken an und überlassen Sie dies Ihrer Sprache. Wenn Sie Dinge von Grund auf neu schreiben müssen, verwenden Sie C ++.

Auch eine Warnung: Die meisten von Physikern geschriebenen Codes sind ziemlich schrecklich, vermutlich weil Physiker die Tendenz haben anzunehmen, dass das Programmieren einfach ist und nicht die gleiche Strenge erfordert, die sie in der Mathematik anwenden könnten. Erwägen Sie, eine Klasse zu besuchen oder ein Buch zu kaufen, in dem Programmieren unterrichtet wird.

Haftungsausschluss: Ich bin ein Physiker, der einige Zeit mit Monte-Carlo-Codes auf der Basis von Fortran 77 verbracht hat und derzeit alle Daten in Python verarbeitet.


In Bezug auf die Parallelisierung haben Forscher Python erfolgreich auf Zehntausenden von Kernen mit guter Paralleleffizienz parallel eingesetzt. (Zum Beispiel wurde PyClaw auf ganz Shaheen ausgeführt, was mehr als 65.000 Kernen entspricht.)
Geoff Oxberry,

1
Das ist möglich, aber meines Wissens nur, indem sichergestellt wird, dass der parallele Teil außerhalb von CPython stattfindet, was einen erheblichen Aufwand bedeutet. Der parallele Teil von PyClaw (PETSc) ist zum Beispiel in C geschrieben. Eine andere Alternative ist die Ausführung mehrerer Instanzen von CPython, die jedoch nicht unbedingt trivial sind.
LKlevin

Die meisten parallelen Anwendungen sind nicht trivial. Sie haben geschrieben: "[Python] -Parallelisierung ist ziemlich schrecklich, was sie für hochperformantes numerisches Rechnen ungeeignet macht." Niemand schreibt Hochleistungscode in reinem Python. Die Begründung für diese Entscheidung hat nichts mit Parallelität zu tun und macht die Verwendung von Python als Schnittstellensprache im Hochleistungsrechnen nicht ungültig, solange es angemessen verwendet wird. Ihr Zitat ist ein Strohmann, der die Themen Parallelität, Hochleistung und interpretierte Sprachen in Einklang bringt. Niemand, der dafür zuständig ist, würde eine solche Anwendung entwerfen.
Geoff Oxberry

Ich bin damit einverstanden, dass Python für fast alle Zwecke eine hervorragende Sprache für die Benutzeroberfläche ist, aber das ist keine Frage. Die meisten Anwendungen sind nicht trivial. Das Problem hierbei ist, dass alle Fälle der Parallelisierung, einschließlich der trivialen, in Python nicht trivial sind. Dies kann ärgerlich sein, wenn Ihr Problem ansonsten in Bezug auf Numpy- oder Cython-Vorgänge gut beschrieben ist. Nein, Sie würden dies auf einem 65000-Core-Cluster nicht verwenden, aber Sie akzeptieren möglicherweise den 2-fachen Leistungseffekt auf einem 100-Core.
LKlevin

Was die Parallelität angeht, ist das Schöne an Fortran, dass es neben MPI / OpenMP auch Co-Arrays gibt, die jetzt zum Standard gehören. Siehe z. B. jolts.stanford.edu/72/…
stali

7

Python ist eine sehr langsame Hochsprache. Für eine schnelle Zahlenverarbeitung müssen Sie die wichtigsten Rechenkerne in einfachen Sprachen wie C / C ++ schreiben, was bedeutet, dass Sie jetzt nicht nur eine, sondern mindestens zwei Sprachen lernen müssen. Sie müssen sich auch mit zusätzlichen Kopfschmerzen im Zusammenhang mit Debugging / Installation / Wartung usw. auseinandersetzen. Die meisten Leute verwenden Python als syntaktischen Zucker, um die Mängel von C / C ++ zu verbergen.

Das moderne Fortran (90 und höher) ist sowohl schnell als auch auf hohem Niveau mit fast MATLAB-ähnlicher Syntax. So können Sie Dinge tun wie:

k=k+matmul(transpose(B),matmul(D,B))*weight(i)*detj

oder

indx(:)=indxmap(indx(:),2)

oder noch einfacher

indx=indxmap(indx,2)

etc.

Unter Linux gibt es eine Reihe kostenloser Fortran-Compiler. ich benutze

  1. GCC
  2. Solaris Studio
  3. Open64
  4. Intel (nur für nicht kommerzielle Zwecke)

Ich benutze keinen Mac / OSX, aber es gibt kostenlose PGI.

Und bitte verwenden Sie FORTRAN 77 nicht. Niemand verwendet es, um neuen Code zu schreiben.

Haftungsausschluss: Ich habe Python persönlich angeschaut, um meinen eigenen kleinen, unstrukturierten FE-Code (der auf PETSc aufbaut) zu schreiben, aber der Arbeitsaufwand / die damit verbundene Codierung war mehr als das reine Schreiben von Fortran 95.


1
Dazu möchte ich hinzufügen, dass Sie in Fortran 2003 ziemlich ernsthafte objektorientierte Programmierung durchführen können; siehe zum Beispiel diese Anleitung . Ich habe es oft in meinem eigenen Code verwendet und es war sehr effektiv für das, was ich tun möchte. Viele Leute werden dir raten, es zu vermeiden - ich sage, sei aufgeschlossen, es könnte dir sehr gefallen. Das tue ich sicher.
Daniel Shapero

4

Python ist sehr praktisch für eine vollständige Simulationsanalyse mit gut dokumentierten, vielseitigen Paketen: Gittererzeugung, Arrayberechnung und Datenstrukturverarbeitung ( Numpy und Pandas ) sowie Datenvisualisierung mit Matplotlib. Für komplexe Simulationen mit großen Ergebnisdateien ist es noch besser, mit dem VTK-Paket zu arbeiten, mit dem Datenexporte von erweiterten Open-Source-Anwendungen (wie Paraview oder Visit) gelesen werden können.

Fortran ist seit einiger Zeit die bevorzugte Sprache für verschiedene Bereiche in Simulationen. Es ist leicht lesbar (allerdings weniger lesbar als Python-Code). Die Handhabung von Arrays ist eine der Stärken der Sprache. Sie ist recht einfach zu definieren und in allen Arten von Array-Operationen zu verwenden. Dies ist auch beim Debuggen praktisch.

Der Vergleich kommt auf die Leistung an : Ich habe nur umfangreiche Berechnungen mit kompilierten Sprachen (C ++ und Fortran 90) durchgeführt, aber nie mit Python. Ein anderer Thread enthält weitere Informationen zur Leistung von interpretierten und kompilierten Sprachen: Welche Sprache sollte ich verwenden, wenn ich einen Grundkurs in Computerprogrammierung unterrichte?

Persönlich mag ich die Arbeit mit Python im Allgemeinen, insbesondere für die Nachbearbeitung. Python-Programmierung macht Spaß!


1
Leistung ist fast immer wichtig. Mangelnde Aufmerksamkeit für die Leistung ist der Grund, warum Benutzer 8 Kerne mit 16 GB RAM benötigen, um E-Mails zu lesen und im Internet zu surfen.
Stali

Ich hatte das Pech, den Python-Code anderer lesen zu müssen. Ich würde py-Code nicht als einfach zu lesen einstufen.
Biswajit Banerjee

@ stali: Ich stimme vollkommen zu
SAAD

1
@BiswajitBanerjee: Es ist nicht unmöglich, komplizierten Code mit einer beliebigen Sprache zu schreiben, aber ich kann zumindest leicht Ein- und Ausgänge von Funktionen identifizieren, hier wird Fortran schrecklich! :)
SAAD

3

Mit Python brauchen Sie Gnuplot nicht, Sie können zum Beispiel matplotlib und / oder die IPython-Shell verwenden. IPython ist eine interaktive Python-Shell, die im% pylab-Modus fast die gleichen Zeichenbefehle bietet, die Sie in MATLAB haben.

Es ist sehr wahrscheinlich, dass sich das wissenschaftliche Rechnen in den nächsten 5 Jahren in großem Umfang von MATLAB auf Python verlagern wird.


Ein Vorteil von Gnuplot ist, dass es fast immer auf Linux-Rechnern (Cluster / Server usw.) installiert ist und sehr nützlich für schnelle / schmutzige Prozesse ist. Es ist wie vi für nämlich.
Stali

1

Ich würde weiterhin MATLAB verwenden. Es ruft schnelle mathematische Bibliotheken auf, und Sie werden keinen großen Leistungsunterschied feststellen, wenn Sie unter Windows zu FORTRAN wechseln. Gleichzeitig verfügen Sie in MATLAB über eine bessere Infrastruktur für das Melden von Ergebnissen und das Ausführen Ihres Codes. Der Nachteil von MATLAB sind die Kosten. FORTRAN ist grundsätzlich kostenlos und es gibt eine Reihe von kostenlosen Bibliotheken.

FORTRAN ist sehr einfach zu erlernen und zu programmieren. Es macht im Wesentlichen das, was der Name andeutet: Es übersetzt Ihre Formeln in Code, der leicht zu lesen und zu verstehen ist. Das ist der Grund, warum Physiker es früher oft benutzten. Solange es in Ihrem Code hauptsächlich darum geht, physikalische Probleme zu lösen (keine GUIs zu erstellen oder andere coole Dinge zu erledigen), ist FORTRAN-Code einfach zu warten.

Ich würde Python nur empfehlen, wenn Sie gerne programmieren. Denken Sie daran: Wenn Sie eine Lösung für ein physikalisches Problem programmieren, genießen Sie es, einen Teil der Lösung zu programmieren? Wenn Sie dies tun, ist Python eine Option, da die Sprache viel besser ist als die von MATLAB.


2
Ihre Aussage über die Leistungsunterschiede beim Wechsel von MATLAB zu Fortran ist im Allgemeinen nicht richtig. Fortran ist großartig, wenn Sie Code schreiben, für den Arrays eine von Natur aus gute Datenstruktur darstellen, wenn Sie damit leben können, wie E / A gehandhabt wird, und wenn es die Bibliotheken enthält, die Sie benötigen. Numerische Bibliotheken in Python überschneiden sich stark mit MATLAB, und ich finde es einfacher, Python-Interfaces in C-Code zu schreiben, als MATLAB-Interfaces in C-Code.
Geoff Oxberry

Manchmal muss man es viel Unterschied. Ich habe kürzlich ein Physiksimulationsprogramm von Matlab (mit dem Paket bvp6c intern) auf Fortran 2008 (mit dem Paket bvp_solver intern) umgeschrieben, und die Ausführungszeit ist nach dem Wechsel auf nur 1,4% gesunken, obwohl ich die Algorithmen nicht geändert habe oder Gesamtstruktur des Programms. Für eine Simulation, für deren Konvergenz bisher ca. 3,5 Tage pro Datenpunkt benötigt wurden , war dies eine sehr deutliche Verbesserung.
Jabirali
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.