Hallo alle zusammen,
im Zuge meiner Masterarbeit, ist eine Frage bezüglich der Nutzung des Funktion-Handles aufgetreten!
Ich habe eine Funktion als "Function handle" angelegt, welche in z.B 6 Parametern f(x1,x2,x3,x4,x5,x6) variabel ist (kann auch variieren). Weiter habe ich eine Matrix welche auszuwertende Stützstellen enthält. Dabei bilden die Spalten die jeweiligen Stützstellen für die jeweiligen Variablen x1 bis z.B x6!
Die Anzahl der Zeilen ist somit gleichbedeutend für die Anzahl der Funktionsauswertungen.
Meine Frage an dieser Stelle ist nun:
Gibt es eine Möglichkeit, der Funktion direkt die Datenmatrix zu übergeben und ein Ergebnisvektor geliefert zu bekommen?
Für Lösungsvorschläge wäre ich euch dankbar!
Hoffe die Frage ist von mir an der richtigen Stelle im Forum gestellt worden!
Genau so hab ich es jetzt auch programmiert, funktioniert auch soweit ganz gut!
Das Problem was sich bei dieser Lösung ergibt ist jedoch, dass sich hier eine variable Anzahl von Funktionsparametern (d.h variable Anzahl von Spalten) erst einmal nicht realisieren lässt!
Oder etwa doch?
Mir ist da jedenfalls noch nicht wirklich etwas eingefallen!
Die einzige Möglichkeit die ich sehe ist eine Funktion zu schreiben, welche als Übergabeparameter das Funktionhandle übergeben bekommt und dann durch eine Switch-Case Anweisung (Anzah der Variable abfragen), dort die jeweilig zu verwendende Syntax gewählt wird. Nicht schön, aber es würde funktionieren. Allerdings bin ich eigentlich niemand, der gerne hart programmierte Codes schreibt.
Bei einer möglichen Anzahl von bis zu 200 Variablen komme ich da über diese Lösungmethode ein wenig ins grübeln.
Die Funktion mit varargin ausstatten, damit kann sie beliebig viele Parameter verarbeiten, den Aufruf kann man mit eval machen wobei man die Variablen mit Hilfe einer Stringverkettung zusammen fügt. eval ist zwar nicht schön, aber das ginge hier.
Andernfalls würde ich die Eingabedaten als Struct-Array / CellArray / Matrix ablegen und dann einfach direkt passend drauf zu greifen, was vom Design wohl das beste wäre. Damit hätte man somit nur einen Übergabeparameter
am besten ist es wenn Deine Funktionen gleich mit Vektoren und nicht
mit sechs einzelnen Zahlen umgehen können.
Für unflexible Funktionen, die eine exakte Anzahl an Zahlen erwarten
und genau eine Zahl zurückliefern,
gibt es die Möglichkeit über cell-Arrays:
Davon abgesehen ist die Frage, wieso du mit Funktionen arbeitest, die mal eben 200 Eingabeargumente erwarten können. Ich stelle mir das etwas unübersichtlich vor Siehe auch Teil 2 des Vorschlags von flashpixx.
Die Eingabeparameter sind ja schon in einer Matrix gespeichert, um auf diese sinnvoll zugreifen zu können.
Der Vorschlag mit dem Cell-Array hört sich erst einmal sehr gut an, leider habe ich noch keinerlei Erfahrung mit dieser Art des Datenhandlings!
Ich habe mir den Befehl aber einmal genauer in MatLab angeschaut:
Da ich ja eine m x n Matrix habe, muss es da bei meinem Problem nicht heißen:
weil ja jede ZEILE für die jeweilige Auswertung eines mehrdimensionalen Funktionsergebnisses steht.
Somit würde ich bei einer 4 x 3 Matrix, vier Cell-Arrays mit einer Länge von drei bekommen, welche ich dann mit dem vorgeschlagenen Befehl auswerten könnte.
du sagtest aber doch, dass deine Funktion die Argumente spaltenweise, nicht zeilenweise benötigt?
Und: im Zweifelsfall einfach beides probieren und das nehmen, was funktioniert.
Werde den Vorschlag gegen Abend einmal versuchen umzusetzen und euch dann über Erfolg oder Misserfolg bescheid geben!
Ich denke diese Variante ist aber ziemlich vielversprechend!
So.....
Ich habs jetzt einmal in meinem Programm umgesetzt und siehe da, es funktioniert einwandfrei!
Dank der Cell-Array Struktur ist jetzt die unterschiedliche Anzahl von Parameter kein Problem mehr!
Genau so wollte ich das haben, vielen Dank!!!
Viele Grüße
Kai
Einstellungen und Berechtigungen
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
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.