2009-02-03 13 views
19

Ich bin sehr interessiert an Mathematik und Programmierung und planen zu starten symbolische Mathematik Projekt von Grund auf neu.Symbolische Mathematik Python?

  1. Ist das eine gute Projektidee?

  2. Wo anfangen?

  3. Wie sollte man dieses Projekt angehen?

  4. Irgendwelche guten Ressourcen?

Vielen Dank im Voraus.

Antwort

19
  1. Es ist ein gutes Projekt Programmierkenntnisse zu üben. Aber wenn Sie eine echte Bibliothek erstellen möchten, die andere Leute wollen verwenden, um dies ein Projekt ist, dass Sie nicht wollen, allone starten und von Grund auf neu ...

  2. Wo anfangen: Werfen Sie einen Blick auf die Lösungen die sind schon da draußen und überlegen, was du anders machen willst. Wie wird sich Ihr Projekt von anderen unterscheiden?

  3. Ressource: SymPy is a Python library for symbolic mathematics

+4

Eine andere Bibliothek Option ist, Sage zu verwenden (http://www.sagemath.org/) –

4

@Resources: Sie könnten einen Blick auf pythonica werfen - das war ein Versuch, ein Mathematica-Programm in Python zu implementieren (Quellcode steht zum Download zur Verfügung).

3

Diese pySym Blog könnte Sie auch interessieren, um Ideen und Starter zu erhalten, und zu lernen, was andere mit python tun & symbolische Mathematik.

1

Mehr in der Art der Ressourcen: SympyCore:

Ziel des SympyCore Projektes ist es, neue Hochleistungslösungen zu suchen, symbolischen Ausdrücke in dem Programmiersprache Python darzustellen und zu manipulieren, und Neues auszuprobieren Symbolische Modelle, um ein grundsätzlich konsistentes und ausreichend allgemeines symbolisches Modell zu erreichen, das leicht auf ein Computer Algebra System (CAS) erweitert werden kann.

7

Symbolische Mathematik ist ein Spaß-Projekt. Ob jemand es benutzt oder nicht, scheint in deiner Frage nicht von Bedeutung zu sein, also tauche ein.

Ich habe zwei davon über die Jahre geschrieben. Am coolsten war eine für SQL-where-Klauseln - sie führte einige symbolische Manipulationen am SQL durch, um einige zusätzliche AND-Bedingungen einzufügen. Nicht ein vollständiger "Löser" oder "Optimierer" oder irgendetwas, nur ein paar symbolische Manipulationen irgendeiner SQL-Where-Klausel sind möglich. Das weniger coole war für einen Debugger; Es wurde komplexe Mathematik verwendet, um Offsets für Variablen (symbolisch) zu berechnen.

Sie beginnen mit Klassen für Elemente eines mathematischen Ausdruck definieren - Operanden, Operatoren, Funktionen etc.

Sie müssen entscheiden, welche Manipulationen diese Objekte zu beteiligen haben.Einen konkreten Wert für einen Ausdruck zu erhalten, ist einfach und offensichtlich. Beginnen Sie mit dem Fall, in dem alle Variablen eine Bindung haben.

Dann behandeln Sie den Fall, in dem einige Variablen nicht gebunden sind und Sie nur Teile des Ausdrucks auswerten können.

Dann handhaben Umordnen eines Ausdrucks in eine kanonische Form. Das heißt, Sie haben eine Teilbewertung durchgeführt und haben Add(Variable(x), Add(Variable(x), Lit(3))). Sie müssen Regeln schreiben, um dies in Add(Multiply(Lit(2), Variable(x)), Lit(3)) umzuwandeln.

Eine sehr coole Übung ist die Optimierung der Klammer, so dass die gedruckte Ausgabe die wenigsten Klammern benötigt, um die Bedeutung zu erfassen.

Es gibt viele, viele andere "Ausdruckstransformations" -Regeln, die wir alle in der Schule lernen, um algebraische Manipulationen zu machen. Viele von ihnen.

Insbesondere kann das Umordnen einer Gleichung zum Isolieren einer Variablen in einigen Fällen sehr schwierig sein.

Die Ableitung der Transformation ist einfach, aber die symbolische Integration ist wirklich, wirklich schwer mit einer Tonne Spezialfälle.

Die Grundlagen sind lustig. Je nachdem, wie weit du gehen willst, wird es immer schwieriger.

10

1.Ist das eine gute Projektidee?

Ja; Ich würde erwarten, dass es eine endlose Quelle interessanter Arbeit bietet, die Ihre Programmierfähigkeiten recht schnell testen und erweitern wird.

2.Wo starten?

Ich zweitens die anderen Vorschläge, die Sie bei bestehenden Arbeiten betrachten sollten. SAGE ist sehr beeindruckend und wenn Sie mich um Rat gefragt hätten, würde ich vorschlagen, dass Sie zuerst ein grundlegendes System schreiben, um Arithmetik mit Zahlen und Symbolen zu machen; Dann schau dir SAGE an und schreibe ein Modul, um das System zu erweitern, mit anderen Worten, du wirst ein Beitrag zu etwas Größerem sein, anstatt zu versuchen, alles alleine zu machen. Schau dir auch Mathematica und Maple, Macsyma und Axiom an. Die letzteren 2 sind frei (ich denke), aber sie sind alle gut online dokumentiert und eine große Quelle von Ideen und Herausforderungen.

3.Wie soll man dieses Projekt angehen?

Als würde man einen Elefanten essen. Ein Bissen nach dem anderen. Im Ernst, ich denke, es gibt einige Kernfragen, wie die Darstellung von Ausdrücken und einige Grundfunktionen (Arithmetik an Polynomen), an denen man sich die Zähne ausbeißen könnte.

4.Any gute Ressourcen?

Viele und viele. googeln Sie nach "Computeralgebra", "Termersetzung". Schauen Sie sich an, was auf Amazon verfügbar ist. Und wenn Sie Zugriff haben, sehen Sie sich die digitale Bibliothek ACM

Viel Glück.

1

Ich denke, das ist ein großartiges Projekt für einen Programmierer jeder Fähigkeitsstufe. Es ist ziemlich einfach, einen symbolischen Rechner zu implementieren, der gerade stark genug ist, um nützlich zu sein. Wenn Sie weiter an der Breite arbeiten, gibt es so viele lustige Funktionen hinzuzufügen, dass Sie sich damit lange beschäftigen können. Wenn Sie sich für die Tiefe entscheiden, werden Sie feststellen, dass die Dinge bald sehr hart werden. Du kannst dich auf unbestimmte Zeit herausfordern, wenn du das magst.

Es gibt viele großartige Ressourcen.Ich empfehle das Buch "Moderne Computeralgebra" von Gathen und Gerhard, obwohl es sich in Wirklichkeit eher um Arithmetik in Sonderformen (Polynome, ganze Zahlen, Matrizen) als um allgemeine symbolische Manipulation handelt. Wenn Sie anfangen, können Sie vielleicht besser von einem Lisp- oder Schema-Lernprogramm profitieren, da symbolische Mathematik in Lisp konzeptionell sehr einfach ist und Sie in Python eine symbolische Engine erstellen müssen, die Sie mehr oder weniger benötigen Implementieren Sie ein Mini-Lisp als Grundlage.

Wie andere bereits erwähnt haben, könnten Sie sich SymPy und sympycore für Inspiration oder konkrete Algorithmen ansehen. Der Quellcode für jedes Projekt ist ein bisschen komplex (aber sicher nicht schwer zu lernen).

(Wenn ich ein bisschen stecke, ich wrote a tiny symbolic engine eine Weile zurück (als ein Wochenende Projekt - es ist sehr klein und ich habe nicht daran gearbeitet seit). Es implementiert eine generische symbolische Maschine in etwa 200 Zeilen Code und dann gibt es 300 Codezeilen, die symbolische Arithmetik und symbolische boolesche Algebra implementieren, mit einigen sehr rudimentären Vereinfachungen, die vielleicht einfacher zu verstehen sind als SymPy, aber alles darin sind Dinge, die man leicht für sich entdecken kann und die vielleicht mehr Spaß machen so.