AGB  ·  Datenschutz  ·  Impressum  







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

Termumformung

Ein Thema von nahkillo94 · begonnen am 22. Jan 2012 · letzter Beitrag vom 22. Jan 2012
Antwort Antwort
nahkillo94

Registriert seit: 1. Sep 2010
10 Beiträge
 
#1

Termumformung

  Alt 22. Jan 2012, 00:14
Hallo,

ich habe eine Frage für mein Informatik-Projekt.


Ich schreibe einen Funktionsparser mit Graph zeichnen, basierend auf der umgekehrten polnischen Notation. Zurzeit erarbeite ich mir die Theorie dazu. An sich kein Problem, doch jetzt bin ich am überlegen, wie kann man denn einen Term (in der UPN-Form) nach einer Variable umformen? Geht das Überhaupt? Beispielsweise zur Berechnung der Nullstelle einer Funktion?

infix:
y = 2 * x + 2
0 = 2 * x + 2
x = (0 - 2) / 2
x = -1

postfix:
y = 2 x * 2 +
0 = 2 x * 2 +
x =
x = -1
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.142 Beiträge
 
Delphi 12 Athens
 
#2

AW: Termumformung

  Alt 22. Jan 2012, 00:48
0 2 - 2 /

fällt bestimmt auf, wenn du die anderen Klammern so setzen würdest, wie es die Rechenreihenfolge vorgibt
2 * x + 2 = (2 * x) + 2
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (22. Jan 2012 um 00:56 Uhr)
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Termumformung

  Alt 22. Jan 2012, 00:49
Prinzipiell müsste das genau so gehen wie bei der Infix-Notation. 2 x * 2 + ist ja letztlich nur eine andere Schreibweise für ((2*x) + 2) , ergo müsstest du das genau so auflösen können, indem du dich von der äußersten Schicht zur inneren Schicht durcharbeitest und jeweils die Gegenoperationen ausführst.

1. Operand = Rot, 2. Operand = Grün, Operator = Blau

0 = 2 x * 2 +
Der Gegenoperator zu + ist −:
→ 0 2 − = 2 x *

0 2 − = 2 x *
Der Gegenoperator zu * ist /:
→ 0 2 − 2 / = x

0 2 − 2 / = -2 2 / = -1

-1 = x
Zumindest bei dem Beispiel klappt es. Das automatische Auflösen wird trotzdem nicht gerade eine einfache Aufgabe sein, da es oft mehrere Handlungs-Möglichkeiten gibt. Z.B. hätte man im 2. Schritt genau so gut durch X teilen können, was einen in diesem Fall natürlich nicht weiter gebracht hätte. Das ist natürlich nur dann der Fall, wenn für den jeweiligen Operator das Kommutativgesetz gilt, also hier bei + und *. Bei − und / z.B. macht die Reihenfolge ja durchaus einen Unterschied, da kann man sich nicht einfach aussuchen, welchen Operanden man rüberschiebt.

Ich weiß ja nicht genau, wofür du das brauchst, aber eventuell wäre es sinnvoller, die Nullstellen nur über ein numerisches Verfahren wie das Newton-Verfahren anzunähern. Das ganze algebraisch korrekt zu lösen wird ziemlich kompliziert... nicht umsonst kosten Computer-Algebra-Systeme wie Mathematica hunderte von Euros.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#4

AW: Termumformung

  Alt 22. Jan 2012, 08:47
Also ich hab früher einfach eine Iteration geschrieben, um die Nullstelle zu ermitteln. Newton und Regula Falsi fallen mir spontan ein.
  Mit Zitat antworten Zitat
nahkillo94

Registriert seit: 1. Sep 2010
10 Beiträge
 
#5

AW: Termumformung

  Alt 22. Jan 2012, 10:09
Vielen Dank für eure Hilfe.

Prinzipiell müsste das genau so gehen wie bei der Infix-Notation. 2 x * 2 + ist ja letztlich nur eine andere Schreibweise für ((2*x) + 2) , ergo müsstest du das genau so auflösen können, indem du dich von der äußersten Schicht zur inneren Schicht durcharbeitest und jeweils die Gegenoperationen ausführst.[indent]
Dann werde ich es mal versuchen umzusetzen. Ansonsten das Newton-Verfahren. Danke für diesen Hinweis.
  Mit Zitat antworten Zitat
Furtbichler
(Gast)

n/a Beiträge
 
#6

AW: Termumformung

  Alt 22. Jan 2012, 11:21
Mir fallen da gar lustige Probleme ein, wenn die Formel etwas größer ist.

In jedem Fall wäre eine analytische Lösung sehr elegant.
  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 02:46 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