Mathematische Gleichung(Eingabe) im Programm auflösen
-
Hallöchen,
nen Freund von mir hat mich gestern gefragt, ob man mit einem Programm eine mathematische Gleichung lösen lassen kann. Ich habe ihm ein "Ja" als antwort gegeben und gemeint, dass es eine Frage der umsetzung ist. Nun würde ich mich gerne selbst davon überzeugen, weil Gleichungen können doch sehr unterschiedlich aussehen. Und mir würde auf anhieb nichts einfallen.Hättet ihr eventuell einen Ansatz um mich auf die richtige Fährte zu bringen? Würde mich echt freuen.
Lg CAres91
-
Ich weiß nicht genau, was Du meinst, aber ich sage einfach mal: Computer-Algebra-System.
-
Eine mathematische Gleichung kann man natürlich sehr vielseitig interpretieren. Am einfachsten (auch zu programmieren) sind wohl lineare Gleichungssysteme. Bei Polynomen mit höherem Grad oder anderen Elementarfunktionen (z.B. Logarithmus) wirds komplizierter, bei Differentialgleichungen viel komplizierter, bei partiellen DGLs unglaublich viel komplizierter.
Lineare Gleichungssysteme lassen sich mit Techniken der Linearen Algebra behandeln. Schau dir mal den Wikipedia-Artikel dazu an. Ein Ansatz zum Lösen wäre Matrix-Invertierung, allerdings gibt es numerisch stabilere Verfahren wie die QR-Zerlegung. Du kannst dich ja mal ein wenig umschauen...
-
Das war ein kleiner Denkfehler von mir ich habe vergessen ein Beispiel dafür zu geben
Also anfangs wollte ich mit der Win32-Konsolenanwendung arbeiten, wenn das so hinhaut, kann ich später die Lösung als Oberflächenanwendung implementieren.
Also meine Idee war, man gibt im programm eine Beliebige Gleichung ein, ein Beispiel: 3x + 5 - 9x = x - 2 + 19 + 4x also Gleichungen wie man sie im Mathematikunterricht lernt in allen Variationen und Längen. Meines Wissens kann man dem Programm so eine Gleichung nur als String eingeben, wenn man auch die ganzen Operatoren etc. miteingibt. Aber ich wüsste jetzt nicht, wie ich das Programm den String exakt verarbeiten lasse, sodass am Ende möglichst weit zusammengefasst wurde, oder die Variablen = irgendein Wert sind.Lg CAres91
-
Ich beschäftige mich im Moment mit fast dem selben Thema
Ich beschränke mich aber nur auf Formeln, also so das mir nur das Ergebnis angezeigt wirdmein Ansatz ist die Formel in einen binären Baum zu parsen und den dann aufzulösen
also: (1+2)*3+2 ist als Baum: + / \ * 2 / \ + 3 / \ 1 2 und jetzt nur noch die Operator-knoten auflösen
vielleicht hilft dir das ja
-
Vielen Dank, dein Ansatz klingt sehr vielversprechend, ich werde mich mal darüber schlau machen und gucken ob ich sowas implementiert kriege. Und ob das Ergebnis in etwa das ist was ich vermute.
Lg CAres91
-
und zum parsen hab ich mir gedacht dort Ansätze zuholen
http://magazin.c-plusplus.net/artikel/Compilerbau
besonders wegen der unterschiedlich Priorietäten der Operatorenzu binären Bäumen gibt es auch einen Artikel (allerdings nur als Suchbaum)
-
Vielleicht hilft auch der "Shunting Yard"-Algorithmus.