Seite 1 von 2
Gebrochenrationale Funktionen
Verfasst: Donnerstag 3. Oktober 2013, 14:35
von Jaga
Hat hier wirklich niemand eine Idee wie ich eine gebrochenrationale Funktion analysieren und anschließend plotten kann? Mit eval funktionierts nicht.
Re: Gebrochenrationale Funktionen
Verfasst: Donnerstag 3. Oktober 2013, 15:50
von BlackJack
@Jaga: Wo genau liegt denn das Problem? Die Frage ist IMHO ein ganz klein wenig zu allgemein gestellt. Was willst Du analysieren? Warum kannst Du sie nicht plotten? Stolperst Du darüber das im Nenner auch mal eine 0 vorkommen kann und das natürlich nicht sein darf, beziehungsweise die Funktion an der Stelle undefiniert ist!?
Re: Gebrochenrationale Funktionen
Verfasst: Donnerstag 3. Oktober 2013, 16:46
von Jaga
Also das problem liegt irgendwo im Analyseteil von meinem Funktionsplotter.
Alle anderen Funktionen (Sinus cosinus Potenzen und so weiter) funktionieren alle nur eben die gebrochen rationalen nicht.
Momentan werden nur die Asymptoten geplottet.
Hier mal meine Formelanalyse:
Code: Alles auswählen
def formel_analysieren(self, genauigkeit, startwert, endwert):
self.x = np.arange(float(startwert),float(endwert),float(genauigkeit))
x = self.x
formula_raw = self.entry_funktion.get().replace('e^x', 'exp(x)')
formula_raw_exp = formula_raw.replace('e^', 'exp')
formula_list = re.split('(\W)', formula_raw_exp)
formula_replace = [REPLACE_DIC.get(item,item) for item in formula_list]
self.formula_finish = ''.join(formula_replace)
form = parser.expr(self.formula_finish).compile()
try:
self.y = eval(form)
self.legend = self.entry_funktion.get()
except NameError:
self.y = np.sin(self.x)
self.legend = 'sin(x)'
return (self.x,self.y,self.legend)
Re: Gebrochenrationale Funktionen
Verfasst: Donnerstag 3. Oktober 2013, 16:54
von BlackJack
@Jaga: Das beantwortet die Frage(n) nicht. Wo *genau* liegt das Problem? Warum wird nicht geplottet? Fehlermeldung(en)? Wie sieht das mit den Werten aus? Hast Du überall die erwarteten Werte? Wenn nicht, wo nicht und welche hast Du, und welche hast Du erwartet, und warum? Wie sähe ein minimales aber lauffägiges Beispiel aus?
Re: Gebrochenrationale Funktionen
Verfasst: Donnerstag 3. Oktober 2013, 17:03
von Jaga
Ich erhalte keine Fehlermeldungen und wieso nur die Asymptoten gezeichnet werden weiß ich selbst nicht.
Wäre es möglich dass es mit der eval-Funktion nicht funktioniert?
Re: Gebrochenrationale Funktionen
Verfasst: Donnerstag 3. Oktober 2013, 18:10
von BlackJack
@Jaga: Überprüf das doch einfach. Du hast ja offensichtlich eine problematische Formel. Gehe Dein Programm Schritt für Schritt durch und überprüfe ob an jeder Stelle im Programm die von Dir erwarteten Werte brechnet werden. Lass Dir das Ergebnis von `eval()` ausgeben. Dann siehst Du doch ob das funktioniert oder nicht.
Re: Gebrochenrationale Funktionen
Verfasst: Donnerstag 3. Oktober 2013, 18:28
von Jaga
Also wenn ich mir den eval-Teil mit 'print' ausgeben lasse, erhalte ich eine riesige Matrix.
Re: Gebrochenrationale Funktionen
Verfasst: Donnerstag 3. Oktober 2013, 19:29
von BlackJack
@Jaga: Stimmen die Werte denn? Irgendetwas ungewöhnliches in den Werten? NaN-Werte?
Re: Gebrochenrationale Funktionen
Verfasst: Donnerstag 3. Oktober 2013, 19:33
von Jaga
Ich habe keine Ahnung. :K aber ich denke schon
Re: Gebrochenrationale Funktionen
Verfasst: Donnerstag 3. Oktober 2013, 19:37
von BlackJack
@Jaga: Was heisst Du hast keine Ahnung? Das kann man doch überprüfen. Zum Beispiel die Daten in eine Datei speichern und mit `matplotlib` ausserhalb Deines Programms mal plotten lassen. Und ob NaN-Werte enthalten sind kann man auch einfach mal überprüfen. Oder vielleicht etwas anderes. Herauszufinden was bei Numpy-Arrays passiert wenn eine Division durch 0 gemacht wird überlasse ich Dir mal als Übung.
Re: Gebrochenrationale Funktionen
Verfasst: Samstag 5. Oktober 2013, 10:06
von Jaga
Also:
Ich habe die Werte für die Funktion 1/x mal getestet.
Sprich ich habe mir die self.x und self.y Werte printen lassen,die riesigen ausgegebenen Matrizen kopiert und diese dann in einem andren Programm erneut versucht zu plotten.
Ergebnis war ein syntax error mittten in der self.y Matrix.
Nur was heißt das jetzt?
Re: Gebrochenrationale Funktionen
Verfasst: Samstag 5. Oktober 2013, 10:13
von BlackJack
@Jaga: Das heisst, dass man die Zeichenkettendarstellung von Objekten nicht einfach als Quelltext nehmen kann. Bei einigen geht das, bei den allermeisten geht das nicht. Du müsstest die Daten in einem dafür vorgesehenen Format speichern und wieder laden. Numpy hat zum Beispiel Funktionen um sie in Textdateien zu speichern.
Du könntest das aber auch einfach mal ohne Dein Programm mit weniger Datenpunkten, vielleicht 10 oder so, einfach mal interaktiv in einer Python-Shell ausprobieren. Achte dabei darauf, dass der erwähnte besondere Fall in den Daten enthalten ist, also der Ausschnitt den Du berechnest, nicht stetig ist.
Re: Gebrochenrationale Funktionen
Verfasst: Samstag 5. Oktober 2013, 10:35
von Jaga
Also mit Genauigkeit(Abstand zwischen den zu berechnenden Punkten) = 0.5 siehts ganz gut aus und für f(x) = 1/(2-x) erhalte ich diese self.y Matrix:
(Startwert: -5 Endwert: 5)
[ 0.14285714 0.15384615 0.16666667 0.18181818 0.2 0.22222222
0.25 0.28571429 0.33333333 0.4 0.5 0.66666667
1. 2. inf -2. -1. -0.66666667
-0.5 -0.4 ]
Und jetzt wäre nur die Frage was sagt mir das?
Re: Gebrochenrationale Funktionen
Verfasst: Samstag 5. Oktober 2013, 10:45
von BlackJack
@Jaga: Jetzt könntest Du probieren das zu plotten. Dann wäre geklärt ob der Unendlich-Wert ein Problem darstellt.
Re: Gebrochenrationale Funktionen
Verfasst: Samstag 5. Oktober 2013, 10:53
von Jaga
Das habe ich schon getan.
Es sieht zwar etwas eckig aus was ja auch normal ist bei einem Abstand von 0.5 aber ansonsten ist alles super.
Und jetzt?
Re: Gebrochenrationale Funktionen
Verfasst: Samstag 5. Oktober 2013, 12:19
von Sirius3
@Jaga: jetzt könntest Du Dich fragen, warum das Plotten von wenigen Punkten geht und mit vielen Punkten nicht das Ergebnis erscheint, das Du Dir gedacht hast. Und was dieses komische "1e9" links oben wohl bedeuten mag.
Re: Gebrochenrationale Funktionen
Verfasst: Donnerstag 10. Oktober 2013, 09:32
von Jaga
ok wieso geht das denn nicht?
und was bedeutet dieser Wert?
Re: Gebrochenrationale Funktionen
Verfasst: Donnerstag 10. Oktober 2013, 11:49
von Sirius3
@Jaga: an Deiner Stelle würde ich langsam die x-Rasterung von groß auf fein verändern und schauen, was passiert.
Re: Gebrochenrationale Funktionen
Verfasst: Dienstag 15. Oktober 2013, 12:30
von Jaga
So Problem gefunden aber keine Lösung dafür.
Und zwar lautet das Schlagwort Fließkomma-Arithmetik.
Bei bestimmten Genauigkeitswerten erhalte ich wider erwartend nicht x= 0 sondern x=-1,77...*10**-14 also nur "fast" 0, und somit auch falsche y-Werte.
Habt ihr irgendwelche Ideen wie ich den ganzen Spaß mit Fließkomma-Arirthmetik in Matrizen einbauen kann? :K
Re: Gebrochenrationale Funktionen
Verfasst: Dienstag 15. Oktober 2013, 12:46
von BlackJack
@Jaga: Da kannst Du im Grunde nichts gegen machen. Aber was war denn genau das Problem?