Einzelnen Beitrag anzeigen

heiopei
(Gast)

n/a Beiträge
 
#1

Numerische Integration (inkl. flexibler Plotter-Komponente)

  Alt 23. Jul 2008, 14:04
Hallo,

Numerische Integration 1.0

Das hier vorgestellte Programm hatte ich für meine Facharbeit geschrieben. Da ich nicht viele Programme gesehen habe (v.a. ohne Quellcode), die Funktionen grafisch schön darstellen und flexibel erweiterbar sind, war ich "gezwungen" eine solche Komponente zu entwickeln.
Ich habe das Programm jedoch nicht umbedingt wegen der Veranschaulichung von Numerischen Verfahren hier reingestellt (das interessiert vermutl. nicht all zu viele), sondern eher wegen des für meine Begriffe flexiblen Plotters (siehe weiter unten).

Zum Programm:

Das Programm stellt eine Oberfläche zur Verfügung, mit der Numerische Integrationsverfahren veranschaulicht werden sollen.
Dabei gibt es drei Module:
- ein Verfahren an verschiedenen Funktionen testen
- meherere Verfahren an einer Funktion testen
- ein Verfahren an einer Funktion testen, wobei eine Große Oberfläche zum detailierten Betrachten zur Verfügung steht (Hier kann
man auch Graphen als JPEG/BMP-Dateien speichern

Es werden die folgenden Verfahren unterstützt:
- Left/Right-Riemann
- Trapezregel
- Simpson
- Monte-Carlo

Dabei kann eine beliebige (sinnvolle) Zahl an Stützstellen eingestellt, sowie beliebige Integrationsgrenzen definiert werden.
Durch die Verwendung eines Funktionenparsers - hier sei darauf hingewiesen, dass ich die Komponente "TCQParser" von Fabian Kleuss in abgewandelter Form verwendet habe - ist die beliebige Eingabe von Funktionen möglich!

Zur Komponente "TPlotter":

TPlotter stellt eine einfache TWinControl-Komponente dar, die einen Graph (TGraph) und beliebig viele Zeichenelemente (TPlotItem) enthält. Der Plotter regelt den Event-"Verkehr", d.h. er nimmt "ich will mich Neu-Zeichnen"-Ereignisse entgegen und leitet diese entsprechend weiter.

Der Graph (TGraph) ist frei skalierbar, per Maus zoom- und bewegbar, die Anzeige des Koordinatensystems kann eingestellt werden (Gitterlinien, Skala, Achsen, Farben...) und ist direkt von TGraphicControl abgeleitet.

Die Klasse TPlotItem stellt eine TObject-Klasse dar, die in der Grundform nur Funktionen zur Zusammenarbeit zwischen TGraph und TPlotter enthält. TPlotItem kann an den Plotter melden, dass sich das PlotItem neu auf den Graph zeichnen muss und TPlotter kann das PlotItem anweisen, sich neu auf den Graph zu zeichnen. Leitet man diese Klasse ab, so kann man beliebige Klassen erzeugen, die irgendwelche Daten auf dem Graph ausgeben können, wie z.B. Funktionen (+ deren Ableitungen, etc), Diagramme, usw.

Für das oben beschriebene Programme habe ich dazu die Klassen TPlotableFunction und TNumIntegrator von TPlotItem implementiert.
TPlotableFunction zeichnet eine beliebige Funktion auf den Graph und TNumIntegrator die Integral-"Fläche" einer beliebigen Funktion.

Zur Demonstration der Anwendung dieser Komponenten gibt es zwei extra Demoprogramme. Möchte man sich weiter damit beschäftigen, so kann man auch die relativ ausführliche Dokumentationen im Quellcode lesen - so wird das System evtl. noch besser klar...


Bekannte Fehler:
- vermutl. ist die Oberfläche bei einigen Bildschirmen zu groß (ist mir grad eingefallen), ich wäre also dankbar wenn mir da jemand möglichst bald bescheid sagt
- der Parser kann nicht kürzen, daher gibt es Probleme bei X durch X.
- Falsche Berechnung bei X hoch X im Negativen Bereich
- evtl. fehlerhafte Fehlerabschätzung (klingt komisch, is aber so...)
- Probleme beim numerischen Ableiten

So, ich hoffe das waren erstmal ausreichend viele Informationen...
Viel Spass beim Testen!
Angehängte Dateien
Dateityp: zip screenshots_845.zip (188,2 KB, 99x aufgerufen)
Dateityp: zip programm-quellcode_189.zip (96,6 KB, 91x aufgerufen)
Dateityp: zip nur_komponenten_192.zip (58,3 KB, 55x aufgerufen)
Dateityp: zip numerische_integration_-_programm_208.zip (330,0 KB, 109x aufgerufen)
  Mit Zitat antworten Zitat