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

Mehrdimensionales function-handle auswerten

 

dobelido
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 10.08.12
Wohnort: Haltern am See
Version: ---
     Beitrag Verfasst am: 10.08.2012, 12:21     Titel: Mehrdimensionales function-handle auswerten
  Antworten mit Zitat      
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!

Viele Grüße!!!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.08.2012, 20:16     Titel:
  Antworten mit Zitat      
Hallo,

wenn deine Funktion darauf ausgelegt ist, mit Vektoren zu arbeiten, sollte folgendes gehen:

Code:
g = @(x) f(x(:,1), x(:,2), x(:,3), x(:,4), x(:,5), x(:,6));


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
dobelido
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 10.08.12
Wohnort: Haltern am See
Version: ---
     Beitrag Verfasst am: 10.08.2012, 21:52     Titel:
  Antworten mit Zitat      
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? Rolling Eyes

Mir ist da jedenfalls noch nicht wirklich etwas eingefallen!

Gruß Kai
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.08.2012, 22:46     Titel:
  Antworten mit Zitat      
Hallo,

wird schwierig. Da würde ich mir eine Hilfsfunktion schreiben.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
dobelido
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 10.08.12
Wohnort: Haltern am See
Version: ---
     Beitrag Verfasst am: 10.08.2012, 23:21     Titel:
  Antworten mit Zitat      
Was genau verstehst du unter einer Hilfsfunktion?

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. Confused

Bei einer möglichen Anzahl von bis zu 200 Variablen komme ich da über diese Lösungmethode ein wenig ins grübeln. Rolling Eyes

Was anderes fällt mir aber leider nicht ein.

Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2012, 09:03     Titel:
  Antworten mit Zitat      
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
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2012, 09:57     Titel:
  Antworten mit Zitat      
Hallo dobelido,

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:
Code:
spalten=num2cell(eingabe_matrix,1);
werte=arrayfun(f,spalten{:});


Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.08.2012, 10:24     Titel:
  Antworten mit Zitat      
Hallo,

in Abwandlung von Sirius' Vorschlag würde ich eher sagen:

Code:
spalten=num2cell(eingabe_matrix,1);
werte=f(spalten{:});


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 Wink Siehe auch Teil 2 des Vorschlags von flashpixx.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
dobelido
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 10.08.12
Wohnort: Haltern am See
Version: ---
     Beitrag Verfasst am: 12.08.2012, 09:27     Titel:
  Antworten mit Zitat      
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:

Code:
zeilen=num2cell(eingabe_matrix,2);


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.


Grüße
Kai
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 12.08.2012, 10:12     Titel:
  Antworten mit Zitat      
Hallo,

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.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
dobelido
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 10.08.12
Wohnort: Haltern am See
Version: ---
     Beitrag Verfasst am: 12.08.2012, 10:13     Titel:
  Antworten mit Zitat      
Ich habs an einem einfachen Beispiel nachgeprüft, es muss tatsächlich
Code:
spalten=num2cell(eingabe_matrix,1);

heißen!

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! Smile

Grüße
Kai
Private Nachricht senden Benutzer-Profile anzeigen
 
dobelido
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 10.08.12
Wohnort: Haltern am See
Version: ---
     Beitrag Verfasst am: 12.08.2012, 21:46     Titel:
  Antworten mit Zitat      
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! Very Happy
Genau so wollte ich das haben, vielen Dank!!!

Viele Grüße
Kai
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.