Forum: PC-Programmierung Ist es möglich nur einen Teil der Antworten einer Matlabfunktion zu übernehmen


von Guido C. (guidoanalog)


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

von ich (Gast)


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

von Guido C. (guidoanalog)


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

von Justus S. (jussa)


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;

von Floh (Gast)


Lesenswert?

was hindert dich daran, in deiner berechnung gleich den sinuswert von 
0.5 zu verwenden?
also:
antwort=sin(0.5)

von Andreas S. (andreas) (Admin) Benutzerseite


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.

von root (Gast)


Lesenswert?

Octave unterstützt übrigens die gewünschte Syntax
vielleicht daher der Wunsch es auch im Matlab zu haben?

von Guido C. (guidoanalog)


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

von Thomas (Gast)


Lesenswert?

Das das nicht geht wundert mich auch.
Schreib das doch mal dem Mathworks Support, die sind da gelegentlich 
sehr flexibel.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.