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

Variable in Optimierung "sich selbst übergeben"

 

zevon
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.03.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.03.2021, 23:00     Titel: Variable in Optimierung "sich selbst übergeben"
  Antworten mit Zitat      
Hallo,

ich würde gern ein Minimierungsproblem lösen und dabei eine Variable sich selbst übergeben. Am besten erkläre ich das kurz. Die Funktion zur Minimierung steht in der folgenden Form:



[fitted_x, ~, exitflag] = fminsearch( @search_min , xo , options , P1 , P2 , P3 , ALT)

[ Delta ] = search_min (x , P1 , P2 , P3 , ALT)


die Funktion 'search_min' wird also auf das x untersucht, bei dem der Funktionswert [ Delta ] minimal wird. Insgesamt läuft die Funktion 1000 Iterationsschritte durch, das habe ich jetzt hier weggelassen.

Nun würde ich gerne der fminsearch-Funktion außerdem noch die Variable [ALT] übergeben. Diese soll in der Funktion 'search_min' zu [NEU] umgewandelt werden (tatsächlich findet eine Neuberechnung statt).

Also:

[NEU] = [ALT] * x * y * z

Beim nächsten Iterationsschritt soll die Variable [NEU] wieder zur Variable [ALT] werden. Das bekomme ich hin. Dazu muss aber die Variable [NEU] der Funktion nach der ersten Iteration übergeben werden.

Wenn alle Iterationsschritte abgeschlossen sind, soll das letztberechnete [NEU] der fminserach-Funktion ebenfalls übergeben werden. [NEU] soll aber selbst nicht minimiert werden, sondern lediglich von fminsearch ausgegeben.

Nur dass ich unsicher bin, ob das geht und falls ja, wie ich es anstellen soll. Wie ist es möglich, dass die Optimierung "sich selbst eine Variable übergibt", wie ich es hier versucht habe zu schildern? Eine global.Variable sollte es ermöglichen. Aber geht es auch anders?

Grüße
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 13.03.2021, 11:50     Titel: Re: Variable in Optimierung "sich selbst übergeben&quo
  Antworten mit Zitat      
Hallo zevon,

Bist du sicher, dass das sinnvoll ist?
Dein search_min wird ja je nach Weg und Optimierungsmethode an ganz unterschiedlichen Stellen aufgerufen. Mathematisch ist das dann nicht eindeutig definiert.

Wenn du das aber für sinnvoll hältst, lässt es sich mit einer persistenten Variablen lösen. Die kannst du dann beschreiben bzw. auslesen, indem du z.B. als ersten Input einen CHAR Vektor nimmst und per if ischar(x) prüfst.

Gruß Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
zevon
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.03.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.03.2021, 16:02     Titel:
  Antworten mit Zitat      
Hi Jan,

Danke für die Antwort. Ich denke, genau das habe ich gesucht!

Auch wenn mir der Nutzen der ifchar-Funktion an der Stelle noch nicht einleuchtet.

Die Funktion soll nur für diese Minimierung genutzt werden. Die Neuberechnung von ALT zu NEU ist essentiell und dient dem Abgleich mit einer vorgelegten Wertetabelle. (Minimierung der Abweichung zwischen Neuberechnung und Vorlage bei jedem Durchgang)

Und wie bekomme ich es hin, dass ich das zuletztberechnete [NEU]-Array an der Stelle ausgebe, an der die fminsearch Funktion aufgerufen wird? Ist das ohne ein globales Array möglich?
Private Nachricht senden Benutzer-Profile anzeigen
 
zevon
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.03.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.03.2021, 12:26     Titel:
  Antworten mit Zitat      
Kann ich mir den Wert der persistenten Variable auch außerhalb der Funktion ausgeben lassen, ohne die Variable in die Ausgabe der Funktion zu stecken?

Ich will einen Funktionswert mit der fminsearch function minimieren. Daneben will ich den Wert eine persistente Variable ausgeben lassen, die nicht der Funktionswert ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 31.03.2021, 15:19     Titel:
  Antworten mit Zitat      
Hallo zevon,

Ja, du kannst die persistente Variable natürlich auch ausgeben lassen.
Code:
function out = yourFcn(in1, in2, in3)
persistent P
if ischar(in1)
  switch in1
    case 'output'
      out = P;
    case 'reset'
      P = [];
  end
  return;
end
...
end

Gruß Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
zevon
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 12.03.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.04.2021, 12:29     Titel:
  Antworten mit Zitat      
Ich rufe die Funktion ja im regulären Code mit der fminsearch-Funktion auf, um den Funktionswert zu minimieren. Ich will aber nicht den Wert der persistenten Variable minimieren, deshalb kann ich die persistente Variable nicht in die Ausgabe der Funktion stecken, oder? Die persistente Variable soll am Ende, nachdem fminsearch abgeschlossen ist, nur an den Code übergeben werden, damit ich dort weiter damit arbeiten kann.

Ist das ebenfalls ohne eine globale Variable möglich?
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.