AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Mathebaum (Binärbaum) vereinfachen

Ein Thema von Alaitoc · begonnen am 17. Nov 2008 · letzter Beitrag vom 21. Nov 2008
Antwort Antwort
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#1

Mathebaum (Binärbaum) vereinfachen

  Alt 17. Nov 2008, 15:30
Tach zusammen,
mein Matheparser ist größtenteils vollständig. Ich würde jetzt meinen Binärbaum (siehe Bild), das zum Beispiel aus:

1*x = x
x+x = 2x
x*x =x^2
a*b+a*c=a*(b+c)

etc...

Jedoch weiß ich ehrlich gesagt nicht genau wie ich das umsetzten soll, die Codestruktur meines Baumes sieht so aus:

type PTBinaryNode = ^TBinaryNode;
TBinaryNode = record
Token:TToken;
UpNodeTBinaryNode;
RightNodeTBinaryNode;
LeftNodeTBinaryNode;
end;

Dabei besteht TToken aus:

type
TTokens = (tkUnknown,
tkInteger,tkFloat,tkVar,
tkAdd,tkSub,tkDiv,tkMul,
tkBrOpen,tkBrClose,tkPotenz);

type TToken = class(TObject)
Token: TTokens;
Value: String;
end;

Habt ihr vielleicht eine Idee wie ich das lösen könnte?

MfG Alaitoc
Miniaturansicht angehängter Grafiken
bin_rbaum_111.jpg  
  Mit Zitat antworten Zitat
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#2

Re: Mathebaum (Binärbaum) vereinfachen

  Alt 19. Nov 2008, 13:57
Falls was unklar ist oder ihr mehr Informationen benötigt, bitte fragen.

MfG Alaitoc
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#3

Re: Mathebaum (Binärbaum) vereinfachen

  Alt 19. Nov 2008, 15:08
Ich weis jetzt nicht so genau, was du machen willst ...

Willst du aus dem String dem Baum machen? Dafür brauchst du einen Parser. Andererseits schriebst du, du hättest genau diesen schon fast fertig ..

Beachte übirgens, dass es auch (wenige) unäre Operatoren gibt. Z.B. das minus vor einer Zahl oder ein ²

Möchtest du auch noch Funktionen einbauen?
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#4

Re: Mathebaum (Binärbaum) vereinfachen

  Alt 19. Nov 2008, 15:11
ich mus gestehen ich versteh auch nicht genau was deine Frage ist.

aber wenns dir darum geht an zu sehen wie ein Parser geht da habe ich Hier was für dich.
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#5

Re: Mathebaum (Binärbaum) vereinfachen

  Alt 19. Nov 2008, 15:36
Also ich habe meinen Parser soweit fertig, d.h. :
  • Screener (entfernen der Leerzeichen etc...)
  • Lexikalischer Scanner
  • Parser (erstellt einen Parsebaum (Binärbaum)
  • Berechnung des Parsebaums (+,-,*,/,x^y)
  • Variablen können durch Werte ersetzt werden

Nun will ich das der Parsebaum sich soweit zusammenfasst wie es geht, also würde im Baum z.b.

3*x+4*x

Würde daraus:

7*x

Sozusagen Vereinfachen von Termen in der Mathematik auf meinen Parsebaum (siehe Bild) angewandt.

Dabei besteht mein Parsebaum halt wie bei einer verketteten Liste aus nem Wert und einem Zeiger aufs nächste Objekt (bei meinem Baum wären das aber dann 2 Zeiger pro Wert).

Ich bräuchte nun einen Ansatz dafür wie ich das Vereinfachen des Baumes umsetzten kann.

Edith: Das man sozusagen auch Variablen addieren kann in meinem Parser: x+x = 2x und so weiter...

MfG Alaitoc
  Mit Zitat antworten Zitat
Benutzerbild von Corpsman
Corpsman

Registriert seit: 8. Nov 2005
Ort: nähe Stuttgart
981 Beiträge
 
Delphi XE2 Professional
 
#6

Re: Mathebaum (Binärbaum) vereinfachen

  Alt 19. Nov 2008, 15:54
Also ich höre gerade ne Vorlesung "Programmanalysen und Compilerbau" und in der wird sowas gemacht.

Ich empfehle dir nu einfach mal das Drachenbuch generell kann ich dir zu dem Thema aber schon gleich sagen das es Aufwendig wird wenn du es richtig machen willst, sonst wirds ne "Hack" Lösung.

Must dich entscheiden was genau du willst.
Uwe
My Sitewww.Corpsman.de

My marble madness clone Balanced ( ca. 70,0 mb ) aktuell ver 2.01
  Mit Zitat antworten Zitat
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#7

Re: Mathebaum (Binärbaum) vereinfachen

  Alt 19. Nov 2008, 16:29
Wenn ich dir richtig verstanden habe, möchtest du sowas: http://reference.wolfram.com/mathema.../Simplify.html

Du möchtest also das tun, weshalb ich Mathematica so gerne mag

Um dir eine Idee zu geben: Du brauchst auf jeden Fall eine Funktion, die soviel faktorisiert, wie möglich und eine die soviel ausmultipliziert, wie möglich. Ggf. noch andere, komplexere Funktionen, aber das sind die beiden ersten.

Wie man die jetzt genau realisiert, bin ich aber überfragt ... jetzt bräuchte man einen Informatiker
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#8

Re: Mathebaum (Binärbaum) vereinfachen

  Alt 19. Nov 2008, 17:03
Das ist symbolisches Rechnen, nicht gerade ein einfaches Thema. Solange man aber kein Mathematica-Niveau anstrebt, dürften die einfacheren Regeln noch machbar sein.

Mal ein paar Gedanken zum Zusammenfassen zum Vereinfachen von Summen: Ich würde als kleinste Einheit ein Monom, also ein Produkt mit Koeffizient und einem Set von Variablen (inkl. Hochzahl), betrachten, also z.B. "3xy²", was dann also Objekt so etwa dargestellt werden könnte:
Code:
{ Coefficient = 3; Variables = { { Name = "x"; Exponent = 1 }; { Name = "y"; Exponent = 2 } } }
Bei einer Summe kannst du dann nach Summanden mit gleicher Variablen-Menge suchen und sie durch Addition der Koeffizienten zusammenfassen.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Alaitoc

Registriert seit: 24. Okt 2008
263 Beiträge
 
Delphi 7 Enterprise
 
#9

Re: Mathebaum (Binärbaum) vereinfachen

  Alt 21. Nov 2008, 08:24
Ah das hört sich doch soweit schonmal gut an :>

Schonmal danke, werde dann mal schauen wie ich das genau mit dem symbolischem Rechnen in mein Programm einbaue.

MfG Alaitoc
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz