www.mikrocontroller.net

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


Autor: Guido C. (guidoanalog)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: ich (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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....

Autor: Guido C. (guidoanalog)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Justus Skorps (jussa)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Floh (Gast)
Datum:

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

Autor: Andreas Schwarz (andreas) (Admin) Benutzerseite Flattr this
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: root (Gast)
Datum:

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

Autor: Guido C. (guidoanalog)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas (Gast)
Datum:

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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.