gedämpfte verfahren in matlab

Neue Frage »

chomik Auf diesen Beitrag antworten »
gedämpfte verfahren in matlab
hallo,
ich muss ein program zu berechnung von gädempften newton-verfahren machen.
ich hab den m-file zu nweton weiss jetzt aber nicht wie soll ich dem jetzt mein funktionen übergeben.

funktion[x,info]=newton(fct,x,par)
fct sit die Name von der Funktion[f,df]
Ich hab die so definiert aber weiss nicht ob es richitg ist:
"Code"
function [f, df]=fct(x)
f=[x(1)^2+x(2)^3-4;log10(x(1))+log10(x(2))-0.5];
df=[2*x(1) 3*x(2);1/x(1) 1/x(2)];
tigerbine Auf diesen Beitrag antworten »
Kurze Rückfrage...
Musst du alles in einer Funktion übergeben oder könntest du es auch einzeln machen?

Wie soll denn der Grundalgorithmus aussehen?
Dual Space Auf diesen Beitrag antworten »
RE: Kurze Rückfrage...
Ich weiß nicht wo das Problem sein soll. Wenn du in dem Ordner arbeitest indem das m-File gespeichert ist kennt Matlab die Funktionen.
chomik Auf diesen Beitrag antworten »
RE: Kurze Rückfrage...
Das iat meine Hauptfunktion
function[x,info] = newton(fct,x,par)

%funktion[x, info]=newton(fct,x,par)
%Lösung des nichtlinearen Gleichung f(x)=0
%mit gedämpften Newton-Verfahren
%
%fct: Name von der Funktion [f,df]=fct(x)
% Auswerten von f und Jacobi Matrix df
%x: Startvektor und Lösung
% par.tol: Toleranz
%par.nit:Maximaleanzahl von Iterationen
%par.step:minimale Dämpfungsfaktor
%info.msg: Fehlermeldung
%info.it:Anzahl der Iterationen
% info.err: Norm von f(x)

%Vorgaben
if ~exist('par');
par=struct('tol',[],'nit',[],'step',[]);
end;
if isempty(par.tol);
par.tol=10^(-10)
end;
if isempty(par.nit);
par.nit=50;
end;
if isempty(par.step);
par.step=1/512;
end;
%Initialiseirung
t=1;
x_doku=[];
for k=1:par.nit;
[f,df]=feval(fct,x);

%Konvegenztest
info.err=norm(f,inf);
if info.err<=k;
return;
end;

%Berechunug von Schritweite
[Q,R]=qr(df);
if min(abs(diag(R)))<par.tol*norm(R,inf);
info.msg='Singülere Jacobi Matrix';
return;
end;
dx=rsolve(R,Q'*f);

%Überprüfung von Schrittweite und Dämpfung
flag_t=0;
while t > par.step;
y =x-t*dx;
g=feval(fct,y);
dy=rsolve(R,Q'*g);
if norm(dy,inf)<= (1-t/2)*norm(dx,inf);
x=y;
if flag_t==0;
t=min(1,2*t);
end;
break;
else
t=t/2;
flag_t=1;
end;
end;
if t<=par.step;
info.msg='Dämpfungsffaktor zu klein';
return;
end;
end;
info.msg='maximale Anzahl der Iterationen überschriten';

function d = rsolve(R,f)
%Lösen von der Obere Dreiecksmatrix
n=length(f);
d=[zeros(n-1,1);f(n)/R(n,n)];
for k=n-1:-1:1;
d(k)=(f(k)-R(k,k+1:n))/R(k,k);
end;
Dual Space Auf diesen Beitrag antworten »
RE: Kurze Rückfrage...
Ich verstehe das Problem nicht. Wie lautet denn die Fehlermeldung?
chomik Auf diesen Beitrag antworten »
RE: Kurze Rückfrage...
ich hab die ganze zeit par falsch angegeben
das war dann mein fehler
jetzt hab ich die fct als :function [f, df]=fct(x)
f=[x(1)^2+x(2)^3-4;log10(x(1))+log10(x(2))-0.5];

df=[2*x(1) 3*x(2);1/x(1) 1/x(2)]; derfiniert
bekomme aber andere lösung als ich es haben will
 
 
Dual Space Auf diesen Beitrag antworten »
RE: Kurze Rückfrage...
Herjee wie soll man dir helfen? verwirrt

Zitat:
bekomme aber andere lösung als ich es haben will


Na was willst du denn?
chomik Auf diesen Beitrag antworten »

Die aufgabe lautuet :
Schreiben Sie ein Uterprogramm zur Implementierung des in der VOrlesung beschriebenen gedämpften Newton_verfahren zur Lösung von f(x)=0 mit f:R^2-R^2. f und die Funktionalmatrix Df werden durch ein Unterprogram gegeben.Verifiziern Sie die quadratische Konvegenzordnung in der Nähe von NUllstellen mit der regulärer funktionalmatrix.Testen Sie das Verfahren auch an Abbildung f mit singulären Funktionalmatrix in der Nullstell.
chomik Auf diesen Beitrag antworten »
RE: Kurze Rückfrage...
(5,4)
Neue Frage »
Antworten »



Verwandte Themen

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