Entwickler-Ecke
Freeware Projekte - Funktionsplotter
rizor - Mo 12.02.07 23:41
Titel: Funktionsplotter
Hi,
ich habe zusammen mit einem Kumpel einen Funktionsplotter für ganz-rationale Funktinen geschrieben.
Der Plotter berechnet die Ableitungen, Nullstellen, Extremstellen und Wendestellen.
Außerdem zeichnet er die FUnktion mit der ersten und zweiten Ableitung.
Das Projekt ist für unser Abitur.
Also, falls ihr Fehler entdeckt, schreibt mir bitte genau, was ihr eingegeben habt und was der Fehler ist.
Außerdem wäre es gut, wenn ihr mir sagt, was euch am Design nicht so gut gefällt.
Danke.
cu rizor
[EDIT]
Habe eine Zip angefügt.
[EDIT] Version 1.1
Die neue Version hat folgende Änderungen:
- Die X-Achse verschiebt jetzt richtig (bei z.B. x^0)
- Eine Wertetabelle wurde eingebaut
- Fenster lässt sich nicht mehr maximieren und wurde zentriert
- Der parser erkennt jetzt ausgeschriebene x-Reihen (x*x*x)
- Es kann jetzt ein Bereich der FUnktion genauer dargestellt werden (inkl. einstellbarem
Intervall)
[EDIT] Version 1.2
Die neue Version hat folgende Änderungen:
- Die Zeichnung wurde optimiert
- Der Parser sortiert sich die Funkton nun selber
Hoffe, das jetzt alles funktioniert :)
Dragonclaw - Di 13.02.07 00:46
Hallo,
ich find das sieht schon ganz gut aus. Ein paar Kritikpunkte:
(1) bei x^0 sieht das Koordiatenkreuz komisch aus. Es wäre sinnvoll wenn die X-Achse im Mittelpunkt ist und NICHT am unteren Rand.
(2) bei x^10 dauert die Berechnung extrem lange.
(3) Eine Wertetabelle mit einstellbaren Intervall wäre nett, oder vllt eine Möglichkeit die Funktion mit den CursorTasten abzufahren.
Ansonsten ziemlich gut :)
rizor - Di 13.02.07 15:40
Vielen Dank.
Werden uns die Fehler anschauen und überarbeiten.
Ob wir das mit dem Cursor machen weiß ich noch nicht, aber die Wertetabelle mit Sicherheit.
[Edit]
Die berechnung von x^10 dauert gar net so lang.
Wie lang braucht dein Rechner denn?
Dragonclaw - Di 13.02.07 21:56
Also für die Berechnung von x^10 brauch ich knapp ~ 7 sek. Bei x^1 gehts auf Knopfdruck.
rizor - Di 13.02.07 21:59
Achso.
as Problem ist nur, dass wir das nicht doll kürzen können, da sich bei so einer großen Potenz der zu Untersuchende Bereich extrem vergrößert, wodurch die Berechnung schwieriger und langwieriger wird.
Kroko - Mi 14.02.07 09:19
Ich bitte mal um eine gezippte Datei :wink:
basti_1984 - Mi 14.02.07 09:38
Warum nutz ihr nicht fertige MAtheprogramme die das alles schon können.
Kroko - Mi 14.02.07 10:32
basti_1984 hat folgendes geschrieben: |
Warum nutz ihr nicht fertige MAtheprogramme die das alles schon können. |
(a) aus Spaß am programmieren
(b) weil die wenigsten das machen, was
ich will
(c) weil es übt
(d) und ich würde Dir weitere 1000 Gründe nennen, wenn ich welche wüßte ... :wink:
rizor - Mi 14.02.07 10:42
Und einer der wichtigsten Gründe für uns ist, die Abi-Prüfung.
Da sollten man schon was eigenes haben.
basti_1984 - Mi 14.02.07 10:57
Okay das Arbgument (a) ist natürlich richtig. Mein Abi liegt zwar schon einige Jahre hinter mir. ich habe mir mal euer Program angesehn. Hut ab aber : Das hier soll keine Kritik sein .
ich würde die eingabe etwas anders gestalten. euer programm hat probleme wenn ich
x^(2) eingebe. generell sind klammern nicht so gerne gesehen. Gebrochenrationale Funktionen können nicht bearbeitet werden.
Was können denn MAthe Programme nicht was du benötigst.
Kroko - Mi 14.02.07 11:02
Danke, habe es mal ausprobiert
Test:
(a) wenn ich das Fenster maximiere, dann sollte sich die graphische Anzeige aus maximieren oder max. disablen
(b) warum versteht er x*x*x nicht ? Welche Funktionen sind erlaubt? zBsp: sin(x) geht nicht!
(c) das MainMenu würde ich entsorgen
(d) warum der Schalter mit "Funktion löschen", verwenden sollte doch reichen, ev. noch eine Anzeige über die aktuelle Funktion
(e) Intervall,Gitter, (Farben) im Graphen wählbar
(f) Legende in der graphischen Darstellung
//EDIT:
(g) Versionshinweise, Infobox
@basti_1984
Was ich will: Versuche mal in Derive jemanden zu erklären, wie er eine Parabelschar für f(x)=ax² zeichnen lassen soll für a=[-5;5;0.5], da ist eine Stunde um, nichts zu sehen und der Effekt einer graphischen Computerdarstellung geht in die Hose :wink:
rizor - Mi 14.02.07 11:43
Kroko hat folgendes geschrieben: |
Danke, habe es mal ausprobiert
Test:
(a) wenn ich das Fenster maximiere, dann sollte sich die graphische Anzeige aus maximieren oder max. disablen
|
Wie kann ihc die Maximierung verhinder?
Kroko hat folgendes geschrieben: |
(b) warum versteht er x*x*x nicht ? Welche Funktionen sind erlaubt? zBsp: sin(x) geht nicht!
|
basti_1984 hat folgendes geschrieben: |
Gebrochenrationale Funktionen können nicht bearbeitet werden.
|
Stimmt, das haben wir vergessen einzubauen. Werden wir mit der nächsten Version machen.
Das Programm kann nur ganzrationale Funktionen berechnen.
und Sinus-Funktionen sind trigonometrische Funktionen.
Kroko hat folgendes geschrieben: |
(c) das MainMenu würde ich entsorgen
(d) warum der Schalter mit "Funktion löschen", verwenden sollte doch reichen, ev. noch eine Anzeige über die aktuelle Funktion
|
Mit dem MainMenu haben wir es so gemacht, damit die Zeichnung größer wird.
Der Schalter "Funktion löschen" ist dazu da, das Programm zurück zu setzen, da man sonst bei einer erneuten Eingabe eine Fehlermeldung erhält.
Haben wir am Anfang leider schon nicht so gut programmiert.
Kroko hat folgendes geschrieben: |
(e) Intervall,Gitter, (Farben) im Graphen wählbar
(f) Legende in der graphischen Darstellung
|
Das mit dem Intervall und so wäre zwar eine gute Idee, aber es könnte zu knapp werden it der Programmierung.
basti_1984 hat folgendes geschrieben: |
euer programm hat probleme wenn ich x^(2) eingebe. generell sind klammern nicht so gerne gesehen.
|
Ja, die Klammern haben wir extra weg gelassen, damit die Eingabe übersichtlich bleibt.
Wir werden sehen, was wir von den Vorschlägen noch realisieren können.
basti_1984 - Mi 14.02.07 12:01
Okay mit der Übersicht der eingabe wirst du dann aber probleme haben oder wie willst du x^2+5 / x-2 ohne klammern darstellen so das dein prgramm richtig rechnet.
Mal ein Vorschlag, da ich mich mit solchen Themen auch schon auseinander gesetzt habe-
Lass den nutzer nicht alle zeichen per tastatur eingeben, biete für spezielle Zeichen/ OPeratroen Buttons an. Z.B für Wurzel, Logarithmen, Potenzen usw...
Dann kanst du auch eine gebrochen Rationale Funktion darstellen.
Ist mir eben noch eingefallen;
Wie sieht es mit Buchstaben im Programm aus. wenn ich eine Funktion eingeben die nicht aus buschtaben bestehet. wei geht ihr damit um. (Muss natürlich einen Fehler auswerfen)
Auf jeden Fall wüschen ich euch viel Glück beim Abitur.
rizor - Mi 14.02.07 12:05
Da das Programm aber nur für ganz-rationale Funktionen ausgelegt ist, bekommen wir das Problem nicht, da es dort keine Brüche gibt abgesehen von 1/3 oder so.
Kroko - Mi 14.02.07 12:12
(a) schau dir mal TForm.BorderIcons und TForm.BorderStyle an
(b) Warum wird mit MainMenu die Zeichnung größer??? Sie wird doch eher kleiner, oder?
rizor - Mi 14.02.07 15:23
Sie wird nicht kleiner, da wir das ganze System nach unten verschoben haben und außerdem ein Extra-Schließen Button fehlt, wodurch wir noch ein wenig platz haben.
rizor - Di 20.02.07 20:12
Eine neue Version ist jetzt im Netz.
Segelflieger - Do 22.02.07 02:12
Hallo!
Euer Thema finde ich sehr interessant, weil ich zu meiner Abi-Zeit einen recht brauchbaren Funktionsplotter geschrieben habe (hatte es als besondere Lernleistung werten lassen und war damit bei Jugend Forscht).
Ich habe das Programm eben runtergeladen und gestartet und f(x)=1+x^2-x^3+x^4-x^5 eingegeben. Beim Klick auf "Funktion verwenden" kam erstmal eine Fehlermeldung "TInt ist kein gültiger Gleitkommawert". Dann habe ich "Funktion löschen geklickt" und dann nochmal auf "verwenden". Dann ging es. Aber die Ableitungen der Funktion wurden völlig falsch berechnet.
Werde später noch ein wenig damit herumprobieren. Mich würde mal interessieren, wie ihr die Funktionen interpretiert (parst).
Bin schon auf ein Update gespannt!
Martin
EDIT: habe gerade mal einen Blick in euren Quelltext geworfen. Ich weiß ja nicht, wieviel Zeit ihr noch für euer Projekt habt... aber falls ihr noch Luft habt, empfehle ich euch, einen rekursiven Funktionsparser zu entwerfen. Damit meine ich: eine Parserfunktion, der ihr den Funktionsstring übergebt; diese Funktion zerlegt den String dann in kleinere Teilstrings (Punkt- vor Strichrechnung beachten etc.) und ruft sich selbst dann mit diesen kleinen Teilstrings als Parameter auf. Das ganze ist sehr flexibel, d.h. man kann beliebige Rechenoperationen ganz einfach hinzufügen oder den Benutzer z.B. Funktionen wie Sin(x) eingeben lassen...
*bla* klingt kompliziert wenn man es zum ersten Mal hört, aber wenn ihr Hilfe braucht, fragt einfach ;-)
alzaimar - Do 22.02.07 08:58
Segelflieger hat folgendes geschrieben: |
EDIT: habe gerade mal einen Blick in euren Quelltext geworfen. ... aber falls ihr noch Luft habt, empfehle ich euch, einen rekursiven Funktionsparser zu entwerfen. ... |
Für mathematische Terme reicht eine einfache Stackmaschine (Simple Precedence?). Aber einen 'rekursiven Parser' zu schreiben, entspricht der intuitiven Umsetzung einer Backus-Naur-Notation und man versteht einfach, was passiert. Und es macht Spass. Und man ist hinterher schlauer. :wink:
rizor - Do 22.02.07 16:48
Hi,
das Problem ist, dass du die Funktion falsch herum eingegeben hast.
So berechnet er die Ableitungen natürlich falsch.
Du musst die exponenten abfallend eingeben
z.B. x^3-12x^2+5x-12
sowas kann er wieder rechnen.
Werde mal probieren, dass das Programm das selber macht.
rizor - Do 22.02.07 20:40
Es gibt wieder eine neue Version.
delfiphan - Sa 24.02.07 00:40
Hier noch paar Kommentare meinerseits:
- bei x^4-16x^3+95x^2-248x+240 oder x^4-6x^3+13x^2-12x+4 hängt er sich komplett auf ;) Probleme bei mehrfachen Nullstellen?
- Die Nullstellenberechnung funktioniert nicht immer... Erstens darf die Nullstelle nicht überhalb 10 liegen und zum Teil werden Nullstellen mehrfach zurückgegeben
wird einfalsches Resultat zurückgegeben "x^5-22*x^4+191*x^3-818*x^2+1728*x-1440" (Nullstelle 6 wird doppelt angezeigt)... Es gibt Methoden die liefern für beliebige Polynome innert kurzer Zeit bedingungslos alle Nullstellen, inklusive der Vielfachheit der Nulsltellen.
- "Bitte zuerst auf Funktion löschen klicken" ist überflüssig... Das kann das Programm ja auch gleich selbst machen.
- Die Grösse des Fensters lässt sich verändern aber der Inhalt verändert seine Grösse nicht mit
huhn - Sa 24.02.07 11:57
Sieht relativ interessant aus^^
dachte ich post mal an der stelle eine alte Schulglf, die sich mit Vektorberechnung beschäftigt ;)
vielleicht findest du ja hier noch ein paar anregungen und tipps
mfg huhn
ps:hilfedatei ist nicht von mir und rechtschreibfehler gehören mir :P
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!