Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Numerische Analysis (https://www.delphipraxis.net/19104-numerische-analysis.html)

Shaman 29. Mär 2004 14:27


Numerische Analysis
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo zusammen

Vor kurzem bekam ich und ein Freund den Auftrag von unserem Mathelehrer, ein Programm zur numerischen Integration zu schreiben.
Hier also das, was dabei rausgekommen ist:

- Numerische Integration beliebiger Funktionen
- Graphische Darstellung der Funktion und ihrer Ableitung
- Berechnung der Steigung des Graphen in einem Punkt

Ich würde mich freuen, wenn ihr das Prog kurz testet, damit ich es schlussendlich meinem Mathelehrer zukommen lassen kann.

Gruss
Shaman

DelphiDeveloper 29. Mär 2004 14:39

Re: Numerische Analysis
 
ich finds sehr übersichtlich und gelungen.
habe mal ein paar einfache funktionen getestet und es sieht gut aus.

Es gibt natuerlich direkt tausend verbesserungsvorschläge :lol:

-Bei dem Resize sollten sich alle Quadranten ändern
-Evtl eingegebene Funtkionen in der Combobox speichern

axelf98 29. Mär 2004 15:27

Re: Numerische Analysis
 
Hammer Programm...
:thuimb: :thuimb::thuimb: :thuimb: :thuimb: :thuimb:

Wie zeichnest du die Graphen und Integrale so schön und flimmerfrei? Das Programm kann selbst mit komplizierten Fällen umgehen (x^-x und solche Geschichten). Wirklich super! Wäre cool, wenn die aktuelle Eingabezeile als History in die Combobox übernommen würde. :coder:

[edit] Noch eine Kleinigkeit: Bei manchen Rechnern muss man einen Punkt statt einem Komma eingeben um Kommazahlen zu verarbeiten. Man kann mit DecimalSeparator die aktuelle Einstellung herausfinden und den String so verändern, dass immer die richtige Einstellung gewählt ist.[/edit]

Plague 29. Mär 2004 15:39

Re: Numerische Analysis
 
Wirklich super!

Mit welcher Komponente hast Du den Graphen dargestellt?

Gruß
Thomas

Shaman 29. Mär 2004 15:47

Re: Numerische Analysis
 
Danke, Danke! :)

Funktionsplotter, Parser etc ist alles selbstgemacht. Sonst wäre das Projekt gar nicht interessant gewesen. Flimmerfrei bekommt man die Darstellung ganz einfach mit DoubleBuffered:= True.

Das mit dem DecimalSeparator ist mir auch schon durch den Kopf gegangen und ich werde es mir nochmals überlegen.
Der Vorschlag mit der erweiternden ComboBox ist angenommen. :wink:

Alexander 29. Mär 2004 17:25

Re: Numerische Analysis
 
Ist dir wirklich super gelungen (designerisch und funktional)!
Mich würde mal interessieren wie du den Mathe-Parser programmiert hast.
Das zeichnen selber ist ja nicht ganz so schwer.

Als Ideen hätte ich noch, eine Druckfunktion oder Speichermöglichekit des Graphen.
Es wäre auch nicht schlecht, wenn man den GRaphen löschen und mehrere auf einmal zeichnen könnte.
Alexander

Dagon 29. Mär 2004 17:51

Re: Numerische Analysis
 
Da ich deinen Plotter gerade auf Sonderfälle überprüfe ist mir bei der Funktion f(x) = 1/0 aufgefallen, dass der Plotterhintergrund ganz grün wird. Ich denke das sollte nicht sein.

Shaman 29. Mär 2004 17:53

Re: Numerische Analysis
 
Eine Speichermöglichkeit ist eine gute Idee. Mehrere Graphen zu zeichnen ist so eine Sache. Obwohl der Parser ziemlich schnell ist, würde dann die Anzeige beim Verschieben etc. stark ruckeln.

Kurz zur Funktionsweise des Parsers: Die eingegebene Funktionsgleichung wird nach allen Rechenregeln interpretiert und standardisiert. Daraufhin wird ein Baum aufgebaut, welcher sich rekursiv auswerten lässt. Man könnte sagen, die Funktion werden kompiliert.

Shaman 29. Mär 2004 17:58

Re: Numerische Analysis
 
Das mit dem grünen Hintergrund ist mir bekannt. :oops:

Es liegt daran, dass bei Grenzwerten (+- Infinity) vertikale Asymptoten angenommen werden, welche grün eingezeichnet werden. Und bei einer konstanten Funktion von 1/0... naja... :cry:

Dagon 29. Mär 2004 18:07

Re: Numerische Analysis
 
Ich muss wirklich zu geben, dass ist ein echt tolles Progarmm :thuimb:
Ich wollte noch fragen, welche mathematischn Funktionen denn implementiert sind?

dummer_info_schüler 29. Mär 2004 18:29

Re: Numerische Analysis
 
Mensch, da wird man ja neidisch! Auf solche Ideen für Funktionsgraphen will man gar nicht kommen :-) (z.B. die f(x)= sin(x)*cos(x)*x). Geschweige denn, dafür ´n Programm schreiben... :shock:
Kleine Verbesserungsvorschläge:
1. die erste Ableitung nicht nur einzeichnen, sondern auch hinschreiben
2. eine Abbruchbedingung für die Rechnungen (nach ´n paar Sekunden oder so...): Das Programm rechnet bei mir immer noch was bei der Rechnung f(x)=ln(x).

alles in Allem: RESPEKT (Ich traue mich gar nicht zu fragen: besteht denn die Möglichkeit, dass der Quelltext veröffentlicht wird? Ich glaube, da könnte man noch ne Menge lernen von...)

Shaman 29. Mär 2004 18:38

Re: Numerische Analysis
 
Hier die Funktionstabelle:
Delphi-Quellcode:
pi               : Kreiszahl Pi
rnd              : Zufallszahl [0..1)
exp(x)           : Exponentialfunktion
ln(x)            : Natürlicher Logarithmus
lg(x)            : Dekadischer Logarithmus
sqrt(x)          : Quadratwurzel
abs(x), |x|       : Absoluter Betrag
sgn(x)           : Signum
fact(x), x!       : Fakultät
power(a, x), a^x : Potenz
logn(a, x)       : Logarithmus zur Basis a
Natürlich auch alle trigonometrischen Funktionen und ihre Umkehrungen. Nur die hyperbolischen hab ich noch weggelassen, solange ich noch gar nicht weiss, für was die gut sind...
Ergänzungen?

Shaman 29. Mär 2004 18:47

Re: Numerische Analysis
 
Die Ableitung hinschreiben wird leider nicht funktionieren, denn ihre Gleichung wird nie bestimmt. Für ihren Graph wird lediglich die Steigung in jedem Punkt der Funktion berechnet.

Während der numerischen Integration sollte man eigentlich auf Abbrechen klicken können, wenn es zu lange dauert. Geht das nicht?

Wegen dem Quelltext... Vielleicht später mal. Müssen noch einige Kommentare rein :wink:

dummer_info_schüler 29. Mär 2004 18:58

Re: Numerische Analysis
 
Das ging ja schnell! :-)
Danke! (Auch schon im Voraus!)

Wheelie 29. Mär 2004 19:02

Re: Numerische Analysis
 
:shock: :shock: echt super leistung ... wie lange habt ihr dafür denn gebraucht? hast du für den funktionsplotter eine eigene komponente geschrieben?

dizzy 29. Mär 2004 19:03

Re: Numerische Analysis
 
Doch doch, man kann abbrechen. Nur ist der Mauszeiger noch eine Sanduhr. Das würd ich ändern, und die Tätigkeit anders anzeigen. So gewinnt man den Eindruck, dass das Programm hängt!

Coole Sache: Mousewheel zum zoomen! Fein!
Nicht so coole Sache: Wenn man den Graphen verschiebt, und gerät mit der Maus aus dem Graphenbild raus, so wird nicht weitergeschoben, leider auch nicht, wenn man (mit weiterhin gedrückter Maus) wieder in das Bild kommt. Aber sind wie immer nur Details.

Und was den Code angeht: *Großes Interesse anmeld!!!*, vor allem an dem Parser!!! Das würde mir auch bei einem älteren Projekt SEHR weiterhelfen, dass u.a. auch deswegen still liegt, weil ich noch nicht richtig geschnallt hab, wie man nun parst. (Und einen existierenden kann ich nicht nehmen, da ich mit Quaternionen rechnen will :| )

Großes Lob an dich, und dein Lehrer wird weg-flippen!
Was noch nett wäre, wenn man e und pi z.B. auch als Integrationsgrenzen mit angeben könnte. Auch sowas wie 2*pi. Macht bei den Trigonometrischen viel Sinn. Ihr habt ja eh schon nen Parser, von daher... ;)
Und was glaub ich auch net drin ist, ist cotan. Aber ist ja nix anderes als "1 / tan(x)". Also auch nur eine Feinheit.


gruss,
dizzy

Shaman 29. Mär 2004 19:24

Re: Numerische Analysis
 
Dass der Cursor nicht wiederhergestellt wird, dem muss ich nachgehen. Hab ich bei mir noch nie festgestellt...

Das mit dem Graphen verschieben... Hab ich mit Absicht so gemacht, dass abgebrochen wird, wenn man die Komponente verlässt. Kann ich aber leicht rückgängig machen, wenn das erwünscht ist :wink:

Auch in den Edits für die Integrationsgrenzen wird geparst. Pi funktioniert also, dass e nicht geht, war ein Bug, den ich soeben behoben habe. :)

dizzy 29. Mär 2004 19:42

Re: Numerische Analysis
 
Axo, dann war pi bei mir nur unglücklich gewählt... Die Fkt war >pi nicht mehr definiert, und scheinbar für genau pi schon nicht mehr. Da hat das Integrieren recht lange gedauert, und ich hab abgebrochen, in der Vermutung, dass die Grenz-Felder nicht geparst werden... sorry, Schnellschuss. (Öhm, kann man dann dort auch was mit x anstellen? Wär ja lustig :) Muss ich mal testen...)

Und nochmal: *parsenkönnenwill* :mrgreen:

Der Mauszeiger wird NACH dem Abbrechen zurückgesetzt. Aber WÄHREND der Berechnung sollte es erst garnicht zur Sanduhr werden, da die Berechnung offenbar in einem eigenen Thread passiert. Das Programm ist also weiterhin bedienbar!
Ein Kompromiss wäre der Zeiger mit Uhr unten rechts dran.


gruss,
dizzy

Shaman 29. Mär 2004 19:50

Re: Numerische Analysis
 
Stimmt, da hast Du recht. Dieser Kompromiss ist eine gute Lösung :lol:

Hmm, das mit dem x in den Integrationsgrenzen... Würde das Sinn machen? Dann wären sie ja ebenfalls Funktionen. Das wäre ja voll drauf... :drunken:

gekmihesg 29. Mär 2004 20:13

Re: Numerische Analysis
 
ich würde noch einen dritten tab oder sowas machen wo die ganzen sonderzeichen/funktionen steheh.

dizzy 29. Mär 2004 20:20

Re: Numerische Analysis
 
Zitat:

Zitat von Shaman
Hmm, das mit dem x in den Integrationsgrenzen... Würde das Sinn machen? Dann wären sie ja ebenfalls Funktionen. Das wäre ja voll drauf... :drunken:

:party: jepp! Aber geht nicht. Hast du abgefangen: "Ungültige Variable "x"". Aber es würde wahrscheinlich in nem Desaster enden, da wenn x die Grenze ist, du deine Grenze ja ständig vor dir her schiebst während du integrierst. Ich glaub, es ist gut so wie es ist *g*.

PARSENKÖNNENWILL... :mrgreen:

hummer 29. Mär 2004 20:50

Re: Numerische Analysis
 
Hi!
Es wurde ja schon so viel gelobt.
Ich kann auch nur sagen, dass ich ein super Porgramm und otpisch sehr ansrpechend. :thuimb:
Schade haben das Thema gerade in der Schule abgeschlossen. Hätt ich gut gebrauchen können. Aber irgendwann kommt das noch ma dran.

Alexander 30. Mär 2004 09:24

Re: Numerische Analysis
 
Huch das mit dem Mausrad und dem Zoomen habe ich noch gar ncith gemerkt, ist aber eine super Idee :thuimb:
Eine kleine Idee habe noch:
Man kann ja die Steigung an einem Punkt brechnen lassen, wie wäre es nun wenn man den Punkt per Klick auf die Funktion selber, berechnen lassen könnte? Und natürlich druck und Speicher-Funktion (als Bild?) sollten noch integriert werden.
PS: Am (Parser-)Quellcode wäre ich auch interessiert ;-)

Shaman 19. Apr 2004 18:03

Re: Numerische Analysis
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier noch die überarbeitete und ergänzte Version.

Ergänzungen:
- Ausschnitt kann als BMP oder JPEG abgespeichert werden
- Abszissen können direkt in der Darstellung per Klick festgelegt werden
- Alle Funktionen aufgelistet
- Funktionshistory
- Asymptoten können ausgeblendet werden
- Darstellung/Ableitung generell überarbeitet

Behobene Bugs:
- Grüner Hintergrund bei Funktionen mit Null im Nenner
- Darstellung wird nun zentriert bei Resize
- e wird in den Edits für Abszissen nun erkannt

Nicht behoben:
- Horizontale Asymptoten werden bei Beträgen, z.B. |tan(x)|, nicht dargestellt
- Konstante Ableitungen sehen immer noch blöd aus

Gruss
Shaman

fauxx 19. Apr 2004 18:58

Re: Numerische Analysis
 
Echt super-klasse!!
Solche Freeware Programme sieht man echt selten!!!
:hello:

Kleiner Verbesserungsvorschlag:
Das Intervall sollte beim Eingeben einer neuen Funktion auf 0,0 gesetzt werden....

Sonst beinahe perfekt...

fauxx 19. Apr 2004 19:31

Re: Numerische Analysis
 
integer-funktion (hat jetzt NICHTS mit Delphi zu tun...) wär noch praktisch...

Shaman 19. Apr 2004 21:03

Re: Numerische Analysis
 
Integer-Funktionen würden ziemlich komisch aussehen, ich weiss nicht, ob es das bringt... Dann noch die Ableitung... :wall:

Michael Leyhe 22. Apr 2004 16:06

Re: Numerische Analysis
 
Hi

Ich muss hier mal ein großes Lob loswerden. Das Programm ist echt gut gelungen :thuimb: . Die Funktionen werden sehr übersichtlich dargestellt und es beinhaltet alles was man braucht. :hello:

Das einzige was ich noch hinzufügen würde ist eine Option zum drucken des Koordinatensystems, dann wäre es auf dem Gebiet eine echte alternative zu Derive. Vor allem muss man sich in das Programm nicht solange einarbeiten :-D

:dp:

[edit] habe ein paar Rechtschreibfehler entfernt :lol: [/edit]

Shaman 22. Apr 2004 16:53

Re: Numerische Analysis
 
Danke dir :)

Hab ich mir auch schon überlegt. Doch dann sollte man wohl auch noch den zu druckenden Ausschnitt einstellen können, die Einheitslänge usw... Lässt sich natürlich alles noch machen, doch ich habe das Programm schon meinem Mathelehrer abgegeben. :wink:

CalganX 22. Apr 2004 17:19

Re: Numerische Analysis
 
Hi,
wirklich sehr schönes Programm. Ich verstehe zwar im Grunde nur Ansatzweise was Integration und Ableitung ist, aber ich habe mal ein ähnliches Programm geschrieben, aber das ist nun wirklich nahezu genial. :thuimb:

Chris

Wheelie 22. Apr 2004 18:42

Re: Numerische Analysis
 
Zitat:

Zitat von Chakotay1308
Hi,
Ich verstehe zwar im Grunde nur Ansatzweise was Integration und Ableitung ist, aber ich habe mal ein ähnliches Programm geschrieben, aber das ist nun wirklich nahezu genial. :thuimb:

Chris

Mit 14 Jahren und wahrscheinlich 8. Klasse?? :shock: :shock:

CalganX 22. Apr 2004 19:02

Re: Numerische Analysis
 
Hi,
14. Jahre und sicher in der 9. Klasse. ;)
Und im Praktikum Integral- und Differentialrechnung gelernt. ;)

Chris

[edit]Nur um Missverständnisse vorzubeugen: nicht meines ist genial, sondern das von Shaman ;)[/edit]

MrKnogge 22. Apr 2004 19:07

Re: Numerische Analysis
 
Zitat:

Zitat von Chakotay1308
Hi,
14. Jahre und sicher in der 9. Klasse. ;)
Und im Praktikum Integral- und Differentialrechnung gelernt. ;)

Chris

[edit]Nur um Missverständnisse vorzubeugen: nicht meines ist genial, sondern das von Shaman ;)[/edit]

Is schon so rüber gekommen :-D
Aber um sowas mit 14 hinzubekommen, das is nicht ohne !

Aber nun zurück zum Prog, ich find's echt gelungen und vor allem übersichtlich !

erniepb 30. Apr 2004 21:17

Re: Numerische Analysis
 
Ich würde mal sagen .. ist ein echt gelungenes Programm .. allerdings scheinst du noch ähnliche Probleme mit der Stetigkeit zu haben wie ich .. so zum Beispiel: "sgn(sin (pi*x))" oder 1.Ableitung von "asin(sin (x))"

Einige allgmeine Fragen:
- Arbeitest du eigentlich mit reinen String-Operationen oder mit "Bäumen"??
- Speicherst du die Rechenergebnisse zwischen?? in welcher Abhängigkeit bestimmst du die Pitch-Rate?? Ein Punkt pro Pixel
- Eine Sache würde mich dann noch interessieren .. bestimmst du die Ableitung numerisch oder führst du eine symbolische Differenzierung durch ??

Mfg ..

Shaman 30. Apr 2004 21:58

Re: Numerische Analysis
 
Ja, das Problem mit der Stetigkeit kenne ich. Wenn ich mal Zeit habe, werde ich das noch verbessern.

- Aus dem String, der einen Term darstellt, wird ein Baum erstellt, welcher rekursiv ausgewertet wird. Sonst würde es viiiel zu lange dauern :wink:
- Ich speichere keine Ergebnisse. Ich gehe einfach jeden Pixel von 0 bis Width durch, rechne in die richtige Abszisse um, bestimme den Funktionswert, rechne wieder zurück in die Client-Koordinaten und verbinde die Punkte vertikal mit LineTo. Meinst Du das?
- Symbolisch differenzieren, wäre cool wenn ich das fertigbringen würde... :lol: Die Ableitung bestimme ich ganz einfach in jedem Punkt mit
Code:
Gradient:= (F(X + H) - F(X)) / H;
für kleine H. Das reicht für eine graphische Darstellung. Wenn man die Steigung genau wissen will, ist die Funktion schon etwas umfangreicher...

Gruss
Shaman

erniepb 1. Mai 2004 12:31

Re: Numerische Analysis
 
Na das mit der Stetigkeit hab ich auch schon probiert ... bedeutet allerdings egal was man macht einen enormen Rechenaufwand ... weshalb ich das ganze bei mir noch nicht implementiert habe ... aber solltest du einen wirklich effizienten Weg finden ...

na wenn du das mit dem rekursiven Baum schon durch hast ... dann kann das mit der Ableitung ja gar nicht mehr so schwer sein ... das viel interessantere Problem ist es dann diesen zu vereinfachen!!! das hat mir nämlich schon stunden über stunden kopfschmerzen verursacht ...

na denn mal viel spass weiterhin ... und immer weiter so!!!
Falls du bei mir mal reingucken willst:LMH-online
(Wenn du in der config.ini den Wert "Betatest" auf "true" setzt werden im Tasksheet auch die Ableitungen ausgegeben)

Mfg ..

Shaman 1. Mai 2004 12:41

Re: Numerische Analysis
 
Meinst Du, es bringt was, wenn man aus dem rekursiven Baum einen iterativen macht? Ansonsten weiss ich nämlich nichts mehr, wie man das effizienter machen könnte... :gruebel:

Gruss
Shaman

erniepb 1. Mai 2004 19:33

Re: Numerische Analysis
 
Also die Sache mit dem rein Iterativen Baum ist meiner Meinung nach recht schwierig umzusetzen .. falls es überhaupt möglich ist .. allein schon wegen der Multiplikation vor Addition Sache .. allerdings ist es wohl nicht unmöglich .. und rein rechnerisch würde man dann auch wesentlich weniger Rechenzeit benötigen .. allerdings denke ich es wäre auch schon ausreichend beide Baumstrukturen miteinander zu kombinieren .. dies schien mir jedenfalls die effizienteste Lösung .. dann auch bezüglich des Ableitens ..

Nochmal ne allgemeine Frage .. wie lange arbeitest du jetzt an dem Projekt?? weil ich bin jetzt seit ca. 4 Jahren am rumwerkeln.. natürlich mit Pausen .. und momentan dabei das ganze aufs 3D auszuweiten .. wobei die Berechungen ja ähnlich bleiben nur halt die graphische Umsetzung ist ein wenig schwieriger .. insbesondere das ganze einiger maßen schnell zu machen ..

Verbesserungsmöglickeiten sehe ich insbesondere bei:
- mehrere Funktionen zeichen in ein koordinaten system
- Funktionenverwaltung (also Farben,...)
- Projekte/Einstellungen abspeichern

- hingegen scheint dein Berechungsalg doch recht effizient zu sein
- hingegen kann die graphische umsetzung noch etwas besser .. besonders bzgl Asymptoten und ähnlichem (z.B: abs(1/(x^2-x)))
- sonst wäre eine Erweiterung der Funktionsgruppen vielleicht noch ganz interessant (siehe z.B. mein Prg)
- Matrizen stehen bei mir auch noch auf der Liste (Mult, Add, Rang, Diagonalisierung, Triangulierung, vielleicht sogar Jordan-Normalform)
- symbolische Bestimmung von Grenzwerten (siehe Problem der Stetigkeit)
- allgemein symbolische Rechenregeln ... zum Beispiel zum Umstellen von Gleichungen


Ich sag mir immer .. die Mathematik bietet noch sooo viele Möglichkeiten ..
Aber wie gesagt: soweit so gut!!

Mfg

Shaman 2. Mai 2004 08:12

Re: Numerische Analysis
 
Hm, wie lang wir dafür brauchten, weiss ich gar nicht mehr. Zwei oder drei Monate, glaub. Die meiste Zeit nahm aber die Verbesserung der graphischen Darstellung in Anspruch, und die ist ja immer noch nicht perfekt. :wall:
Du zeigst in deinem Programm keine Asymptoten an, oder? Weil die machen mir vorallem bei Beträgen echt Kopfzerbrechen...

Gruss
Shaman

erniepb 2. Mai 2004 11:03

Re: Numerische Analysis
 
Nee warum auch ... seh ich ja gar nich ein ... notfalls kann sich der benutzer die ja selber einzeichnen, wenn er sie unbedingt haben möchte ... aber rein mathematisch haben die nicht wirklich die Bedeutung, als dass sie eingezeichnet werden müssten, und aus dem Graphen ist ja eindeutig erkennbar, dass da eine ist ...

Naja und ich vermute jetzt einfach mal ganz stark, dass du nicht in der lage bist links und rechtsseitige Grenzwerte zu berechnen ... oder ?? Wobei ich einen Alg entwickeln musste, gerade um die Asymptoten auszuschließen ... naja ich glaub das ganze ist geschmackssache ... und wie gesagt Asymptoten sind nicht wirklich sooo interessant :dance:

Mfg


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:39 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz