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

Problem mit function handles

 

Pillemann
Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 21.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.03.2010, 18:27     Titel: Problem mit function handles
  Antworten mit Zitat      
Hallo!
Ich habe eine Liste mit Parametern, mit denen ich in einer Funktion ein Ergebnis
ausrechne, dass dann in meinem Hauptprogramm verwendet wird. Etwa so:

Code:

function [a,b]=parameter;
a=1;
b=2;
 


Code:

function sum=Summe
[a,b]=parameter;
sum=a+b;
 



%Hauptprogramm:
Code:

   .
   .
   .
Funktion(sum)  %das Ergebnis wird irgendwie verarbeitet
   .
   .
   .
 



Jetzt wollte ich mit mehreren Parameterlisten arbeiten, so dass ich Summe.m nur die
Liste übergeben muss. Irgendwo hab ich gelesen, dass man sowas mit function handles macht:

Code:

function [a,b]=parameter2;
a=3;
b=4;
 


Code:

function sum=Summe(function_handle)
lalala=@function_handle;
[a,b]=lalala;
sum=a+b;
 


%Hauptprogramm:
Code:

   .
   .
   .
Funktion(sum(parameter2))
   .
   .
   .
 


Das klappt aber nicht. In built-in-functions wie fzero o.ä. wird die Eingangsfunktion mit fcnchk in ein handle umgewandelt, aber dass hab ich auch nicht hinbekommen, weil meine Kenntnisse gelinde gesagt begrenzt sind.
Bitte zeigt mir, wie der Code richtig lauten muss.
Danke
Private Nachricht senden Benutzer-Profile anzeigen


Thomas84
Forum-Meister

Forum-Meister


Beiträge: 546
Anmeldedatum: 10.02.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.03.2010, 07:34     Titel:
  Antworten mit Zitat      
Ich glaube es findet sich eine einfachere Lösung die Parameter zu laden. z.B. aus einem mat. file herraus. Mir ist aber aufgefallen das ein function_handle scheinbar nicht mehrere Werte zurückliefern kann.

Code:


fh = @parameter2;
[a,b] = parameter2;
[a,b] = fh;


function [a,b]=parameter2
a=3;
b=4;
 


Der erste Aufruf von parameter2 funktioniert, der zweite nicht.
Private Nachricht senden Benutzer-Profile anzeigen
 
Pillemann
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 21.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.03.2010, 10:30     Titel:
  Antworten mit Zitat      
Hallo Thomas,
danke für die Antwort.
1. die einzelnen funktionen parameter und sum sind in m-files abgelegt.
2.Wenn ich es so mache:
Code:

function sum=Summe(function_handle)
lalala=@function_handle;
[a,b]=lalala;
sum=a+b;
 

schreibt matlab: lalala ist hier eine Variable :
Code:

lalala=@function_handle;
 

und dort eine Funktion:
Code:

[a,b]=lalala;
 

und das beisst sich.
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 22.03.2010, 10:54     Titel:
  Antworten mit Zitat      
Hallo,

ich denke das würde über Strings gehen, die Parameter-Fkt muss man als String an Summe.m übergeben und dort mit str2func Befehl auflösen


Code:

function res=Summe(function_handle)
lalala= str2func(function_handle);
[a,b]=lalala;
res=a+b;
 


Aufruf wäre dann:
Code:

Funktion(Summe('parameter2'))
 





oder gleich als handle an Funktion Summe übergeben
Code:

function res=Summe(lalala)
[a,b]=lalala;
res=a+b;
 


Code:

Funktion(Summe(@parameter2))
 


PS: bitte reserviertes Wort sum nicht als Variablennamen verwenden
Private Nachricht senden Benutzer-Profile anzeigen
 
Pillemann
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 21.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.03.2010, 14:43     Titel:
  Antworten mit Zitat      
Hi denny,

danke auch dir für die Antwort. Leider bringen deine beiden Vorschläge dieselbe Fehlermeldung:

"lala" was previously used as a variable,
conflicting with its use here as the name of a function.

Wenn ich mir mal dann lala mal ausgeben lasse, kommt auch nur:

lala =

@parameter2

Mich würde wirklich interessieren, wie man es mit function handles macht.

Die gute Nachricht:
Ich hab es mit varargin hinbekommen! Falls es interessiert:

Code:

function lala=parameter2;

a=3;
b=4;
lala=[a b];
 


Code:

function res=myfun(varargin)

abc= cell2mat(varargin);
for i=1:length(abc);
res(i)=abc(i);
end
% mit res kann nun gearbeitet werden
res
 

ruft man nun im command window myfun(parameter2) auf, kommt als Ergebnis:
res =

1 2 3 4 5

Danke für alles!
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 22.03.2010, 14:55     Titel:
  Antworten mit Zitat      
Hallo,

das funktioniert, habe bloß die Klammern vergessen.
Matlab muss ja klargemacht werden, dass das keine Variable ist sondern eine Funktion.


Code:


function res=Summe(function_handle)
lalala= str2func(function_handle);
[a,b]=lalala();
res=a+b;

 



Code:

Funktion(Summe('parameter2'))
 



oder


Code:

function res=Summe(lalala)
[a,b]=lalala();
res=a+b;
 



Code:

Funktion(Summe(@parameter2))
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Pillemann
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 14
Anmeldedatum: 21.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.03.2010, 19:53     Titel:
  Antworten mit Zitat      
Code:

Danke,jetzt klappt's. Wink
 
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.