Mathematische Funktionen

Für Fragen von Einsteigern und Programmieranfängern...
masterm
Beiträge: 15
Registriert: Do 11. Okt 2012, 18:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

Re: Mathematische Funktionen

Beitrag von masterm »

Wow, es geht. Mannoman, es funktioniert wirklich. ^^ Ich habe danach einfach noch eine Variable für die Ableitung der Funktion (also zum Eingeben) definiert, und der nimmt es wirklich an. ;) Funktioniert endlich, wie ich es mir vorgestellt habe. Super, vielen Dank !! ^^

Viele Grüße
masterm

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Mathematische Funktionen

Beitrag von Euklid »

masterm hat geschrieben:Wow, es geht. Mannoman, es funktioniert wirklich. ^^ Ich habe danach einfach noch eine Variable für die Ableitung der Funktion (also zum Eingeben) definiert, und der nimmt es wirklich an. ;) Funktioniert endlich, wie ich es mir vorgestellt habe. Super, vielen Dank !! ^^
Freut mich :)

Das sind aber auch die Vorteile Freier Software, zu der jeder etwas beitragen kann ;)

Viele Grüße, Euklid

masterm
Beiträge: 15
Registriert: Do 11. Okt 2012, 18:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

Re: Mathematische Funktionen

Beitrag von masterm »

Euklid hat geschrieben:Das sind aber auch die Vorteile Freier Software, zu der jeder etwas beitragen kann ;)
Das stimmt, ich finds auch super, dass sowas hier einfach mal frei verfügbar ist. Jetzt auch nicht wie bei Delphi, wo man es sich kaufen muss und es auch nicht überall läuft und mit Lazarus kannst du einfach mal überall programmieren. ;)

masterm
Beiträge: 15
Registriert: Do 11. Okt 2012, 18:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

Re: Mathematische Funktionen

Beitrag von masterm »

Hey, noch eine letzte Frage von mir (dann wäre wahrscheinlich mein Programm komplett, hoff ich ^^):
Euklid hat geschrieben:6. Die Ableitung nach der Variablen x bildest Du durch:

Code: Alles auswählen

 
var
[...]
    Ableitungsterm: string;
[...]
Ableitungsterm := SAbleitung('x*x-4','x');
Ich hab das jetzt in meinem Programm so gemacht, dass der User über ein weiteres Editfeld selbst die Ableitung eingeben muss:

Code: Alles auswählen

var CAS1:tAnalyse;
[...] 
function TForm1.f_1_Abl(x:real):real;
begin
CAS1:=tAnalyse.Create;
CAS1.FEing(Edit2.Text);
Result:=CAS1.FWert(x);
CAS1.Free;
end;  
Wie kann ich es aber so machen, dass das Programm von der Funktion, die er bekommt, die Ableitung automatisch bilden kann und wie füge ich es in meinen function-Befehl ein ? So etwa ?

Code: Alles auswählen

 Result:=SAbleitung (Edit1.Text); 


Weil so hats bei mir nicht funktioniert.

Grüße, masterm

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Mathematische Funktionen

Beitrag von Euklid »

Meinst Du sowas?

Code: Alles auswählen

CAS1.FEing(SAbleitung(Edit1.Text));
RESULT := CAS1.FWert(x);
Gruß, Euklid

masterm
Beiträge: 15
Registriert: Do 11. Okt 2012, 18:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

Re: Mathematische Funktionen

Beitrag von masterm »

Code: Alles auswählen

CAS1.FEing(SAbleitung(Edit1.Text));
RESULT := CAS1.FWert(x);
Ja, genau sowas meint ich. Das Problem allerdings hier ist, SAbleitung kennt er nicht. Er zeigt mir als Fehler die ganze Zeit "Identifier not found SAbleitung" an...

Gruß, masterm

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Mathematische Funktionen

Beitrag von Euklid »

Sorry, mein Fehler:
CAS.SAbleitung

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 395
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: Mathematische Funktionen

Beitrag von MitjaStachowiak »

Also auch wenn jetzt schon eine Möglichkeit zum Ableiten bekannt ist - ich glaube, man muss gar keine mathematische Ableitung der Funktion machen.

Man kann die Steigung doch auch so bestimmen: M(x) = (f(x + SehrKleinerWert) - f(x)) / SehrKleinerWert

Das ist nur eine Näherung, aber das Newtonverfahren ja auch. Solange SehrKleinerWert nochmal deutlich keiner ist, als die Entfernung bis zur Nullstelle, sollte das auch zu sinnvollen Ergebnissen führen.

Ich kann mkir nicht vorstellen, dass Minicomputer, die Newtonverfahren anwenden, alle eine Ableitungsfunktion verwenden....

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Mathematische Funktionen

Beitrag von Euklid »

MitjaStachowiak hat geschrieben:Ich kann mkir nicht vorstellen, dass Minicomputer, die Newtonverfahren anwenden, alle eine Ableitungsfunktion verwenden....
Das kann ich mir auch nicht vorstellen. Allerdings dürfte der Weg über die Ableitung doch deutlich schneller sein, da nach Berechnung der Ableitung deutlich weniger Rechenschritte nötig sind.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Mathematische Funktionen

Beitrag von mschnell »

MitjaStachowiak hat geschrieben: M(x) = (f(x + SehrKleinerWert) - f(x)) / SehrKleinerWert
Haha !

Ist SehrKleinerWert klein, bekommst Du Rundungsfehler (weil Du annähernd Null durch Null dividierst und vorher beim Subtrahieren alle relevanten Stellen weggeworfen hast), ist SehrKleinerWert größer, machst Du einen Systematischen Fehler.

Bei gutartigen Funktionen musst Du SehrKleinerWert geschickt wählen, bei entsprechend "bösen" Funktionen kommt da nie ein brauchbares Ergebnis bei raus.

Wenn Du natürlich eine Funktion hast, von der Du die Ableitung nicht angeben kannst (weil die Grundfunktion z.B. nicht "geschlossen" sondern über eine Iteration o.ä. bestimmt ist), musst Du Verfahren mit einer Approximation programmieren: z.B. Newton (entspricht einer Approximation durch eine Gerade=Polynom 1, Grades), oft cleverer: Approximation durch eine einfache Funktion (z.B. Polynom n. Grades) und als Näherungswert der Ableitung/Nullstelle dann die bekannte Ableitung oder Nullstelle der Funktion an der entsprechenden Stelle verwenden.

-Michael
Zuletzt geändert von mschnell am Di 16. Okt 2012, 12:29, insgesamt 1-mal geändert.

indianer-frank
Beiträge: 134
Registriert: So 30. Nov 2008, 21:53

Re: Mathematische Funktionen

Beitrag von indianer-frank »

MitjaStachowiak hat geschrieben:Ich kann mkir nicht vorstellen, dass Minicomputer, die Newtonverfahren anwenden, alle eine Ableitungsfunktion verwenden....
Das ist aber so, denn sonst wäre es ja kein Newtonverfahren sondern zB das Sekantenverfahren!

masterm
Beiträge: 15
Registriert: Do 11. Okt 2012, 18:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

Re: Mathematische Funktionen

Beitrag von masterm »

MitjaStachowiak hat geschrieben:Also auch wenn jetzt schon eine Möglichkeit zum Ableiten bekannt ist - ich glaube, man muss gar keine mathematische Ableitung der Funktion machen.

Ich kann mir nicht vorstellen, dass Minicomputer, die Newtonverfahren anwenden, alle eine Ableitungsfunktion verwenden....
Ich habe den Weg der Ableitung gewählt, weil es auch einfach viel exakter und genauer ist, wenn ich es machen müsste. Desweiteren bin ich mir nicht sicher, was für Fehler ich bei komplexeren Funktionen hier mit dieser Methode bekommen würde, und wenn ich die Ableitung bilde, brauche ich ja nur noch ein paar Rechenschritte und dann hast du schon dein Ergebnis, deshalb mach ich mir da keinen Kopf. ;)
indianer-frank hat geschrieben:Das ist aber so, denn sonst wäre es ja kein Newtonverfahren sondern zB das Sekantenverfahren!
Das ist doch das Gleiche wie das Regula-Falsi-Verfahren, oder ? Weil, dazu habe ich auch ein Programm geschrieben und da brauchst du nur die Funktion und die beiden Startwerte (und falls man will noch die Anzahl, wieviel mal er das machen müsste), aber KEINE Ableitung. Dort brauch er nämlich keine Ableitung zu bilden, da es dort beim Ausrechnen halt nicht gebraucht wird.
Euklid hat geschrieben:Sorry, mein Fehler:
CAS.SAbleitung
Also, ich habs nun so gemacht, klappt aber immer noch nicht. ^^ Ich verknüpfe höchstwahrscheinlich etwas falsch, oder ? xD
Gibt mir als Fehler: Wrong number of parameters specified for call to SAbleitung.

Code: Alles auswählen

function TForm1.f_1_Abl(x:real):real;
begin
CAS1.create;
CAS1.FEing(CAS.SAbleitung);
RESULT := CAS1.FWert(x);
CAS1.Free;
end;
Grüße, masterm
Zuletzt geändert von Lori am Mi 17. Okt 2012, 20:01, insgesamt 1-mal geändert.
Grund: Bitte den richtigen Highlighter benutzen

Euklid
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 10:38
OS, Lazarus, FPC: Lazarus v2.0.10, FPC 3.2.0
Wohnort: Hessen
Kontaktdaten:

Re: Mathematische Funktionen

Beitrag von Euklid »

Vgl. meine Beschreibung ganz oben: SAbleitung braucht als Übergabeparameter sowohl den Funktionsterm als auch die Variable, nach der abgeleitet wird: CAS.SAbleitung(Funktionsterm,Variable); oder konkret CAS.SAbleitung('x^2+1','x');

Beide Übergabeparameter müssen vom Typ String sein. Edit1.Text zum Beispiel geht auch. Die Funktion selbst gibt als Ableitung auch einen String zurück. Die Ableitung kannst Du also in einer entsprechenden Variablen speichern, z.B.: AblTerm:=CAS.SAbleitung(Edit1.Text,'x');
Hoffe, das macht die Handhabung etwas klarer?

indianer-frank
Beiträge: 134
Registriert: So 30. Nov 2008, 21:53

Re: Mathematische Funktionen

Beitrag von indianer-frank »

masterm hat geschrieben:Das ist doch das Gleiche wie das Regula-Falsi-Verfahren, oder ?
Nein, sonst wäre ja auch ein Name überflüssig. Der wesentliche Unterschied ist, das RegulaFalsi die Iterationen immer mit zwei Näherungen durchführt, die eine Nullstelle einschließen, wo also die Funktionswerte unterschiedliche Vorzeichen haben. Sekanten- und Newtonverfahren machen das nicht: Sie können dadurch manchmal ziemlich in die Prärie laufen, konvergieren (in der Regel) aber schneller, wenn man nahe genug an der Nullstelle ist. RegulaFalsi ist wie Bisektion (idR) langsamer aber sicherer.

masterm
Beiträge: 15
Registriert: Do 11. Okt 2012, 18:56
OS, Lazarus, FPC: Winux (L 0.9.xy FPC 2.2.z)
CPU-Target: xxBit
Wohnort: Berlin

Re: Mathematische Funktionen

Beitrag von masterm »

Euklid hat geschrieben:Vgl. meine Beschreibung ganz oben: SAbleitung braucht als Übergabeparameter sowohl den Funktionsterm als auch die Variable, nach der abgeleitet wird: CAS.SAbleitung(Funktionsterm,Variable); oder konkret CAS.SAbleitung('x^2+1','x');

Beide Übergabeparameter müssen vom Typ String sein. Edit1.Text zum Beispiel geht auch. Die Funktion selbst gibt als Ableitung auch einen String zurück. Die Ableitung kannst Du also in einer entsprechenden Variablen speichern, z.B.: AblTerm:=CAS.SAbleitung(Edit1.Text,'x');
Hoffe, das macht die Handhabung etwas klarer?
Achso, es wird bei der Ableitung als String wiedergegeben. ^^ ok, jetzt, wo ich es weiß, hat es auch geklappt xD :

Code: Alles auswählen

function TForm1.f_1_Abl(x:real):real;
begin
CAS1:= tAnalyse.create;
AblTerm:=CAS.SAbleitung(Edit1.Text,'x');
CAS1.FEing(AblTerm);
RESULT := CAS1.FWert(x);
CAS1.Free;
end; 
Mehr wollte ich für das Programm nicht.Funktioniert endlich auch, vielen Dank. ;) Und ja, ist auch endlich klarer geworden, was die Handhabung angeht. ^^
indianer-frank hat geschrieben:
masterm hat geschrieben:Das ist doch das Gleiche wie das Regula-Falsi-Verfahren, oder ?
Nein, sonst wäre ja auch ein Name überflüssig. Der wesentliche Unterschied ist, das RegulaFalsi die Iterationen immer mit zwei Näherungen durchführt, die eine Nullstelle einschließen, wo also die Funktionswerte unterschiedliche Vorzeichen haben. Sekanten- und Newtonverfahren machen das nicht: Sie können dadurch manchmal ziemlich in die Prärie laufen, konvergieren (in der Regel) aber schneller, wenn man nahe genug an der Nullstelle ist. RegulaFalsi ist wie Bisektion (idR) langsamer aber sicherer.
Ah, stimmt, es funktioniert anders, als ich es auf den ersten Blick gesehen habe. Ja, klar, bei dem Verfahren können auch die Werte mal (jetzt bei ganz bösen Funktionen ;) ) in ganz komische Bereiche gelangen. Deshalb verwende ich da Regula-Falsi auch lieber, einfach weil es sicherer ist (auch wenn es länger dauert, aber ich kann sicher sein, dass es da stimmt).
Zuletzt geändert von Lori am Mi 17. Okt 2012, 20:02, insgesamt 1-mal geändert.
Grund: Bitte den richtigen Highlighter benutzen

Antworten