Matlab - Function - Parameter

Neue Frage »

Maddin17 Auf diesen Beitrag antworten »
Matlab - Function - Parameter
Hallo,

für meine Diplomarbeit habe ich zum Verständnis (da ich erwähnt hatte, dass ich mit Matlab noch kaum etwas zu tun hatte) ein .m-File erhalten, das ich nun versuche zu kapieren.

Dort sind u.a. mehrer Functions definiert, die Zielfunktionen oder Nebenbedingungen von Vektoroptimierungsproblemen beschreiben. Darin werden gelegentlich Parameter a und r gebraucht und ich frage mich nun, wann man diese Parameter als Eingabewerte mit hineinschreiben muss und wann nicht. Ein System ist da für mich nicht erkennbar. Wenn ich sie aber weglasse, funktioniert das Programm nicht mehr =)

Beispielsweise wird die erste Zielfunktion definiert als
code:
1:
2:
3:
4:
5:
6:
7:
function[y,g] = f1(x,a,r)
y = sqrt(1 + x(1)^2)
  if nargout > 1
     g = (x(1)/y)   % Gradient
  end


und ich frage mich, was das "a,r" hier zu suchen hat, da es für die Definition der ersten Zielfunktion ja absolut keine Rolle spielt.

Gibts da vielleicht eine einfache Erklärung? smile
Wäre sehr dankbar smile
Airblader Auf diesen Beitrag antworten »

Wenn Parameter im "Funktionskopf" definiert werden, sind sie beim Aufruf prinzipell auch anzugeben. Wenn sie in der Funktion nicht benötigt werden, wäre es ratsam, sie aus der Definition der Funktion einfach zu entfernen.

air
Maddin17 Auf diesen Beitrag antworten »

Vielen Dank für die schnelle Antwort, Air!

gut, das hört sich schon sinnvoller an smile

Nur wenn ich das "a,r" jetzt einfach lösche, funktioniert mein File nicht mehr.

code:
1:
2:
3:
4:
Error using ==> adaptiv>f1
Too many input arguments.


Ich kapiers nicht. Naja, vielleicht sollte ich einfach mal die Dozentin direkt fragen^^
Dank dir für die Mühe!
Airblader Auf diesen Beitrag antworten »

Der Fehler kommt davon, dass du beim Aufruf der Funktion alle drei Argumente angibst, die Funktion jetzt aber halt nur noch ein Argument kennt. Der Aufruf ist also ebenfalls anzupassen. Um es mal auf ein mathematisches Analogon zu bringen:

Wenn ist, dann weiß keiner, was ich mit meine, da die Funktion nur eine Veränderliche in ihrer Definition hat.

air
Maddin17 Auf diesen Beitrag antworten »

gut, ich werd mir das morgen nochmal zu Gemüte führen ... hab jetzt kein' Nerv mehr Big Laugh

Danke nochmal für deine Antwort!
Maddin17 Auf diesen Beitrag antworten »

eine Frage hät ich noch:

es gibt eine sog. Optimization Toolbox und dort einen "Befehl"
fmincon(Fkt , ... , ... , NB , ... , Parameter1, Parameter2).
Dieser minimiert eine Funktion (Fkt) unter gewissen (nichtlinearen) Nebenbedingungen (NB). Die Funktion und die Nebenbedingungen sind selbst wieder function-files.
Wenn die Funktion jetzt beispielsweise nicht von den Parametern a und r abhängt, die Nebenbedingungen aber schon, muss man die Parameter (Parameter1, Parameter2) dann oben hinschreiben oder nicht?!

Naja, ich werd das jetzt mal selbst versuchen. Aber da ich mir recht schwer tu (find das sehr unübersichtlich^^), könnt ich ne Antwort sicherlich gut gebrauchen smile
 
 
Airblader Auf diesen Beitrag antworten »

Ich kenne mich mit der Toolbox leider nicht aus und kenne den Befehl nicht. Ob man die mit angeben muss hängt ein wenig von der genauen Sachlage ab.

Aber so nebenbei: Wenn du unsicher bist, lass die Parameter halt einfach überall stehen. Schaden tun sie nicht. Unnötige Variablen sind halt kein guter Programmierstil, aber das hast ja nicht du verbrochen.

air
Maddin17 Auf diesen Beitrag antworten »

ach so okay, wenn das so ist ... Big Laugh

Hauptsache ich krieg das Ding mal zum laufen, der Rest is mir erstmal egal

Dank Dir recht herzlich!
flimmbing2 Auf diesen Beitrag antworten »

Moment mal.

Ich weiß nicht welche Version von Matlab du nutzt aber wenn ich die Funktion
code:
1:
2:
3:
4:
5:
function[y,g] = f1(x,a,r)
y = sqrt(1 + x(1)^2)
  if nargout > 1
     g = (x(1)/y)   % Gradient
  end

in Matlab mit
code:
1:
f1(1,2,3)

nutze funktioniert sie genauso wie mit:
code:
1:
f1(1)


Deine Funktion fragt doch explizit wieviele Argumente angegeben wurden, nämlich 1 oder mehr:
code:
1:
if nargout > 1

Du hast natürlich Recht, dass die Funktion so gesehen Unfug ist, da weder a noch r verwendet werden. Normalerweise kommt das nicht vor, außer das Argument wird als Schalter für verschiedene Berechnungsmodi benutz, so wie es hier der Fall zu sein scheint, denn die 2. Berechnungsvariante ist etwas schneller. Testen kannst du das folgendermaßen:
code:
1:
2:
3:
tic; f1(20); toc;
tic; f1(20,1,1); toc;
Maddin17 Auf diesen Beitrag antworten »

Version R2007a habe ich.

hm, ich glaube, es lag daran, dass man die function an einer anderen Stelle über einen Optimierungsbefehl aufgerufen hat, und die Nebenbedingungen, die hierbei zu berücksichtigen sind, mit den Parametern a und r versehen waren.
Kann das sein?^^

ist aber auch nicht mehr so wichtig, dass mit den Parametern hab ich jetzt so hingeschustert, dass es läuft Big Laugh

aber vielen Dank für deine Mühe!!
Neue Frage »
Antworten »



Verwandte Themen

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