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

Rückgabewerte einer Funktion direkt plotten

 

laupl
Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 15.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.11.2015, 10:29     Titel: Rückgabewerte einer Funktion direkt plotten
  Antworten mit Zitat      
Hallo,
ist es möglich Rückgabewerte einer Funktion direkt zu plotten?

Code:

[x_neu,y_neu]=tollefunktion(x,y);
plot(x_neu,y_neu) % das funktioniert natürlich
plot(tollefunktion(x,y)) % das leider nicht; hätte das aber gerne in einer Zeile
 


Geht das irgendwie? Steh auf dem Schlauch.

Danke, Grüße
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

die einzige Möglichkeit, die mir in den Kopf kommt: falls die Funktion ein Cell Array mit mehreren Elementen zurückgibt, kann man deal verwenden, um das aufzuspalten.

Ich sehe offen gesagt nicht ganz die Notwendigkeit dafür. Wo ist das Problem mit den zwei Zeilen?

Alternativ könnte man auch den Plot in die tolleFunktion aufnehmen. Falls nicht bei jedem Aufruf geplottet werden soll, könnte man das über ein (optionales) zusätzliches Argument steuern.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 17.11.2015, 11:35     Titel: Re: Rückgabewerte einer Funktion direkt plotten
  Antworten mit Zitat      
Hallo laupl,

Die Grafik-Befehle nehmen auch Structs als Input entgegen.
Code:
function main
plot(tollefunktion())
end

function S = tollefunktion
S.XData = 1:10;
S.YData = rand(1, 10);
end

Ich finde das aber weniger übersichtlich als die Methode mit zwei Zeilen und sofort ersichtlichen X- und Y-Werten. Falls bei der Zuordnung der Struct-Fields etwas schief läuft, bekommst Du bei meiner Methode eine Fehlermeldung im Hauptprogramm, obwohl der Fehler im Unterprogramm geschehen ist. Das erschweert das Debuggen und das ist grundsätzlich eine schlechte Idee.

Lösen könnte man dies mit einem TRY-CATCH:
Code:
function main
try
  plot(tollefunktion())
catch ME
  error('me:name:id', '%s\nSearch inside subfunction "tollefunktion" for the problem', ...
  ME.message);
end
end

Und so wird der schöne einzeilige Code gleich wieder aufgebauscht, wenn man ihn ordentlich debugbar machen möchte.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
laupl
Themenstarter

Forum-Century

Forum-Century


Beiträge: 106
Anmeldedatum: 15.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.11.2015, 11:45     Titel:
  Antworten mit Zitat      
Hi,
danke euch beiden für die Antworten. Wenn das die Möglichkeiten sind, bleibe ich wohl doch bei den zwei Zeilen. Hatte nur die Hoffnung, dass das vielleicht eleganter geht.
Gruß
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 18.11.2015, 11:24     Titel:
  Antworten mit Zitat      
Hallo laupl,

"Eleganter" bedeutet nicht unbedingt "kompakter". Oft erhöht die Reduktion der Zeilenzahl die Übersichtlichkeit. Aber nicht immer. Die Methode mit den Structs sieht beim Lesen des Hauptprogramms einfacher aus. Dafür macht sie das Debuggen schwerer und man erkennt nicht mehr beim Lesen des Codes im Hauptprogramm, was überhaupt passiert.

Deshalb hast Du hier eine sehr interessante Frage gestellt!

Gruß, Jan
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.