Übergabe einer Funktion < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) reagiert/warte auf Reaktion | Datum: | 13:11 Do 05.11.2009 | Autor: | Bachelor10 |
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Hallo!
Ich bin gerade dabei das Newton Verfahren zu schreiben. Es funktioniert eigentlich auch ganz gut. Nur habe ich ein Problem: Ich kann keine Funktion übergeben.
Mein Programm sollte so anfangen:
function[x, i] = newton(fx, x, TOL1, TOL2, NO);
fx: Name der Funktion
x: Anfangswert
TOL1, TOL2: Toleranzen
NO: Iterrationsschrittanzahl
Wenn ich nun newton(x.^2, 1, 0.01, 0.01, 3) eingebe, so kommt die Fehlermeldung:
??? Undefined function or variable 'x'
Wenn ich jedoch die Funktion selber in den Programmcode einfüge:
(Ich ändere das Verfahren so, dass man die Funktion nicht mehr mitgibt)
function[x, i] = newton4(x, TOL1, TOL2, NO);
i = 0;
while i < NO
i
x
f = fx
if abs(f) < TOL1
'Verfahren konvergiert, Residuum kleiner als '
TOL1, ' Lösung x ist berechnet'
return
end
f1 = 2*x;
% hier bilde ich die Ableitung von x.^2 selber, das ich noch nicht weiß, wie man die Ableitung ausrechnet!
if f1 == 0
'Newtonverfahren ist nicht durchführbar, da die 1. Ableitung = 0'
return
end
y = -f/f1;
% y ist die Newtonkorrektur
xalt = x;
i = i+1;
x = x+y;
if abs(xalt - x) < TOL2
'Verfahren konvergiert, Differenz der x-Werte kleiner als ',
TOL2, ', Lösung ist berechnet'
end
end
'maximale Iterationsschrittanzahl NO überschritten'
Dann funktioniert das ganze.
Kann mir jemand helfe???
Ich arbeite mit Matlab 7.6.0
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 14:24 Do 05.11.2009 | Autor: | Bachelor10 |
Lösung gefunden:
f = inline('x.^2', 'x');
newton(f, 1, 0.01, 0.01, 5);
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 14:14 Fr 06.11.2009 | Autor: | Bachelor10 |
Problem gelöst!
Wie ihr vielleicht schon bei meinem anderen Artikel gelesen habt, habe ich in der Uni mit einer Studentenversion gearbeitet, die bestimmte Toolboxen nicht unterstützt hat. Deshalb ging z.B. der Befehl 'syms' nicht. Problem ist nun gelöst:
syms x;
f = x.^2;
newton(f, 1, 0.01, 0.01, 2)
Funktion f, Startwert 1, Toleranzen 0.1 und 0.1 und 2 Iterationsschritte.
|
|
|
|