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

Funktionsverhalten steuern

 

core
Forum-Anfänger

Forum-Anfänger


Beiträge: 37
Anmeldedatum: 07.07.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.02.2013, 17:56     Titel: Funktionsverhalten steuern
  Antworten mit Zitat      
Hallo,

wie löse ich denn folgendes Problem am elegantesten. Ich möchte eine Funktion der Art

Code:
function neueDate = krasseFunktion(alteDaten)


haben. Die alten Daten sind in meinem Beispiel Daten mit fehlenden Werten, die von dieser Funktion approximiert werden sollen. Dabei soll der User irgendwie per Parameter einen Modus angeben. Entweder direkt eine Matlab-Standardfunktion, die man am einfachsten wohl direkt parst oder eben einen eigenen Mechanismus, der dann in der Funktion selbst ausgeführt wird.
Mir fällt nur eine nicht wahnsinnig schöne Lösung über Stringflags ein:

Code:
if strcmp(input, 'foo')
  // eigene Berechnung
else if strcmp(input, 'max')
  isnan(neueDate) = max(alteDaten(:));
else if
  // ...
end


Gibts da eine schönere Lösung?
Private Nachricht senden Benutzer-Profile anzeigen


Bluesmaster
Forum-Century

Forum-Century



Beiträge: 203
Anmeldedatum: 13.11.11
Wohnort: Gera
Version: 2012a
     Beitrag Verfasst am: 07.02.2013, 21:11     Titel:
  Antworten mit Zitat      
Code:
isnan(neueDate) = max(alteDaten(:));


was ist das? Auf der linken Seite einer Zuweisung steht
normalerweise eine variable und kein Funktionsaufruf.
Meinst du:

Code:
neueDate = max(alteDaten(:));
neueDate( isnan( neueDate ) )
 



Aber zum Problem:

Wenn nicht klar ist, mit welcher Funktion deine Daten beackert werden
gibt es 3 Möglichkeiten den Funktionsaufrufer das entscheiden zu lassen


1. Er übergibt ein sogn. Fcnhandle

Code:
fh = @krasseDatenverarbeitungsfunktion
krasseFunktion(alteDaten , fh)

function neueDate = krasseFunktion(alteDaten , sollFunktion )

sollFunktion ( alteDaten )

%oder

feval( sollFunktion  , alteDaten )

end



2. Er übergibt einen String den du evaluierst


Code:
fh = 'krasseDatenverarbeitungsfunktion'
krasseFunktion(alteDaten , fh)

function neueDate = krasseFunktion(alteDaten , sollFunktion )

eval( [ sollFunktion '( alteDaten )' ] )

end



3. Irgendeine Entscheidungsvariable (deine bisherige Lösung)

>> wobei man da auch mit switch case arbeiten könnte

Gruß

Blues
Private Nachricht senden Benutzer-Profile anzeigen
 
Bluesmaster
Forum-Century

Forum-Century



Beiträge: 203
Anmeldedatum: 13.11.11
Wohnort: Gera
Version: 2012a
     Beitrag Verfasst am: 07.02.2013, 21:15     Titel:
  Antworten mit Zitat      
Nachtrag

4. Möglichkeit eine anonymusFcn

(Eine Funktion die nicht in einem M-File steht sondern gleich ausgeführt
werden kann)


Bsp:

anoFun = @( alteDaten) sum( alteDaten)


die unterscheidet sich von FcnHandle durch die Klammern nach dem @,
in denen du die Inputvariablen festlegst. Aber es kann nur EINE Anweisung ausgeführt werden (hier sum() )

Gruß

Blues
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 - 2025 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.