Dazu habe ich folgendes Newton Verfahren geschrieben:
Code:
function[ x ] = newton( f, x0 )
%NEWTON VERFAHREN FÜR VEKTORWERTIGE FUNKTIONEN
%BILDUNG JACOBI MATRIX
max = 1000; %maximale Iterationsschritte
lim = 1.e-12; %Abbruchkriterium
syms c1 x1 y1 z1; %Deklariere Var für Jacobi Matrix
c1 = [x1; y1 ;z1]; %Deklariere Vektorform für c1
Df = jacobian(f(c1),c1) %Bilde Jacobi Matrix nach c1 und return, um zu kontrollieren
subDf = eval(subs(Df,{x1, y1, z1},{x0(1),x0(2),x0(3)})); %Einsetzen von x0 in Jacobi Matrix
bekomme ich nun aber immer NaN heraus, was aber nicht sein kann, da ich in diesem Fall für dieses x0 eine konkrete Lösung erhalten sollte.
Was habe ich falsch gemacht?
lg
verwende doch mal den Debugger um zu sehen, wo das Problem liegt - also, wo die NaN herkommen?
Meines Erachtens liegt das Problem darin, dass f(c1) eine numerische Matrix ist und es keinen Sinn macht, daraus die Jacobi-Matrix symbolisch zu bestimmen.
Man muss also entweder die Jacobi-Matrix numerisch über Differenzenquotienten bestimmen oder die Funktion auch wirklich symbolisch definieren.
da das Newton-Verfahren ein numerisches Finden von Nullstellen ist, macht es wohl kaum Sinn, symbolisch die Jakobimatrix ausrechnen zu wollen. »max« ist eine wichtige Matlabfunktion und sollte nicht mit einer Zahl überschrieben werden.
Ok Danke für die Antworten!
Ich habe heute den ganzen Tag daran herumgedoktort und bin dann auf folgendes gekommen.
Ich habe schließlich ganz einfach das:
Code:
subDf = eval(subs(Df,{x1, y1, z1},{x0(1),x0(2),x0(3)})); %Einsetzen von x0 in Jacobi Matrix
for i = 1:itmax
x=x0-subDf\f(x0); %Newton Iteration
in der ersten Variante hast du die Jacobi-Matrix nur einmalig vor der for-Schleife berechnet, in der zweiten berechnest du sie innerhalb der for-Schleife und damit in jeder Iteration neu.
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.