Ist es möglich nur einen Teil der Antworten einer Matlabfunktion zu übernehmen

OP #1765484
Lesenswert?

Hallo,

gibt es eine einfache Möglichkeit nur einen Teil der Antworten einer 
Matlabfunktion zu übernehmen?

Zur Verdeutlichung meiner Frage folgendes Beispiel:

Wenn ich in einem Matlabskript (M-file) die Funktion

 sin(0:0.1:1)

aufrufe erhalte ich als Ergebnis einen Vektor mit 10 Elementen

ans =
  Columns 1 through 5
     0.0000e-003   99.8334e-003  198.6693e-003  295.5202e-003 
389.4183e-003
  Columns 6 through 10
   479.4255e-003  564.6425e-003  644.2177e-003  717.3561e-003 
783.3269e-003
  Column 11
   841.4710e-003.

Von diesem Vektor benötige ich jedoch im Weiteren Verlauf nur das z. B. 
fünfte Element. Bisher habe ich in einem derartigen Fall die Antwort von 
sin(0:0.1:1) in einen Vektor geschrieben

 Antwort = sin(0:0.1:1)

und anschließend das fünfte Element ausgewählt

 Antwort = Antwort(5).

Leider macht dies das Matlabskript nicht verständlicher. Insbesondere 
dann, wenn 'Antwort' nur ein Mal in einem größeren Ausdruck 
weiterverarbeitet wird. In diesem Fall wäre es z. B. anschaulicher 
sin(0:0.1:2)(5) schreiben zu können. Bietet Matlab hierfür eine 
entsprechende Syntax.

Das hier gezeigte Beispiel dient nur der Veranschaulichung. Mir ist 
natürlich klar, dass ich auch 'sin(0.4)' schreiben könnte. Es gibt 
jedoch auch Funktionen, die mehrer unterschiedlich Werte zurückgeben, 
von denen man teilweise nur einen Wert benötigt.

Mit freundlichen Grüßen
Guido
Gast #1765498
Lesenswert?

Dir gefällt also die Ausgabe der Funktion f() nicht und möchtest also 
eine Matlab-Syntax, die dir diesen Schönheitsfehler beseitigt?  Wie 
sinnfrei ist das denn bitte? Schreib die Funktion nach deinen 
Vorstellungen um, oder extrahiere das Ergebnis.

Andernfalls ist dem Syntax-Urwald keine Grenze mehr gesetzt....
OP #1765530
Lesenswert?

Hallo,

ich schrieb:
> Dir gefällt also die Ausgabe der Funktion f() nicht und möchtest also
> eine Matlab-Syntax, die dir diesen Schönheitsfehler beseitigt?  Wie
> sinnfrei ist das denn bitte?

Vielleicht ist das folgende Beispiel besser:
Wenn ich von einer bestehenden Grafikdatei nur die Colormap übernehmen 
möchte kann ich wie folgt vorgehen:

[X, map] = imread(...);
colormap(map);
clear X;

Manchmal würde ich es als angenehm empfinde statt dessen

colormap(imread(...)(2));

schreiben zu können. Wäre dies wirklich so sinnfrei? Naja, wir können 
natürlich darüber diskutieren wie sinnfrei es ist die Colormap einer 
anderen Grafikdatei zu übernehmen ;-)

ich schrieb:
> Schreib die Funktion nach deinen
> Vorstellungen um, oder extrahiere das Ergebnis.

Klar kann ich über jede Funktion noch eine weitere Funktion "stülpen". 
Allerdings macht dies den Code für andere nicht unbedingt lesbarer.

Mit freundlichen Grüßen
Guido
#1765535
Lesenswert?

> Klar kann ich über jede Funktion noch eine weitere Funktion "stülpen".
> Allerdings macht dies den Code für andere nicht unbedingt lesbarer.

das
> colormap(imread(...)(2));
ist aber für andere auch nicht lesbarer als
> [X, map] = imread(...);
> colormap(map);
> clear X;
Admin Persönliche Seite #1765566
Lesenswert?

sin(0.5) ist falsch. Das ist auch schon ein gutes Beispiel dafür warum 
es manchmal sinnvoller sein kann etwas umständlicher, aber 
nachvollziehbarer auszudrücken, statt durch vermeintliche Abkürzungen zu 
vereinfachen.

Justus Skorps schrieb:
> das
>> colormap(imread(...)(2));
> ist aber für andere auch nicht lesbarer als
>> [X, map] = imread(...);
>> colormap(map);
>> clear X;

Ersteres ist ein geschlossener Ausdruck; letzteres vermüllt zwei globale 
Variablen.
OP #1765673
Lesenswert?

Hallo,

vielen Dank für Eure Antworten. Allem Anschein nach unterstützt Matlab 
meinen Wunsch (noch?) nicht. Ich werde daher bei Konstrukten der Art

[X, map] = imread(...);
colormap(map);
clear X;

bleiben. Zumindest kann dies jeder Kundige verstehen.

Octave kenne ich noch nicht. Es ist aber interessant zu wissen, dass 
dies dort unterstützt wird. Dies zeigt mir doch, dass mein Anliegen 
nicht ganz so "sinnfrei" ist.

Mit freundlichen Grüßen
Guido

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren