WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

aufrufen von funktionen

 

chomik
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 27.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2009, 16:57     Titel: aufrufen von funktionen
  Antworten mit Zitat      
Ich habe eine funktion in m-fil geschreiebn und weiss jetzt nicht wie ich sie abrufen kann.
"Code" function[x,info]=newton(fct,x,par)
fct ist die name von der funktion [f,df]
ich weiss jetzt nicht wie soll ich es zu laufen bringen
kann mir villeich jemand helfen?
Private Nachricht senden Benutzer-Profile anzeigen


Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 27.01.2009, 19:24     Titel:
  Antworten mit Zitat      
Hallo chomik,

hast Du die Variablen fct, x und par im Workspace? Dann kannst Du die Funktion newton im Command Window aufrufen:

Code:
>> [x_neu, info] = newton(fct,x,par)


Oder muss fct vielleicht ein function handle sein? Dann könnte es so klappen:

Code:
>> [x_neu, info] = newton(@fct,x,par)


Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
chomik
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 27.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2009, 19:40     Titel:
  Antworten mit Zitat      
dass funktioiert nicht
fct ist auch eine funktion
ich hab sei so defieniert es kann sein das da der fehler steckt
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)];
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 27.01.2009, 19:47     Titel:
  Antworten mit Zitat      
Hallo chomik,

wenn fct eine Funktion ist, muss der Aufruf lauten:

Code:
[x_neu, info] = newton(@fct,x,par)


Dabei müssen natürlich x und par vorher definiert sein. Wie lautet denn die Fehlermeldung? Der genaue Code der Funktion newton wäre auch hilfreich.

Die Funktion sieht soweit nach korrekter Matlab-Syntax aus.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
chomik
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 27.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2009, 19:55     Titel:
  Antworten mit Zitat      
der meldung ist:

??? Attempt to reference field of non-structure array.

Error in ==> newton at 7
if isempty(par.tol);

Code:
function[x,info] = newton(fct,x,par)


if ~exist('par');
    par=struct('tol',[],'nit',[],'step',[]);
end;
if isempty(par.tol);
    par.tol=10^(-10);
end;
if isempty(par.step);
    par.step=1/512;
end;

t=1;

for k=1:par.nit;
    [f,df]=feval(fct,x);
   
    info.err=norm(F,inf);
    if info.err<=k;
        return;
    end;
    [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);
   
    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 ander Iterationen erreichbar';

function d = rsolve(R,f)

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;

 
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 27.01.2009, 20:08     Titel:
  Antworten mit Zitat      
Hallo chomik,

das bedeutet, dass die Variable par, die Du übergibst, keine struct-Variable ist. Wie definierst Du denn par im Command Window?

par muss die Felder tol, nit und step haben, damit es funktioniert.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
chomik
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 27.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2009, 20:21     Titel:
  Antworten mit Zitat      
ich hab das mit dem par.step verwechselt
ich wollte das der par.step 0.01 ist und das hab ich als par angegeben
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 27.01.2009, 20:25     Titel:
  Antworten mit Zitat      
Klappt es denn jetzt?
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
chomik
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 27.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2009, 20:51     Titel:
  Antworten mit Zitat      
wie kann ich es machen das ich den x wert bei jeder iteration dokumentiert bekomme
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 27.01.2009, 21:05     Titel:
  Antworten mit Zitat      
Hallo chomik,

Du könntest jedes Mal, wenn x geändert wird, eine Variable x_doku aktualisieren:

Code:
% Initialisieren am Anfang
x_doku = [];

% Schleife
...
x=y;
x_doku = [x_doku;x];
...



Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
chomik
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 27.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2009, 21:18     Titel:
  Antworten mit Zitat      
wo musss ich das in meinen code schreiben
der x soll an anfag den wert annehmen den ich angebe, also x soll am anfang mein startwert sein und dann der lösung
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 27.01.2009, 21:33     Titel:
  Antworten mit Zitat      
AM ANFANG:

Code:
x_doku = x;


IN DER SCHLEIFE nach "x=y;"

Code:
x_doku = [x_doku;x];


Die erste Zeile muss dann natürlich auch noch abgeändert werden, sodass x_dolu statt x zurückgegeben wird.


Herzliche Grüße
Bijick

Aber Du verstehst schon, was der Code, den Du geschrieben hast, macht? Wink
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
chomik
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 27.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.01.2009, 22:37     Titel:
  Antworten mit Zitat      
ich kann alles nachvollziehen
Die aufgabe lautet:das ich ein Unterprogrann zur Implementierung des gedämpftes Newton-Verfahren zur Lösund von f(x)=0 mit f:R^2->R^2.f und die Funktionalmatrix df werden durch ein Unterprogramm gegeben.Verifizieren Sie die quadratische Konvegenzordnung in der Nähe von Nullstellen mit regulärer Funktionalmatirx.Testes Sie das Verfahren auch an Abbildung f mit singulärer Funktionalmatirx ind er Nullstell.
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.