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
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....
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
> 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;
was hindert dich daran, in deiner berechnung gleich den sinuswert von 0.5 zu verwenden? also: antwort=sin(0.5)
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.
Octave unterstützt übrigens die gewünschte Syntax vielleicht daher der Wunsch es auch im Matlab zu haben?
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.