Laden...

Kurvendiskussion Polynomfunktionen

Erstellt von m0rius vor 15 Jahren Letzter Beitrag vor 15 Jahren 13.830 Views
m0rius Themenstarter:in
1.002 Beiträge seit 2007
vor 15 Jahren
Kurvendiskussion Polynomfunktionen

Hallo zusammen,

Ich möchte euch kurz ein Projekt vorstellen, was im Rahmen einer Informatik-Hausarbeit entstand.
Hierbei handelt es sich um ein Programm, was eine (nahezu) vollständige Kurvendiskussion für eine Polynomfunktion (ganzrationale Funktion) durchführt.

Momentan berechnet werden:*1., 2. und 3. Ableitung *Grad der Funktion (Wenn man hier von "berechnen" sprechen kann) *Standardsymmetrien *Nullstellen *Extrema *Wendepunkte

Weitere Features:*Zeichnen aller Graphen (Funktion + Ableitungen) *Erstellen einer Wertetabelle sowie Exportieren als CSV-Datei

Screenshots:*siehe weiter unten

Es ist momentan noch keine Eingabeprüfung vorhanden, gebt also bitte nur valide Funktionsterme mindestens 1. Grades ein ...
Vielleicht kann es ja jemand brauchen und damit seine Hausaufgaben "kontrollieren" 😃.

Schlagwörter: Kurvendiskussion, Calculus, Kurvendiskussionsprogramm, Programm, Polynomfunktion

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

4.939 Beiträge seit 2008
vor 15 Jahren

Gefällt mir -) Ich hatte vor Jahren auch schon mal ein ähnliches Programm geschrieben (in C++ mit dem BCB). Als einziger Unterschied konnte meines noch das Integral berechnen... (als Download unter http://www.bitel.net/dghm1164/downloads/Mathematik.zip das Programm 'Exam')

Aber bei deinem gefällt mir besonders das gleichzeitige Anzeigen der Funktionsgraphen.

P.S. Beim Button "Löschen ..." hat mich die Ellipse (die drei Pünktchen) gewundert, da ich angenommen hatte, daß danach noch ein Meldungsfenster o.ä. aufgeht.

Ein paar Verbesserungsvorschläge hätte ich aber noch:

  • Wertebereich des Graphen einstellbar (X und Y)
  • Wertetabelle abspeichern (CSV) bzw. kopierbar machen
157 Beiträge seit 2008
vor 15 Jahren

Mich hat der Button "Löschen ..." ebenfalls verwundert. Außerdem kam eine Exception bei einer Funktion mit x^9. Und die Wertetabelle würde ich schon beim Drücken des Buttons "Diskussion" erstellen, dann sind beide Buttons in dem Bereich auch überflüssig. Und benenn die Steuerelemente bitte sinnvoll, button1 ist absolut nichtssagend bis auf den Typ. Ein Name wie "btnDiskussion" wäre wesentlich sinnvoller.

m0rius Themenstarter:in
1.002 Beiträge seit 2007
vor 15 Jahren

Hallo,

  1. Die 3 Punkte habe ich aus dem Button rausgenommen.
  2. Zoomen bzw. Verschieben der Achsen baue ich gerade ein.
  3. Der Button heißt (hieß auch schon vorher) "btnCalculus".
  4. Die Wertetabellenbuttons sind nicht überflüssig, da man Schrittweite etc. ändern kann.

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

m0rius Themenstarter:in
1.002 Beiträge seit 2007
vor 15 Jahren

Hallo nochmals,

habe die Datei jetzt aktualisiert und bis auf die Möglichkeit zur Verschiebung (Zoom ist aber drin) alles geändert.

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

m0rius Themenstarter:in
1.002 Beiträge seit 2007
vor 15 Jahren

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

157 Beiträge seit 2008
vor 15 Jahren
  1. Der Button heißt (hieß auch schon vorher) "btnCalculus".

Also es gab zumindest einen Button1Click-Methode, daher bin ich zu dem Schluss gekommen, dass der Button nicht umbenannt ist. Vllt. ist es aber auch nur die Methode gewesen?

m0rius Themenstarter:in
1.002 Beiträge seit 2007
vor 15 Jahren

Hallo bonzy,

stimmt, das vom Button gefeuerte Event bzw. die Methode wurde nicht umbenannt ...

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

Z
520 Beiträge seit 2007
vor 15 Jahren

Hallo,

was hast du benutzt um den Graphen zu zeichnen?

m0rius Themenstarter:in
1.002 Beiträge seit 2007
vor 15 Jahren

Hallo zerberos,

der Graph ist "von Hand" mit den System.Drawing-Methoden gezeichnet, die Abstände der Rasterlinien bzw. die der Beschriftungen sind berechnet.

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

D
201 Beiträge seit 2007
vor 15 Jahren

Hallo zerberos,
der Graph ist "von Hand" mit den System.Drawing-Methoden gezeichnet, die Abstände der Rasterlinien bzw. die der Beschriftungen sind berechnet.

hast du schonmal daran gedacht zedgraph zu benutzen?
da sind alle Funktionen, wie zoom, kurven verschieben usw. schon drin.
du brauchst nur die punkte in eine liste füllen und das wars...

vielleicht interessiert dich das ja

mfg

m0rius Themenstarter:in
1.002 Beiträge seit 2007
vor 15 Jahren

Hallo D.Follmann,

danke für deinen Hinweis, ZedGraph hatte ich auch schon in Erwägung gezogen, aber da dies eine Hausarbeit ist, die in der Schule als abiturrelevante Klausur gewertet wird, musste es eine selbstgestrickte Lösung sein.

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

S
64 Beiträge seit 2008
vor 15 Jahren

Hallo m0rius,

ich hätte da auch noch einen Verbesserungsvorschlag, und zwar sollte die Anzeige der Nullstellen, Extrema und Wendepunkte irgendwie scrollbar oder in einer Liste sein. In deinem Beispiel 0,005x5 - 0,2x3 + x fehlt nämlich bei der Anzeige der Extrema der letzte Tiefpunkt.

Grüße

m0rius Themenstarter:in
1.002 Beiträge seit 2007
vor 15 Jahren

Hallo Section31,

ist bereits implementiert, ich muss zugeben, ihr wart Tester, ohne davon gewusst zu haben. Vielleicht sollte ich es nochmal ändern, ich hatte gehofft, der Doppelklick auf eines der Labels wäre intuitiv 😉.

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

S
64 Beiträge seit 2008
vor 15 Jahren

Jetzt wo du es sagst 😁

Ich finde es aber eher etwas ungewohnt auf ein Label doppelt zu klicken, zumindest aus meiner Sicht ist sowas nicht intuitiv, aber das kann ja jeder sehen wie er will.

Grüße

m0rius Themenstarter:in
1.002 Beiträge seit 2007
vor 15 Jahren

Hallo nochmal,

ich wollte eigentlich die Labels erst in ein Panel stecken und AutoScroll aktivieren, aber dadurch zerstöre ich das ganze Layout ... Ist halt nicht auf Scrollbars ausgelegt 😐.

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

U
208 Beiträge seit 2008
vor 15 Jahren

Hallo m0rius,

sehr cooles Programm. Blöd nur, dass ich keine Kurvendiskussion mehr brauche. Aber vor zwei, drei Jahren wäre mir das in der Schule eine große Hilfe gewesen. 😄

Zum Anzeigeproblem der Nullstellen, Extrema und Wendepunkte hätte ich noch eine Idee: Ich würde statt Labels Textboxen mit den Eigenschaften ReadOnly = True und BorderStyle = None zur Anzeigen nutzen. Optisch sieht das dann erstmal genauso aus wie ein Label, aber wenn man mit der Maus drüberfährt, bekommt man einen Cursor-Change der erkennen lässt, dass es eine Textbox ist. Dadurch kann man ganz bequem mit der Maus oder den Pfeiltasten in der Textbox "scrollen", wenn diese den Fokus erhält.

Bei der ListView für die Darstellung der Wertetabelle würde ich außerdem noch die Eigenschaft FullRowSelect = True setzen. Ist nämlich ein wenig umständlich, meiner Meinung nach, wenn man nur in der ersten Spalte auswählen kann.

Eine Kopier- (Zwischenablage) bzw. Export-Funktion (CSV-Datei) der Wertetabelle wurde ja schon vorgeschlagen. Wäre sicher nicht verkehrt.

Das einzige, was mir negativ aufgefallen ist, ist das doch sehr langsame Zeichnen der Graphen. Ich denk da ist sicher noch Optimierungsspielraum vorhanden, wobei es jetzt nicht so schlimm ist. Wollte es dennoch nicht unerwähnt lassen. 😃

Grüße,
Isaac

m0rius Themenstarter:in
1.002 Beiträge seit 2007
vor 15 Jahren

Hallo Isaac,

Die Performanz des Zeichenvorgangs ist sicher immer noch nicht die beste, aber ein wenig habe ich noch rausgehauen 😉.

Export-Funktion folgt morgen, mittlerweile zu müde ...

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

m0rius Themenstarter:in
1.002 Beiträge seit 2007
vor 15 Jahren

Hallo,

oben findet ihr jetzt die aktualisierte Version inkl. Exportierfunktion sowie erhöhter Zeichengeschwindigkeit.

m0rius

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

946 Beiträge seit 2008
vor 15 Jahren

Schönes Programm 👍.
Die Grafik ist jetzt viel schneller.

Es funktioniert alles, aber nach jedem Klick auf den Button "Kurfendiskussion" wird im Konstruktor der Wertetabelle eine Ausnahme ausgelöst.

System.FormatException: Die Eingabezeichenfolge hat das falsche Format.
   bei System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
   bei System.Number.ParseDouble(String value, NumberStyles options, NumberFormatInfo numfmt)
   bei System.Double.Parse(String s, NumberStyles style, NumberFormatInfo info)
   bei System.Convert.ToDouble(String value)
   bei Calculus.Algorithmus.ToDouble(String wert)
   bei Calculus.Wertetabelle..ctor(Funktion funktion, String untergrenze, String obergrenze, String schrittweite)
   bei Calculus.MainForm.ErstelleWertetabelle(Funktion funktion)
   bei Calculus.MainForm.Kurvendiskussion()
   bei Calculus.MainForm.btnCalculusClick(Object sender, EventArgs e)
   bei System.Windows.Forms.Control.OnClick(EventArgs e)
   bei System.Windows.Forms.Button.OnClick(EventArgs e)
   bei System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
   bei System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
   bei System.Windows.Forms.Control.WndProc(Message& m)
   bei System.Windows.Forms.ButtonBase.WndProc(Message& m)
   bei System.Windows.Forms.Button.WndProc(Message& m)
   bei System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
   bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
   bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

Ich sehe diese nie, aber der Rest scheint in Ordnung.

Folgende Features würden mir noch gefallen:

  • Der "Kurfendiskussion"-Button als Acceptbutton, wenn der Fokus in der Textbox liegt.
  • Bei einer neuen Gleichung eine aktualisierung der Zeichnung.
  • Menu weglassen und den "Über..."-Dialog als ein Button rechts im TabControl aufrufen lassen.
m0rius Themenstarter:in
1.002 Beiträge seit 2007
vor 15 Jahren

Hallo See Sharp,

danke für die Anregungen ...
*Den Accept-Button füge ich ein *Die Zeichnung wird bei mir mit einer neuen Gleichung aktualisiert, bei dir nicht? *Das Menü wird z.B. noch erweitert (Eingabesyntax etc.) ... Das will ich nicht alles ins TabControl reinpacken

m0rius

[EDIT]Habe das Projekt nochmal kompiliert angehängt, vielleicht hattest du eine ältere Version ...[/EDIT]

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg

467 Beiträge seit 2007
vor 15 Jahren

ich fänds sehr schön, wenn das Programm Klammern akzeptieren würde.
zb. (x+1)² wirft eine Exception.

darüber hinaus ist zwar zb. f(0.15) bei f(x)=x^9
0.000000038, was zwar in der Wertetabelle als 0 angezeigt werden darf, aber doch nicht als tatsächliche Nullstelle gellten, oder???

m0rius Themenstarter:in
1.002 Beiträge seit 2007
vor 15 Jahren

Hallo ANSI_code,

das Akzeptieren von Klammern bzw. Potenzen, in denen Klammern vorkommen, war von Anfang an nicht vorgesehen. Wenn ich jetzt Klammern akzeptieren würde, müsste ich massig Änderungen vornehmen.

Die Nullstellensuche muss tatsächlich nochmal verbessert werden ...

m0rius

[EDIT]Datei aktualisiert, Nullstellensuche relativ zuverlässig.[/EDIT]

Mein Blog: blog.mariusschulz.com
Hochwertige Malerarbeiten in Magdeburg und Umgebung: M'Decor, Ihr Maler für Magdeburg