![]() |
Mathematische Funktionen ableiten
Hallo,
In der Schule haben wir einen Plotter programmiert, der Funktionen zeichnen kann. Um die Funktionen zu Parsen, hatten wir eine Vorgabe. Jedoch müssen wir noch programmieren, dass das Programm eine Funktion ableiten kann. Allerdings hab ich im Kopf ein absolutes Blackout. :wall: Wüsste jemand vielleicht eine Möglichkeit, wie man das umsetzen könnte? Vielen Dank im Vorraus |
Re: Mathematische Funktionen ableiten
Nun, direkt ableiten wie man es auch in Mathe macht geht. Dazu brauchst du nur einen Baum deines Ausdrucks, auf den du dann die Ableitungsregeln anwendest...
Ansonsten könntest du noch numerisch differenzieren per Differenzquotient:
Code:
f(x + h) - f(x)
--------------- h |
Re: Mathematische Funktionen ableiten
Letzteres ist eher schwer mit Delphi zu lösen -> 0 durch 0 etc...
Was sind das denn für Gleichungen? OT: Hab heute meine erste LK-Mathe-Klausur überstanden^^ |
Re: Mathematische Funktionen ableiten
Zitat:
Zitat:
|
Re: Mathematische Funktionen ableiten
Also eigentlich sollte es möglich sein, am besten alle Arten von Gleichungen zu lösen.
Sprich: Kettenregel, Ableitungen von sin(), cos() und Wurzelfuntionen. Das Einzige, was wir nicht machen müssen sind Ableitungen von e-Funktionen. @Nicolai: Ich schreibe am Freitag 5 Stunden Mathe über Vektoren ;) |
Re: Mathematische Funktionen ableiten
Zitat:
Also man gibt f(x) = 2x² ein und erhält f'(x) = 4x <- Natürlich mit komplizierteren Gleichungen^^ Ich würde für einfache Gleichungen nach Regeln vorgehen, also so wie ich meine. Bei komplexeren Sachen würde ich nur zum Zeichnen den Weg vom Daxen nehmen. EDIT: wo war der Kasten :? Zitat:
Zitat:
:arrow: Trennung der einzelnen Summanden :arrow: Konstandte Faktoren Suchen :arrow: den Rest ableiten Wie man den Rest ableitetet ist eine interessante Frage. Vielleicht helfen da die zahlreichen Matheparser in der DP weiter um einen Ansatz zu finden. |
Re: Mathematische Funktionen ableiten
Zitat:
Mit einem solchen Baum sind selbst komplizierteste Gleichungen einfach abzuleiten. Man geht einfach nach den Regeln vor und ersetzt die trigonometrischen Funktionen entsprechend ihren Ableitungen :) Edit: jaaa, das war der Absenden-Button, nicht die Vorschau.. |
Re: Mathematische Funktionen ableiten
Ja das mit dem nach Regeln vorgehen war mir schon klar.
Aber bei einer Kettenregel könnte das doch ein wenig schwer werden. Aber es ist auch nicht möglich über Binärbaume zu gehen, oder? Ich meine, so kann man ja auch Mathematische Funktionen Parsen. |
Re: Mathematische Funktionen ableiten
Binärbäume kannst du dabei nicht nehmen. Du musst schon den Baum nehmen, den dein Asdruck liefert.
Sagen wir mal, dein Programm soll den Ausdruck 2(4x+3)² ableiten. Normalerweise wird das so geparst, das das 2( X )² die höchste Ebene ist, wobei X ein Kindelement symbolisiert, in dem Fall 4x+3. Das lässt sich natürlich weiter aufsplitten in 4x, +, 3. Idealerweise speicherst du zu jedem Koeffizienten die Potenz von x, die dazugehört. Beim ableiten nimmst du dir alle her und leitest sie entsprechend der Potenzregel ab. Sprich, der Baum nach der Ableitung wäre einfach 4: die innere Ableitung. Die äußere bekommst du analog, allerdings wird hier keine Zahl als Koeffizient und nicht x als Basis gebraucht, sondern das Kindelement als Basis und 2 als Koeffizient. Hier kannst du wieder den Regeln entsprechend ableiten. Wie man das ganze dann der Regel entsprechend zusammenpappt dürfte ja auch nicht so schwer zu verstehen sein ;) Einfach Klammer drum (eigenes Kindelement), *-Element dran und die innere Ableitung (auch in Klammern) ran. Ist zwar nicht die zwanghaft saubere Methode, aber recht simpel zu realisieren. |
Re: Mathematische Funktionen ableiten
So ich hab heute erfahren, dass wir die Ableitung gar nicht angeben müssen, sondern es reicht, wenn wir den Graphen der abgeleiteten Funktion einzeichnen.
Ich hab das aber über die Formel f(x) - f(x0) ------------ x - x0 gemacht. Jetzt bräuchte ich aber noch die zweite Ableitung und soweit ich weiß, gibbet da keine Formel für. Wüsste vielleicht einer von euch eine Lösung? |
Re: Mathematische Funktionen ableiten
Du kannst da doch genau so vorgehen.
Einfach statt den Funktionswerten f(x) etc. f'(x) einsetzen. Und f' hast du ja schon. |
Re: Mathematische Funktionen ableiten
Nein, ich würde nicht sagen, dass ich damit f'(x) habe.
Ich hab damit ja nur die Punkte eingezeichnet in einer For-Schleife. Mehr nicht. Das heißt, ich geh von meinem Minimum in Graphen auf, bis zum Maximum an der X1-Achse entlang. Dann rechne ich den nummerischen Wert aus und zeichne ihn in meine X2-Achse ein. Aber ich hab nicht die f'(x) damit... |
Re: Mathematische Funktionen ableiten
Nehmen wir an, die x-Achse deines Koordinatensystems geht von -5 bis 5. Dann legst du dir drei arrays an:
Delphi-Quellcode:
In F speicherst du dann alle Y-Werte. Für FStrich baust du dir dann eine for-Schleife à la:
F: array[-52..52] of Extended;
FStrich: array[-51..51] of Extended; FStrichStrich: array[-50..50] of Extended;
Delphi-Quellcode:
Für FStrichStrich entsprechend anders. F[34] wär dann f(3,4). Die Indizes bei arrays AFAIK dürfen doch keine Floats sein, oder?
for x := -51 to 51 do
FStrich[x] := (F[x+1] - F[x-1])*5// durch 0,2 |
Re: Mathematische Funktionen ableiten
Zitat:
Delphi-Quellcode:
function f(x: Extended): Extended;
{ ... deine Funktion eben ... } function fDerivation(x: Extended; grade: Integer); begin if grade = 0 then Result := f(x) else Result := (fDerivation(x + Epsilon, grade - 1) - fDerivation(x, grade - 1)) / Epsilon; end; |
Re: Mathematische Funktionen ableiten
Vielen Dank für eure Hilfe, aber ich hab selbst ne Lösung gefunden.
War jetzt solange mit dran, dass ich nicht mehr hier reingeschaut hatte :oops: ALso ich mach das so: Ich bilde die Ableitung von x1 und von x2; Dann hab ich ja die beiden Koordinaten zu diesen Punkten. Mit den beiden mach ich jetzt nochmal eine Differenzialrechnung uns erhalte damit den Wert für die zweite Ableitung. Funktioniert auch wunderbar. Aber trotzdem nochmal vielen Dank von euch allen :thumb: @Dax: Ich arbeite lieber mit f(x) - f(x0) ------------ x - x0 Fand ich irgendwie immer besser als das mit h :mrgreen: |
Re: Mathematische Funktionen ableiten
Man kann die Ableitung(en) (den Wert) auch über automatische Differentiation berechnen. Google mal danach. Dazu muss man allerdings Operatoren überladen, aber das geht ja ab BSD 2006 / Turbo Delphi
rantanplan |
Re: Mathematische Funktionen ableiten
Liste der Anhänge anzeigen (Anzahl: 1)
Hat sich alles schon erledigt.
Hab das Programm jetzt fertig. Habs mal hochgeladen, falls das einer mal sehen möchte ^^ |
Re: Mathematische Funktionen ableiten
Wirst du das auch als Source veröffentlichen? (Wäre vor allem für Physikprogramme unglaublich praktisch).
|
Re: Mathematische Funktionen ableiten
Liste der Anhänge anzeigen (Anzahl: 1)
So ich hab jetzt mal den Quelltext meines Programms hochgeladen, für die, die es gerne haben möchten.
Der Quelltext ist nicht gerade super kommentiert, aber man dürfte damit klarkommen. :mrgreen: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:07 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