block Befehl in Programm Maxima

Neue Frage »

DieKleinste Auf diesen Beitrag antworten »
block Befehl in Programm Maxima
Hallo
ich hab ein kleines Programmierungsproblem und komm einfach nicht drauf. Ich muss einen Vortrag über das Programm Maxima machen und dazu den block-Befehl zeigen.

Jetzt dachte ich mir, dass das mit dem Newton-Verfahren sehr schön wäre. Aber jetzt bekomme ich dauernd eine Fehlermeldung und weiß nicht warum. Laut Hilfe hab ich alles richtig eingegeben.

Ich schreib jetzt mal was ich gemacht hab, vielleicht kann mir jemand helfen, das wär echt super!

f(x)=x^4-2*x^3+3*x-7;
f1(x)=diff(f(x),x);
xn:1$
newton(n):=block(for i:1 thru n do xn:xn-f(xn)/f1(xn),return(xn));
newton(5);

normal müsste das so passen, die ersten zwei Funktionen spukt er mir auch brav aus, doch nach dem block kommt die Meldung:

(%o53) newton(n):=block(for i thru n do xn:xn-f(xn)/f1(xn),return(xn))
diff: second argument must be a variable; found 1
#0: f1(x=1)
#1: newton(n=5)
-- an error. To debug this try: debugmode(true);

Vielen lieben Dank bis dahin
hawe Auf diesen Beitrag antworten »

Hallo,

erstmal guckst Du
http://www.lemitec.de/maxima.html

Dann Funktionszuweisungen haben einen Doppelpunkt
f(x):=x^4-2*x^3+3*x-7
zur Vermeidung von Simplifikationsproblemen (zu welchem Zeitpunkt wird die Funktion ausgewertet) verwendest Du grundsätzlich besser define, also
define(f(x),x^4-2*x^3+3*x-7);

Für diesen Anwendungsfall würde ich aber alles in dem Newton-Block reinpacken, also etwa

code:
1:
2:
3:
4:
5:
6:
7:
newton(f,n):=block(
[xn:1],
define(f(x),f),
define(f1(x),diff(f,x)),
for i:1 thru n do  xn:xn-f(xn)/f1(xn),
return(float(xn)));

besser wäre eine Schleifenterminierung für die gewüschte Genauigkeit und Startwert, etwa
code:
1:
2:
3:
4:
5:
6:
7:
8:
9:
newton(f,xn,eps):=block(
define(f(x),f),
define(f1(x),diff(f,x)),
xn:float(xn),
while abs(f(xn)/f1(xn))>eps do (
    xn:xn-f(xn)/f1(xn)
    ),
return(float(xn))
);
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »