gedämpfte verfahren in matlab |
27.01.2009, 18:09 | chomik | Auf diesen Beitrag antworten » | ||
gedämpfte verfahren in matlab 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)]; |
||||
27.01.2009, 20:05 | 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? |
||||
27.01.2009, 20:11 | 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. |
||||
27.01.2009, 20:32 | 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; |
||||
27.01.2009, 20:57 | Dual Space | Auf diesen Beitrag antworten » | ||
RE: Kurze Rückfrage... Ich verstehe das Problem nicht. Wie lautet denn die Fehlermeldung? |
||||
27.01.2009, 21:22 | 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 |
||||
Anzeige | ||||
|
||||
27.01.2009, 21:28 | Dual Space | Auf diesen Beitrag antworten » | ||
RE: Kurze Rückfrage... Herjee wie soll man dir helfen?
Na was willst du denn? |
||||
27.01.2009, 21:31 | 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. |
||||
27.01.2009, 21:32 | chomik | Auf diesen Beitrag antworten » | ||
RE: Kurze Rückfrage... (5,4) |
|
Verwandte Themen
Die Beliebtesten » |
|
Die Größten » |
Die Neuesten » |
|