Matlab vs. Julia vs. Python

Ich benutze MATLAB seit über 25 Jahren. (Und bevor ich MATRIXx benutzte, konnte er sich nicht in Ruhe ausruhen.) Dies ist nicht die erste Sprache, in der ich programmieren lernte , aber dies ist die Sprache, mit der ich das mathematische Alter erreicht habe. MATLAB zu kennen, hat sich für meine Karriere gelohnt.

Es ist jedoch unmöglich, das Wachstum von Python beim wissenschaftlichen Rechnen zu ignorieren. MathWorks sollte das gleiche Gefühl haben: Sie haben nicht nur die Möglichkeit hinzugefügt, Python direkt von MATLAB aus aufzurufen , sondern auch einige seiner Sprachfunktionen ausgeliehen, z. B. einen aggressiveren Durchlauf für binäre Operatorkomponenten.

Der Moment kam, als ich meine weitere Verwendung von MATLAB in Forschung und Lehre in Frage stellte. Trotzdem habe ich so viel in die Materialien investiert, dass es schwierig war, die Motivation zu finden, etwas Neues zu lernen.

EDISON Software - Webentwicklung
Dieser Artikel wurde mit der Unterstützung von EDISON Software übersetzt, die sich um die Gesundheit der Programmierer und deren Frühstück kümmert und auch kundenspezifische Software entwickelt .

MATLAB-Einführungstutorial, das ich für Computermathematik mitverfasst habe. Das Buch enthält über 40 Funktionen und 160 Rechenbeispiele und behandelt das, was meiner Meinung nach für die Verwendung von MATLAB für numerisch-wissenschaftliche Berechnungen von grundlegender Bedeutung ist. Teilweise aus Gründen der Selbstverbesserung und teilweise, um den Nutzen des Buches in diesem Jahr zu steigern, habe ich beschlossen, den Code in Julia und Python zu übersetzen. Diese Erfahrung führte mich zu speziellen Ansichten in drei Sprachen in Bezug auf das wissenschaftliche Rechnen, die ich im Folgenden beschreiben möchte.

Ich werde Fragen zu Kosten und Offenheit verschieben. MATLAB ist im Gegensatz zu Python und Julia kein Freeware-Produkt. Das ist ein großer Unterschied - für einige, aber ich möchte die technischen Vorzüge berücksichtigen. Viele Jahre lang hat MATLAB in einer Reihe von sehr nützlichen Aspekten weit über jedes kostenlose Produkt hinausgearbeitet. Wenn Sie produktiv sein möchten, sind die Kosten enorm. Dies ist eine separate Diskussion der platonischen Anziehungskraft von Sprache und Ökosystem.

Wenn wir Kostenprobleme auslassen, hängt der Grund für die vielen Unterschiede in diesen Sprachen mit ihrer Herkunft zusammen. MATLAB legte zunächst einen Schwerpunkt auf den mathematischen Aspekt, nämlich die Rechenmathematik. Python, das in den 1980er Jahren erschien, stellte die Informatik in den Vordergrund. Julia wurde 2009 gegründet und hat sich zum Ziel gesetzt, ein Gleichgewicht zwischen den beiden vorherigen Sprachen herzustellen.

MATLAB


Anfänglich war jeder Wert in MATLAB ein Array von Gleitkommazahlen mit doppelter Genauigkeit. Beide Aspekte dieser Auswahl, Arrays und Gleitkommazahlen, wurden von Entwurfsentscheidungen inspiriert.

Der IEEE 754-Standard für Gleitkommazahlen wurde erst 1985 übernommen, und der Speicher wurde in Kilobyte und nicht in Gigabyte gemessen. Doppelte Gleitkommazahlen waren nicht die effizienteste Methode zur Anzeige von Zeichen oder ganzen Zahlen, aber sie waren das, was Wissenschaftler, Ingenieure und alle Mathematiker die meiste Zeit verwenden wollten. Außerdem sollten keine Variablen deklariert und kein Speicher zugewiesen werden. Indem Sie Ihren Computer diese Aufgaben erledigen lassen und Datentypen entfernen, haben Sie Ihr Gehirn frei gemacht, über Algorithmen nachzudenken, die mit Daten arbeiten.

Arrays sind wichtig, da numerische Algorithmen in der linearen Algebra ihre eigenen Formen haben: LINPACK und EISPACK . Der Zugriff auf sie mit einem Standardmedium für wissenschaftliches Rechnen, FORTRAN 77, war jedoch ein mehrstufiger Prozess, bei dem Variablen deklariert, verborgene Routinennamen aufgerufen, Code kompiliert und anschließend Daten und Ausgabedateien analysiert wurden. Die Aufzeichnung der Matrixmultiplikation in Form von A * B und die Auflistung der Antwort führten sofort zu einer Veränderung des Spielverlaufs.

MATLAB machte auch die Grafiken einfach und offen. Keine komplexen maschinenabhängigen Bibliotheken mit einfachen Aufrufen, nur Plot (x, y), und Sie haben gesehen, was jemand anderes mit MATLAB gesehen hätte. Es gab noch mehr Innovationen, wie komplexe Zahlen, spärliche Matrizen, Tools für die Erstellung plattformübergreifender grafischer Benutzeroberflächen und eine Reihe fortschrittlicher ODE-Löser, die MATLAB zu einem Ort für wissenschaftliches Rechnen mit rasanter Geschwindigkeit machten.

Ein Design, das ideal für interaktives Computing geeignet war, trug jedoch nicht immer dazu bei, gute und produktive Programme zu schreiben. Das Verschieben von Daten zwischen vielen Funktionen erforderte das Manipulieren einer Vielzahl von Variablen und den häufigen Zugriff auf die Dokumentation von Eingabe- und Ausgabeargumenten. Eine Funktion pro Datei auf der Festplatte in einem flachen Namespace war für ein kleines Projekt sehr einfach, für ein großes Projekt jedoch sehr schwierig. Bestimmte Programmiermuster (Vektorisierung, Vorbelegung des Speichers) sollten angewendet werden, wenn Sie Probleme mit der Rechengeschwindigkeit vermeiden möchten. Wissenschaftliches Rechnen wird derzeit in einer viel größeren Anzahl von Bereichen mit einer großen Anzahl unterschiedlicher Datentypen angewendet. Usw.

Als Reaktion darauf führte MathWorks weitere Innovationen in MATLAB ein: integrierte Funktionen, verschachtelte Funktionen, nachgestellte Variablen, zahlreiche Datentypen, objektorientierte Funktionen, Unit-Test-Infrastrukturen usw. Jede Innovation war wahrscheinlich eine Lösung für ein wichtiges Problem. Die Anhäufung von 40 Jahren dieser Veränderungen hatte jedoch den Nebeneffekt, dass die Einfachheit und Einheitlichkeit des Konzepts verwischt wurden. 2009 habe ich auf weniger als 100 Seiten ein Buch geschrieben , das die Grundlagen von MATLAB ziemlich gut behandelt. Soweit ich weiß, sind all diese Dinge noch verfügbar. Aber Sie müssen jetzt viel mehr wissen, um sich selbst als Profi zu bezeichnen.

Python


Zum Teil ist die Geschichte von Python ein Spiegelbild der Geschichte von MATLAB. Beide Sprachen hatten eine interaktive Befehlszeile (jetzt heißt sie REPL und ist eine Abkürzung für Read-Eval-Print-Loop, die als Read-Evaluate-Print-Loop übersetzt wird, sowie die Freiheit von verschiedenen Deklarationen und Kompilierungen. MatLab wurde jedoch in erster Linie mit Blick auf das Rechnen erstellt Analyse, während Python für Hacker erstellt wurde. Dann war jede der Sprachen in der Lage, ihre Benutzerbasis durch Aktualisierung und Erweiterung der Funktionalität zu erweitern.

Meiner Meinung nach leidet Python immer noch unter der Armut seines mathematischen Apparats. Es enthält so unangenehme Kleinigkeiten wie das Vorhandensein von ** anstelle von ^, @, um Matrizen zu multiplizieren (es wurde kürzlich hinzugefügt!), Nicht die Größe, sondern die Form der Matrix, zeilenorientierte Speicherung usw. Wenn Sie der Meinung sind, dass V.conj (). T @ D ** 3 @ V eleganter ist als V ∗ D 3 V, sind Sie höchstwahrscheinlich nicht in Ordnung mit Ihrem Kopf. Außerdem beginnt die Indizierung bei 0 (anstelle von 1). Ich hatte Gelegenheit, die gegenteilige Meinung kennenzulernen , aber meiner Meinung nach ist es nicht so überzeugend. Offensichtlich ist dies alles eine Frage persönlicher Vorlieben, ein Thema heiliger Kriege im Internet, da Sie immer ein umständliches Beispiel zu Ihrem Vorteil geben können. Was genau ist es für mich? es scheint überzeugend, weil wir seit Jahrzehnten mit der mathematischen Indizierung von Vektoren und Matrizen mit 1 begonnen haben und viele Pseudocodes auf dieser Annahme beruhen.

Zusätzlich zu einigen Unannehmlichkeiten finde ich das Python + NumPy + SciPy-System umständlich und inkonsistent. Ein gutes Beispiel ist die Tatsache, dass es trotz der starken Fokussierung auf das Objekt Matrixklassen gibt und deren Verwendung nicht empfohlen wird. Vielleicht hat mich MatLab so verwöhnt. Aber ich denke, Matrizen sind ein wichtiges Objekt, das man griffbereit und aktiv nutzen kann. Ist die Fähigkeit, * zu verwenden, um verschiedene Operationen mit Arrays und Matrizen auszuführen, nicht das Hauptmerkmal von OOP? Im Allgemeinen gibt es in dieser Hinsicht viele unglückliche Momente. (Warum brauche ich den Befehl spsolve überhaupt ? Warum kann ich den Befehl solve nicht einfach auf eine dünne Matrix anwenden? Und davon gibt es immer noch eine Menge.)

Es gibt auch Stellen, an denen das numerische Ökosystem etwas schlechter aussieht. Beispielsweise sehen quadratische und ODE-Löser 2019 minimalistisch aus. Soweit ich weiß, gibt es keine Methoden für DAE, DDE, symplektische oder implizite Löser, die Krylovs interne Iterationen erlauben. Schauen Sie, diese Funktionen sind meistens 30 Jahre oder länger - sie sind immer noch gut, aber bei weitem nicht perfekt. Matplotlib ist ein erstaunliches Paket, mit dem man arbeiten kann, und in einigen Fällen sah es besser aus als MATLAB, aber ich vermisse 3D.

Einige Experten argumentieren, dass es Gründe gibt, warum Python-Code versucht, Geschwindigkeit mit kompilierten Sprachen zu bekämpfen. Ich bin überrascht über das Suchergebnis " Python ist zu langsam ." Die Python-Champions zitieren viele der Argumente / Entschuldigungen, die die Leute damals für MATLAB vorbrachten. Das bedeutet nicht, dass sie falsch sind, aber es ist mehr als nur ein Problem der Wahrnehmung .

Ich verstehe, warum Python für viele Menschen im wissenschaftlichen Rechnen so aufregend war. Es hat eine gewisse Syntax und die Leistungsfähigkeit von MATLAB, erhältlich von REPL. Es verfügt über hervorragende Tools und funktioniert gut mit anderen Sprachen und Bereichen der Berechnung. Er bot es kostenlos und mit viel besserer langfristiger Reproduzierbarkeit an. Offensichtlich funktioniert dies gut für viele Menschen, die wahrscheinlich keinen Grund zur Veränderung sehen.

Aufgrund meiner Kenntnisse im Bereich des wissenschaftlichen Rechnens zwingt mich Python dazu, mehr Routinearbeiten zum Lernen und Verwenden auszuführen, als ich es gewohnt bin. Für einige Zeit werden wir nicht wissen, ob es in der Gemeinde weitergeht oder bereits kurz vor seinem Höhepunkt steht.

Julia


Julia hat ihre Vor- und Nachteile, da es spät ist. Ich bewundere die Macher von Julia dafür, dass sie verstehen, dass sie mehr können

Wir wollen eine Open-Source-Sprache mit einer Bibliothekslizenz. Wir wollen C-Geschwindigkeit mit Ruby-Dynamik. Wir möchten, dass die Sprache homoionisch ist, mit echten Makros wie Lisp, aber mit offensichtlichen, vertrauten mathematischen Notationen wie in Matlab. Wir möchten etwas, das so programmierbar ist wie Python, so einfach wie Statistik für R, so natürlich wie die Verarbeitung von Zeichenfolgen wie Perl, so leistungsfähig wie lineare Algebra wie Matlab und in der Lage ist, Programme wie eine Shell zusammenzufügen . Etwas leicht zu lernen, aber gleichzeitig den ernsthaftesten Hackern gefällt. Wir möchten, dass es interaktiv ist, und wir möchten, dass es kompiliert wird.

Ich glaube, dass dies weitgehend gelungen ist. In der Version 1.0 schienen sie sich etwas von REPL und MATLAB zu unterscheiden. (Wie genau ist LinRange besser als LinSpace?) Obwohl es Nitpicking ist.

Dies ist die erste Sprache, die ich verwendet habe, mit der Fähigkeit, über ASCII hinauszugehen. Die Verwendung von Variablen wie Phi und Operatoren wie ≈ befriedigt mich übermäßig. Es ist mehr als eine schöne Hülle; Mehr wie die mathematischen Ausdrücke aussehen zu können, die wir schreiben, ist ein echtes Plus, obwohl es das Lernen und die Dokumentation ein wenig erschwert.

Jobs bei Julia haben mir gezeigt, dass ich aufgrund der Wahl von MATLAB einige Programmierkenntnisse erworben habe, und nicht aufgrund seiner inhärenten Überlegenheit. Vektorisierung ist für viele Dinge nicht selbstverständlich. Julia verrät, dass Sie jede Funktion vektorisieren können, indem Sie dem Namen einfach einen Punkt hinzufügen. Wenn Sie eine Matrix mit Hilfe des Verständnisses konstruieren, sehen verschachtelte Schleifen (oder Raster-Raster-Tricks) im Vergleich wie fehlerhafte Peitschen aus, und wenn Sie die Matrix als Ganzes mit einem Generator für einfache Summierung umgehen, erhalten Sie etwas für nichts. (Ich weiß, dass Python ähnliche Sprachfunktionen hat.)

Das große Merkmal des mehrfachen Versendens macht einige Dinge viel einfacher und verständlicher als die Ausrichtung des Objekts. Angenommen, Sie haben die Klassen Wall und Ball in einer traditionellen objektorientierten Sprache. Welche Klasse sollte die Kollision eines Balls mit einer Wand erkennen? Oder brauchen Sie eine Raumklasse, um den Schiedsrichter zu spielen? Fragen wie diese können mich ablenken. Bei der Mehrfachplanung werden Daten in Objekttypen gepackt, Methoden, die mit Daten arbeiten, sind jedoch nicht an eine Klasse gebunden. Also
Funktion detect_collision (B :: Ball, W :: Wall)
kennt sich mit Typen aus, wird aber unabhängig von ihnen bestimmt. Ich habe viel programmiert, um zu verstehen, wie interessant und potenziell wichtig das Konzept der Mehrfachverteilung für die Erweiterung der Sprache ist.

Das numerische Ökosystem entwickelt sich rasant. Mein bestes Beispiel ist DifrentialEquations.jl , geschrieben von Chris Rakautskas . Wenn diese Software in Kürze nicht den Wilkinson-Preis gewinnt, ist das System defekt. Gehen Sie einfach auf die Website und machen Sie sich bereit, Berufung einzulegen.

Ich habe die großen Geschwindigkeitsgewinne, die Julia gegenüber MATLAB verspricht, noch nicht gesehen. Dies ist zum Teil meine relative Unerfahrenheit und die Art der Aufgaben, die ich durchführe, aber zum Teil, weil MathWorks eine unglaubliche Arbeit geleistet hat, den Code automatisch zu optimieren. Auf jeden Fall ist dies nicht der Aspekt der Codierung, auf den ich mich die meiste Zeit konzentriere.

Das Programmieren in Julia hat mich einige Zeit gekostet, um mich wohl zu fühlen (vielleicht werde ich nur alt und kristallisiert). Dies lässt mich mehr über Datentypen nachdenken, als ich möchte, und es besteht immer der Verdacht, dass ich den richtigen Weg verpasst habe, um etwas zu tun. Aber für den täglichen Gebrauch werde ich mich höchstwahrscheinlich an Julia als MATLAB wenden.

Zusammenfassung


MATLAB ist eine Unternehmenslösung, die hauptsächlich zur Lösung technischer Probleme eingesetzt wird. Es bleibt das einfachste Werkzeug zur Lösung numerischer Probleme. Eine wichtige Rolle spielen dabei zweifellos die sehr wichtige Dokumentation und die zehnjährige Entwicklung des Unternehmens.

MATLAB ist wie eine BMW Limousine aus der Welt des wissenschaftlichen Rechnens. Es ist teuer, noch bevor Sie über Zubehör sprechen (Tool-Kit). Sie bezahlen für einwandfreien und unterbrechungsfreien Betrieb und Service. Es zieht aber auch unverhältnismäßig viel Hass an .

Python ist ein Ford Pickup. Es ist allgegenwärtig und wird von vielen geliebt (in den USA). Es kann tun, was immer Sie wollen, und es wurde entwickelt, um das zu tun, was andere Autos nicht können. Höchstwahrscheinlich werden Sie es hin und wieder wollen. Aber das gibt Ihnen nicht viel Fahrerfahrung.

Julia ist Tesla. Es wurde mit dem mutigen Ziel gebaut, die Zukunft zu verändern, und es ist möglich. Es kann aber auch nur eine Erwähnung sein. Gleichzeitig werden Sie dort ankommen, wo Sie auf Stil sind, und das mit einem großen Vorrat an Kraft.


Lesen Sie auch den Blog
EDISON Unternehmen:


20 Bibliotheken für
spektakuläre iOS-Anwendung

Source: https://habr.com/ru/post/de480716/


All Articles