Ein Einzelschritt der Newton-Iteration zum Invertieren der Kugelfunktion wird im File 'kugjacrun.m' gezeigt. Zum Iterieren muss dieses Skript mehrfach aufgerufen werden.
% kugjacrun.m 3D Newton Iteration xstart = [5 0.5 0.3]'; xaktuell = xstart for iter = 1:8 ferr = kugfct(xaktuell) delx = -kugjac(xaktuell)\ferr xaktuell = xaktuell + delx pause endDabei werden die Funktionen 'kugfct.m' und 'kugjac.m' aufgerufen.
% fvec=kugfct(xvec) Abweichungen bei Kugelfunktions-Iteration function fvec = kugfct(xvec) fvec = zeros(3,1); fvec(1) = xvec(1)*cos(xvec(2))*cos(xvec(3)) - 2; fvec(2) = xvec(1)*cos(xvec(2))*sin(xvec(3)) - 7; fvec(3) = xvec(1)*sin(xvec(2)) - 3;
% Jkug = kugjac(xvec) Jacobi Matrix zu Kugelkoordinaten function Jkug = kugjac(xvec) Jkug = zeros(3); rac = xvec(1); tac = xvec(2); wac = xvec(3); Jkug(1,1)= cos(tac)*cos(wac); Jkug(1,2)= -rac*sin(tac)*cos(wac); Jkug(1,3)= -rac*cos(tac)*sin(wac); Jkug(2,1)= cos(tac)*sin(wac); Jkug(2,2)= -rac*sin(tac)*sin(wac); Jkug(2,3)= rac*cos(tac)*cos(wac); Jkug(3,1)= sin(tac); Jkug(3,2)= rac*cos(tac); Jkug(3,3)= 0 ;
Im File 'funkfeuer.m' zur Lösung der Übung 60 - 33 sind die beiden Funktionen zur Evaluation der Abweichungen und zur Bestimmung der Jacobimatrix als Unterfunktionen definiert. Dazu muss die Hauptfunktion aber selbst eine Funktion sein, ein Skript ist nicht erlaubt.
%[x,y]= funkfeuer(d1,d2) 2D Newton Iteration function [xpos,ypos] = funkfeuer(d1,d2) xv = [5 5]'; dv = [d1;d2]; for iter =1:8 dx = funkfeuerjac(xv) \ funkfeuerfct(xv,dv); xv = xv -dx; end xpos = xv(1); ypos = xv(2); % subfunction funkfeuerfct function fmom = funkfeuerfct(xv,dv) fmom=zeros(2,1); fmom(1) = sqrt(xv(1)^2+xv(2)^2) - ... sqrt(xv(1)^2+(xv(2)-10)^2) - dv(1); fmom(2) = sqrt(xv(1)^2+xv(2)^2) - ... sqrt((xv(1)-10)^2+xv(2)^2) - dv(2); % subfunction funkfeuerjac function jbk = funkfeuerjac(xv) jbk(1,1) = xv(1)/sqrt(xv(1)^2+xv(2)^2) - ... xv(1)/sqrt(xv(1)^2+(xv(2)-10)^2); jbk(1,2) = xv(2)/sqrt(xv(1)^2+xv(2)^2) - ... (xv(2)-10)/sqrt(xv(1)^2+(xv(2)-10)^2); jbk(2,1) = xv(1)/sqrt(xv(1)^2+xv(2)^2) - ... (xv(1)-10)/ sqrt((xv(1)-10)^2+xv(2)^2); jbk(2,2) = xv(2)/sqrt(xv(1)^2+xv(2)^2) - ... xv(2)/ sqrt((xv(1)-10)^2+xv(2)^2);