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

Matlab Code verstehen

 

Holger12345
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 09.07.15
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.09.2015, 08:21     Titel: Matlab Code verstehen
  Antworten mit Zitat      
Hallo,

ich muss einen Matlab-Code in C übersetzen und hänge an folgender Stelle:
Code:
steps = round(2.^[0 : 21/80 : 21]);

was genau passiert hier? In meinem Workspace sehe ich, das steps ein Vektor ist, bei dem der 81. und letzte Wert 2^21 ist. Kann mir jemand erklären was da passiert und wie ich das händisch rechnen kann? komme mit dieser 0 : 21/80 : 21 nicht klar.

Danke schon mal für eure Hilfe.
Private Nachricht senden Benutzer-Profile anzeigen


Andreas Goser
Forum-Meister

Forum-Meister


Beiträge: 3.654
Anmeldedatum: 04.12.08
Wohnort: Ismaning
Version: 1.0
     Beitrag Verfasst am: 29.09.2015, 09:06     Titel:
  Antworten mit Zitat      
Abgesehen davon, dass man MATLAB Code automatisch in C übersetzen kann:

Code:

[0 : 21/80 : 21]
 


Der Teil erzeugt erstmal einen Vektor von 0 bis 21 in Schritten mit der Schrittweite 21/80stel.

Der nächste Teil nimmt diesen Vektor in den 2^ Exponenten für jede Vektorelement (2.^ Operation) und dann wird gerundet.

Andreas
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 29.09.2015, 12:31     Titel: Re: Matlab Code verstehen
  Antworten mit Zitat      
Hallo Holger12345,

Was bei 0 : 21/80 : 21 genau passiert, ist nicht trivial. Die auftretenden Rundungsfehler können nämlich unerwartete Auswirkungen haben. Siehe:
Code:
any((0:0.1:1) == 0.3

Der
Code:
Operator addiert deshalb bis zur Hälfte des Ausgabe-Vektors auf, und danach subtrahiert er vom berechneten Endwert herunter. Das erlaubt die Rundungsfehler zumindest in einem überschaubaren Rahmen zu halten.

Ich bezweifele, dass es auf diese Feinheiten ankommt bei Deiner Aufgabe. Aber eine vollkommene 1-zu-1 Übersetzung zwischen Sprachen ist extrem schwierig. Oder unmöglich.

Nebenbei setzt Matlab noch die Floating-Point-Einheit auf 53-Bit-Rundungen, auch wenn die üblichen PC-Prozessoren auch mit 64-bit-Mantissen akkumulieren könnten. Da gibt es viele Feinheiten, die dazu führen, dass ein ein von Matlab nach C übersetztes Programm andere Ergebnisse erzeugt. Die Unterschiede können klein und riesig sein.

Nur so als Hinweis.

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