![]() |
Numerische Integration (inkl. flexibler Plotter-Komponente)
Liste der Anhänge anzeigen (Anzahl: 4)
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 ![]() 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! |
Re: Numerische Integration (inkl. flexibler Plotter-Komponen
hallo,
da es schon länger her ist, das ich das Programm hier reingestellt habe, wollte ich doch mal fragen, was ihr von dem Programm haltet. Mich würde dabei interessieren, ob die Graph-Komponente (die mit sehr viel Mühe implementiert wurde) intuitiv bedienbar ist (sowohl aus Programmierersicht, der die Komponente einbindet, als auch Anwendersicht) und fehlerfrei funktioniert! Auch Hinweise auf andere, bessere Graphen-Zeichner sind erwünscht... Insbesondere beim Quellcode wäre ich über Auskunft darüber, ob das Code-Design sinnvoll ist (das ist das erste umfangreichere programm gewesen, das ich objekt-orientiert programmiert entworfen habe), sehr froh. danke fürs anschaun und informieren, heiopei |
Re: Numerische Integration (inkl. flexibler Plotter-Komponen
Hallo, habs mir gerade mal angeschaut (nur das Demo-Programm)
Ich habe einfach mal Simpson mit 100.000 Iterattionen verwendet und die Anzeige ruckelt :stupid: Es wäre sehr cool, wenn das Teil das Bild zwischenspeichert, sodass man schnell verschieben und zoomen kann, und dann wird (im Hintergrund) das Bild neu berechnet, und angezeigt. Ich nehme mal an, du hast das Teil schon für Multicore-Pozessoren angepasst? Weil er belastet von meinen vieren zwei Cores mit je 75% ... Generell finde ich das gut, dass mal jemand sowas gemacht hat, und es könnte eigentlich auch mal in die CodeLib *vorschlag* ;) Btw.: Warum kann ich x^(1/x) nicht mit der Linken-Rechteck-Regel integrieren? Er sagt mir Uneigentliches Integral :( Nochmal nachgedacht: Okay, logisch - der Punkt X=0 existiert nicht. Warum liefern die anderen keinen Fehler? (Gleiches bei Integral von 0 bis 1 von ln(x) ...) |
Re: Numerische Integration (inkl. flexibler Plotter-Komponen
abend,
danke fürs feedback :) Zitat:
Zitat:
Zitat:
Zitat:
Zitat:
bis dann, heiopei PS: Wie im ersten Beitrag kurz angedeutet, funktioniert der Parser, bzw. die Fehlerbehandlung bei ungültigen Berechnungen (0 /5 usw.) noch nicht 100%ig :? Spiel mal mit obiger Funktion im Graph ein wenig herum, irgendwann kommt eine Fehlermeldung "div by 0" :shock: Ich habe ihn zwar schon um einige Fehlerbehandlungen erweitert, aber irgendwann hatte ich für meine Facharbeit andere Prioritäten... Ich hab dafür jedoch momentan ein bisschen wenig Zeit, da ich jetzt dann umziehen werde - aber der Code ist ja OpenSource und halbwegs gut dokumentiert :cheers: |
Re: Numerische Integration (inkl. flexibler Plotter-Komponen
Gute Arbeit!
Der Parser meldet Fehler bei negativen Potenzen in der Funktion. Aber sonst finde ich das Maschinchen schon toll. Bernd. |
Re: Numerische Integration (inkl. flexibler Plotter-Komponen
hi heiopei,
super! ist echt hammer gemacht! großes lob! den quelltext guck ich mir später noch an. |
Re: Numerische Integration (inkl. flexibler Plotter-Komponen
Zitat:
Zitat:
Zitat:
viel spass beim weitertesten, heiopei |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:45 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz