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

Problem mit sprintf und for Schleifen

 

Joe777
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 11.08.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.08.2017, 18:09     Titel: Problem mit sprintf und for Schleifen
  Antworten mit Zitat      
Hallo an alle.

Ich hab das Problem, dass ich die Matritze "Simulationsergebnisse" in der Darstellung der Zahlen so verändern will das beispielsweise die Zahl "5.502409192314113e+03" aus der besagten Matrize als 5502.409 dargestellt wird, damit die Ergebnisse in einer GUI Tabelle besser präsentiert werden können. Die Ordnung der Matrize an sich sollte nicht verändert werden. Nun hab ich mir folgende Lösung überlegt:

Code:
[z,s] = size (Simulationsergebnisse);
 sz = size (Simulationsergebnisse);
 Data = ones(sz);
for k=1:s
    for i=1:z
    Data(i,k) = sprintf('%.3f',Simulationsergebnisse(i,k));
    end
end


Ziel des Codes ist es eine Zahl aus der Matrix "Simulationsergebnisse" in die Matrix "Data" an die selbe Zeile/Spalte zu überführen und natürlich die Zahlendarstellung zu ändern.

Beim durchlaufen kommt folgender Fehler:

Assignment has more non-singleton rhs dimensions than non-singleton subscripts

Error in Matlab_Simulink (line 84)
Data(i,k) = sprintf('%.3f',Simulationsergebnisse(i,k));

Nun verstehe ich nicht genau was das Problem ist. Confused

Wenn ich das in eine Variable Data ohne Indizierung speicher sprich "Data =sprintf('%.3f',Simulationsergebnisse(i,k));" läuft die Zählschleife durch nur bleibt am Ende natürlich nur der letzte Wert der ausgangs Matrix.
Nun bin ich auch kein Matlab Profi, vielleicht kennt ja jemand auch eleganter bzw. besser Lösungen?
Danke schonmal für Antworten
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: 12.08.2017, 00:40     Titel: Re: Problem mit sprintf und for Schleifen
  Antworten mit Zitat      
Hallo Joe777,

Nur als Bemerkung: Deine Frage lässt sich in einer Minute lesen. Du hast ziemlich genau beschrieben, was Du erreichen möchtest und Dich auf das Wesentliche konzentriert. Den Code zu posten und die vollständige Fehlermeldung ist auch hilfreich. Gut gefragt!

Das Problem besteht darin, dass "Data" eine numerishe Matrix ist, sprintf aber einen String erzeugt, also einen Vektor vom Typ CHAR. Man kann aber einem skalaren Element der Matrix keinen Vektor zuweisen.
Die Lösung ist einen Matrix-Typ zu verwenden, bei dem die Elemente auch nicht-elementare Skalare sein dürfen: Ein Cell-Array:
Code:
[z,s] = size(Simulationsergebnisse);
Data = sell(z, s);
for k = 1:s
    for i = 1:z
      Data{i,k} = sprintf('%.3f',Simulationsergebnisse(i,k));  % Geschweifte Klammern!
    end
end

Dies funktioniert mit einem undokumentierten Befehl noch einfacher in einer einzigen Zeile:
Code:
Data = sprintfc('%.3f', Simulationsergebnisse);

Das hat aber leider den Nachteil, dass die undokumentiert ist, es gibt also keinen Help-Text dazu. Dann behält MathWorks sich vor, den Befehl zu ändern oder aus der Toolbox zu entfernen. Aber immerhin existiert er schon seit 18 Jahren und ich hoffe mal, es bleibt so.

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

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 11.08.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.08.2017, 10:13     Titel:
  Antworten mit Zitat      
Hallo Jan.

Die Lösung mit "sprintfc..." ist natürlich optimal für meinen Fall!
Vielen Dank dafür.

Kennst du vielleicht eine Quelle für solche undokumentierten Matlab Befehle?
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: 14.08.2017, 14:23     Titel:
  Antworten mit Zitat      
Hallo Joe777,

Eine "Quelle"? Die Befehle stammen natürlich von MathWorks selbst. Eine Dokumentation wirst Du für undokumentierte Befehle nicht finden - kaum zu glauben, aber wahr.
Eine wunderbare Zusammenfassung kannst Du finden, wenn Du in einer Internet-Suchmaschine "Matlab undocumented" eingibst. Sinnigerweise heißt die Web-Seite http://undocumentedmatlab.com/.

Smile

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