
Viele Grüße
masterm
Freut michmasterm 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 !! ^^
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.Euklid hat geschrieben:Das sind aber auch die Vorteile Freier Software, zu der jeder etwas beitragen kann
Ich hab das jetzt in meinem Programm so gemacht, dass der User über ein weiteres Editfeld selbst die Ableitung eingeben muss: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');
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;
Code: Alles auswählen
Result:=SAbleitung (Edit1.Text);
Code: Alles auswählen
CAS1.FEing(SAbleitung(Edit1.Text));
RESULT := CAS1.FWert(x);
Code: Alles auswählen
CAS1.FEing(SAbleitung(Edit1.Text));
RESULT := CAS1.FWert(x);
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.MitjaStachowiak hat geschrieben:Ich kann mkir nicht vorstellen, dass Minicomputer, die Newtonverfahren anwenden, alle eine Ableitungsfunktion verwenden....
Haha !MitjaStachowiak hat geschrieben: M(x) = (f(x + SehrKleinerWert) - f(x)) / SehrKleinerWert
Das ist aber so, denn sonst wäre es ja kein Newtonverfahren sondern zB das Sekantenverfahren!MitjaStachowiak hat geschrieben:Ich kann mkir 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.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....
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.indianer-frank hat geschrieben:Das ist aber so, denn sonst wäre es ja kein Newtonverfahren sondern zB das Sekantenverfahren!
Also, ich habs nun so gemacht, klappt aber immer noch nicht. ^^ Ich verknüpfe höchstwahrscheinlich etwas falsch, oder ? xDEuklid hat geschrieben:Sorry, mein Fehler:
CAS.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;
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 hat geschrieben:Das ist doch das Gleiche wie das Regula-Falsi-Verfahren, oder ?
Achso, es wird bei der Ableitung als String wiedergegeben. ^^ ok, jetzt, wo ich es weiß, hat es auch geklappt xD :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?
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;
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 Funktionenindianer-frank hat geschrieben: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 hat geschrieben:Das ist doch das Gleiche wie das Regula-Falsi-Verfahren, oder ?