Jacobi in Newton-Verfahren < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Aufgabe | Implementieren Sie das mehrdimensionales Newton-Verfahren in MATLAB für die Funktion [mm] F:\IR^5->\IR^5. [/mm] Dazu benötigen Sie u.a.
1a) Jacobi-Matrix mit Block und Bleistift berechnen
1b) Approximation der Jacobi-Matrix
2) ein Interface für die zulösende Funktion |
myFunc.m
function res = myFunc ( a,b,c,d,e)
res (a) =(sin((pi/2)*a))-1;
res (b) = b - c;
res (c) = c - 3/2;
res (d) = [mm] a^2-d^2;
[/mm]
res (e) = [mm] e/(a^2+1);
[/mm]
end
myJacobi.m (Handschriftlich)
function [J]=myJacobi(a,d,e)
J(1,1)=(pi/2)*cos((pi/2)*a);
J(1,2)=0;
J(1,3)=0; %% JACOBI ZU Fuß
J(1,4)=0;
J(1,5)=0;
J(2,1)=0;
J(2,2)=1;
J(2,3)=-1;
J(2,4)=0;
J(2,5)=0;
J(3,1)=0;
J(3,2)=0;
J(3,3)=1;
J(3,4)=0;
J(3,5)=0;
J(4,1)=2*a;
J(4,2)=0;
J(4,3)=0;
J(4,4)=-2*d;
J(4,5)=0;
[mm] J(5,1)=-2*a*e/((2*a^4)+(2*a^2)+1); [/mm]
J(5,2)=0;
J(5,3)=0;
J(5,4)=0;
[mm] J(5,5)=1/(a^2+1);
[/mm]
end
myNetwon.m
function [x] = myNewton(x)
a=x(1);
b=x(2);
c=x(3);
d=x(4);
e=x(5);
%%Startwert x=[0.5 0.5 0.5 0.5 0.5];
res = myFunc(a,b,c,d,e); %%Fehler a,b,c,d,e nicht definiert
maxsteps =0;
while(norm(res) >10^-14)&&(maxsteps <1000) %%immer wenn das res größer als die toleranz,
maxsteps=maxsteps +1; %%springt es wieder in die While-Schleife
J = myJacobi(a,d,e);
update = J [mm] \(-res)'; [/mm]
x = x + 0.1*update';
res=myFunc(x);
end
Meine Frage ist nun, wieso funktioniert es nicht? Stehe schon seit Stunden auf dem Schlauch.
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
Vielen dank im voraus für Tipps und Tricks.
|
|
|
|
Deine Funktion Newton hat als Rückgabewert "x" und als Parameter "x"!
Das ist in jedem Fall unsauber und ich schätze, dass Matlab bei der Zuweisung an a,b,c,d auf das nichtvorhande x zugreift.
|
|
|
|