Matlab - Newton,Intervallschachtelung - Verständnisproblem

Neue Frage »

cd Auf diesen Beitrag antworten »
Matlab - Newton,Intervallschachtelung - Verständnisproblem
Ich hab folgende Aufgabe:
Das Newton-Verfahren haben Sie bereits implementiert.
Schreiben Sie nun eine MATLAB-Routine Intervallschachtelung.m zur Nullstellensuche einer Funktion f, welches auf dem Prinzip der Intervallschachtelung basiert. Als Eingabeparameter soll Ihre Routine die Intervallgrenzen a und b eines Startintervalls [a; b], eine Funktion f : R--> R, deren Ableitung f' : R --> R sowie eine Toleranz tol > 0 für das Abbruchkriterium erwarten. Programmieren Sie nun eine Kombination aus Intervallschachtelung und Newton-Verfahren. Ihre Routine NewtonSchachtelung.m soll zunächst einige Iterationen der Intervallschachtelung durchführen, bis eine Intervallgröße |b-a| < tol1 erreicht ist. Dann soll das Newton-Verfahren die Nullstelle bis auf eine Genauigkeit von tol2 bestimmen.
Die Rückgabewerte sollten die berechnete Näherungslösung x(Dach) element R sowie die Anzahl der durchgeführten Iterationen (a) des Intervallschachtelungsverfahrens und (b) des Newton- Verfahrens sein. Außerdem sollte ein Array übergeben werden, welches ausgehend von dem Startpunkt x(0) alle Iterierten x(k) enthält.


So ich hab jetzt folgende Intervallschachtelung.m programmiert:

function [m,a,b] = Intervallschachtelung(a,b, f, df, tol)
% a untere, b odere Grenze des Intervalls
% f Funktion von der form f = @(x), df deren Ableitung
% tol ist toleranz für das Abbruchkriterium
if tol <= 0,
error(' Toleranz muss > 0 sein');
end;
%Mittelpunkt des Intervalls
m1 = a + ((b-a)/2);

Iteration = log2((b-a)/tol); %Berechnung der Anzahl der notwendigen Schritte
n = ceil(Iteration);

for k = 1:n,
m = a + ((b-a)/2);
if sign(f(m)) == sign(f(a)),
a = m;
b = b;
elseif sign(f(m)) == sign(f(b)),
b = m;
a = a;
end;

end;


Jetzt soll ich ja ein NetwonSchachtelung.m programmieren aber ich scheiter schon am Beginn. Wenn ich meine Routine aufrufe, dann läuft die für eine gegeben toleranz durch und ich kann sie nicht abbrechen wenn |b-a| < tol1 sind.
Kann mir jemand sagen wie ich das mache, weil in dem oberen code darf ich das ja nicht, erst im neuen.

Viele Grüße
cd
Neue Frage »
Antworten »



Verwandte Themen

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