So lösen Sie mathematische Gleichungen mit core.logic

8

Ich habe versucht, eine Abfrage in core.logic einzugeben:

%Vor%

Und die Eingabeaufforderung sagt,

%Vor%

Falls ich nicht völlig falsch verstanden habe, was Logikprogrammierung ist, gibt es Möglichkeiten, dieses Problem mit core.logic zu lösen?

    
zcaudate 25.09.2012, 22:36
quelle

3 Antworten

5

Soweit ich core.logic finden kann, kann die Algebra diese Gleichung nicht lösen. Es kann grundlegende mathematische Berechnungen durchführen, obwohl die Eingaben für diese Mathematik tatsächliche Werte sein müssen, nicht LVar s, da die mathematischen Funktionen auf diesen nicht funktionieren können:

%Vor%

funktioniert, wenn x einen eindeutigen Wert hat und schlägt fehl, wenn x nicht:

%Vor%     
Arthur Ulfeldt 25.09.2012, 23:20
quelle
5

Sie sollten The Reasoned Schemer für Ideen lesen. Im Grunde ist die Art und Weise, wie man Mathematik in einem Logikprogramm ausführt, listenbasierte Codierungen von Zahlen, die die Logik-Engine nach Bedarf erweitern kann, um Dinge auszuprobieren. Ich habe das Buch nicht griffbereit, aber es kodiert Ganzzahlen als eine Liste von Bits, auf eine seltsame Art und Weise kann ich mich nicht recht erinnern: vielleicht (1) repräsentiert 0, (0) ist illegal, und das MSB ist zuletzt in der Liste?

Wie auch immer, das ist eine Menge Arbeit; David Nolen hat kürzlich auch etwas über finite Domains in core.logic eingeführt. Ich weiß nicht, wie diese funktionieren, aber ich denke, sie vereinfachen das Problem sehr für Sie, indem Sie angeben, welche Arten von Zahlen Sie als Lösung für Ihr Problem betrachten.

    
amalloy 25.09.2012 23:44
quelle
2

core.logic in seiner aktuellen Form ist nicht als Lösung für numerische Gleichungen ausgelegt - es ist besser geeignet, um logische Probleme zu lösen und relationale Ausdrücke.

Sie haben grundsätzlich zwei praktische Möglichkeiten, mathematische Gleichungen zu lösen:

  • Analytische Löser - Lösungen können für einfache Fälle, z.B. quadratische Gleichungen wie die, die Sie oben haben, aber sie werden immer schneller komplex und werden dann für viele Gleichungen unmöglich / undurchführbar. Dies ist ein großes offenes Forschungsthema.
  • Numerische Solver - diese Techniken sind viel allgemeiner und können für nahezu jede Art von Gleichung verwendet werden. Die Ergebnisse sind jedoch nicht exakt und die Algorithmen können die richtige Lösung nicht finden, wenn die Gleichung "unangenehme" Merkmale aufweist (Diskontinuitäten, ungerade Gradienten, komplexe Mengen von lokalen Minima usw.)

Gleichung Solver erfordern besondere Intelligenz, um die "Regeln" der mathematischen Gleichungen, z. wie man polynomische Ausdrücke faktorisiert (für analytische Lösungen) oder wie man eine Ableitung (für numerische Lösungen) schätzt.

Einige Links, die interessant sein könnten:

mikera 27.09.2012 03:21
quelle

Tags und Links