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

Redefine, redeclare einer Funktion

 

iammrvip
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 10.07.12
Wohnort: Dresden
Version: R2009b, 7.9.0.529, 64-bit, maci64
     Beitrag Verfasst am: 24.07.2012, 11:51     Titel: Redefine, redeclare einer Funktion
  Antworten mit Zitat      
Hallo.

Ich habe folgendes Problem: Ich habe zur Berechnung 3 Verfahren, die jeweils sehr parallel ablaufen. In allen Skripte heißen alle Funktionen gleich, nur der Inhalt innerhalb der Funktionen weicht für verschiedene Berechnungsmethoden ab. Auch die "Haupt"funktion ist immer dieselbe.

Ich habe also z.B. eine Datei get_tetras_in_liquid.m mit der Funktion

Code:

function [volInner, cogInner] = get_tetras_in_liquid(coordsInner, meshInner, volInner, h, a)
...
end
 


Nun möchte ich eine main.m schreiben, der die drei Möglichkeiten übergeben werden können und dann etwas à la

Wenn Input = 'tri' ersetze get_tetras_in_liquid.m durch diese Funktion get_tetras_in_liquid_irgendwas

also

Code:

    if nargin == 0
        [x,y] = z(...);
    elseif strcmpi(whichBeer, 'tri')
        get_tetras_in_liquid = ersatze durch andere Funktion
        [x,y] = z(...);
 


Ist das mit Matlab irgendwie möglich?

(Ich hätte eben gern vermieden, jeder Funktion wieder eine Variable zu übergeben zu müssen und dann Fallunterscheidungen in den entsprechenden *.m-Dateien zu machen....)
Private Nachricht senden Benutzer-Profile anzeigen


Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2012, 20:17     Titel:
  Antworten mit Zitat      
Hallo,

genau für Dein Problem gibt es in Matlab Funktion-Handles.
Hier eine kleine Einführung mit Beispiel für Deinen Anwendungsfall in der zweiten Hälfte:
http://www.gomatlab.de/tutorial-kei.....function-handle-t545.html

Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
iammrvip
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 10.07.12
Wohnort: Dresden
Version: R2009b, 7.9.0.529, 64-bit, maci64
     Beitrag Verfasst am: 25.07.2012, 22:32     Titel:
  Antworten mit Zitat      
Vielen Dank, das löst aber nicht direkt mein Problem.

Das Problem war eher: Definiere ich die function handle, dann bin ich aber gezwungen die Variablen global zu setzen (sonst kommen wir wieder zum selben Problem) oder ich muss sich komplett durch sämtliche Skripte und Funktionen durchreichen. Genau Letzteres wollte ich vermeiden.

Also im Moment schaut das ganze so aus
Code:

    if nargin == 0
        tetras_in_liquid = @get_tetras_in_liquid;
        bottle = @tri_bottle;
        [...] = beer(...);
    elseif ...
 

wobei tetras_in_liquid als globale Variable definiert wurde und die zweite (da nur einmal) mit übergeben wird.

Ich wollte gern die globale Variable aus bekannten Gründen vermeiden und nur für den jeweils gültigen Bereich der If Anweisung die Funktionen ändern.

Beste Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2012, 23:40     Titel:
  Antworten mit Zitat      
Hallo,

prinzipiell besteht immer das Problem, dass bestimmte Parameter
durchgeschleift werden müssen. Irgendwie muß ja die innerste
Funktion wissen, welches Deiner Verfahren angewendet werden soll.

Du könntest in Richtung objektorientierter Programmierung gehen,
die Funktionen, die immer gleich sind in einem Elternobjekt definieren
und die Funktionen, die sich unterscheiden, in mehreren abgeleiteten
Objekten implementieren. Das würde die Struktur Deines Skripts
natürlich völlig verändern und je nachdem, ob Du schon in anderen
Programmiersprachen OOP-Erfahrung hast, kann es ziemlich harte
Kost zum Einlernen sein.

Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
iammrvip
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 10.07.12
Wohnort: Dresden
Version: R2009b, 7.9.0.529, 64-bit, maci64
     Beitrag Verfasst am: 26.07.2012, 07:39     Titel:
  Antworten mit Zitat      
Ok ist glaube ich die sauberste schnellste Lösung. Danke euch.
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.