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

Code vereinfachen

 

s14m04146
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 20.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.04.2015, 13:52     Titel: Code vereinfachen
  Antworten mit Zitat      
Hallo zusammen,

ich schreibe gerade ein Skript, in welchem eine geodätische Messung ausgewertet werden soll. Dazu habe ich auch Werte aus den Jahren 1998 bis zum aktuellen. Kann ich eine for-Schleife schreiben, in welcher auch die Bezeichnung an sich hochgezählt wird ?
Folgendes hab ich bereits:

Code:


% 1999
diff_m2_98 = (round(([m2_99(1,1)-m2_98(1,1) m2_99(1,2)-m2_98(1,2) m2_99(1,3)-m2_98(1,3);
                      m2_99(2,1)-m2_98(2,1) m2_99(2,2)-m2_98(2,2) m2_99(2,3)-m2_98(2,3);
                      m2_99(3,1)-m2_98(3,1) m2_99(3,2)-m2_98(3,2) m2_99(3,3)-m2_98(3,3);
                      m2_99(4,1)-m2_98(4,1) m2_99(4,2)-m2_98(4,2) m2_99(4,3)-m2_98(4,3);
                      m2_99(5,1)-m2_98(5,1) m2_99(5,2)-m2_98(5,2) m2_99(5,3)-m2_98(5,3);
                      m2_99(6,1)-m2_98(6,1) m2_99(6,2)-m2_98(6,2) m2_99(6,3)-m2_98(6,3)] * 1000)*10))/10
           
% 2000
diff_m2_99 = (round(([m2_00(1,1)-m2_98(1,1) m2_00(1,2)-m2_98(1,2) m2_00(1,3)-m2_98(1,3);
                      m2_00(2,1)-m2_98(2,1) m2_00(2,2)-m2_98(2,2) m2_00(2,3)-m2_98(2,3);
                      m2_00(3,1)-m2_98(3,1) m2_00(3,2)-m2_98(3,2) m2_00(3,3)-m2_98(3,3);
                      m2_00(4,1)-m2_98(4,1) m2_00(4,2)-m2_98(4,2) m2_00(4,3)-m2_98(4,3);
                      m2_00(5,1)-m2_98(5,1) m2_00(5,2)-m2_98(5,2) m2_00(5,3)-m2_98(5,3);
                      m2_00(6,1)-m2_98(6,1) m2_00(6,2)-m2_98(6,2) m2_00(6,3)-m2_98(6,3)] * 1000)*10))/10
 
% 2001
diff_m2_00 = (round(([m2_01(1,1)-m2_98(1,1) m2_01(1,2)-m2_98(1,2) m2_01(1,3)-m2_98(1,3);
                      m2_01(2,1)-m2_98(2,1) m2_01(2,2)-m2_98(2,2) m2_01(2,3)-m2_98(2,3);
                      m2_01(3,1)-m2_98(3,1) m2_01(3,2)-m2_98(3,2) m2_01(3,3)-m2_98(3,3);
                      m2_01(4,1)-m2_98(4,1) m2_01(4,2)-m2_98(4,2) m2_01(4,3)-m2_98(4,3);
                      m2_01(5,1)-m2_98(5,1) m2_01(5,2)-m2_98(5,2) m2_01(5,3)-m2_98(5,3);
                      m2_01(6,1)-m2_98(6,1) m2_01(6,2)-m2_98(6,2) m2_01(6,3)-m2_98(6,3)] * 1000)*10))/10
 


Das ganze geht immer so weiter bis ich bei 2015 angekommen bin. Eigentlich immer das Gleiche, muss also doch mit einer for-Schleife lösbar sein. Ich weiß nur nicht wie Sad
Vielen Dank schonmal für die Hilfe.
Private Nachricht senden Benutzer-Profile anzeigen


Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.04.2015, 15:08     Titel:
  Antworten mit Zitat      
Letztendlich ziehst Du ja nur zwei Matrizen elementweise voneinander ab. Das geht auch etwas einfacher:
Code:

diff_m2_98 = (round((m2_99-m2_98 * 1000)*10))/10
 


Wenn Du jetzt noch die Jahreszahl nicht im Variablennamen verpacken würdest, kannst Du sogar Schleifen benutzen:
Code:

m2(:,:,1) = m2_98;
m2(:,:,2) = m2_99;
...
 

So kannst Du in einer Schleife einfach den dritten index hochzählen und wanderst damit durch die Jahre.
Private Nachricht senden Benutzer-Profile anzeigen
 
s14m04146
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 20.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.04.2015, 16:42     Titel:
  Antworten mit Zitat      
Vielen Dank für die rasche Antwort. Wär schön gewesen, wenn das hochzählen bei der Variable auch funktionieren würde, aber so ist mein Skript auch schon um einiges verkürzt Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Epfi
Forum-Meister

Forum-Meister



Beiträge: 1.134
Anmeldedatum: 08.01.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.04.2015, 16:58     Titel:
  Antworten mit Zitat      
Man kann durchaus auch in Variablennamen hochzählen, aber das führt zu ganz hässlichen Konstrukten, die man eigentlich vermeiden will...

Würdest Du die Daten in einem 3D-Array ablegen, wie ich es vorgeschlagen habe, könntest Du Deine Differenzen einfach mit dem diff()-Befehl berechnen. Dann brauchst Du noch nicht mal eine Schleife:

Code:

m2(:,:,1) = m2_98;
m2(:,:,2) = m2_99;
m2(:,:,3) = m2_00;
...
...
...
diff_m2 = diff(a, 1, 3);
 


Denk mal drüber nach ;)
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: 19.04.2015, 13:25     Titel:
  Antworten mit Zitat      
Hallo s14m04146,

Zitat:
Wär schön gewesen, wenn das hochzählen bei der Variable auch funktionieren würde, aber so ist mein Skript auch schon um einiges verkürzt

Grundsätzlich ist das Verstecken von Indices in den Namen von Variablen ein Anfängerfehler, der das Programmieren richtig herzlich komplizierter macht.
Während ein Index zu den Daten gehört, ist der Name der Variablen Teil des Programms. Beides fein-säuberlich zu trennen ist eine sehr wichtige Strategie um effiziente und leicht wart- und debugbare Progarmme zu schreiben.

Mehr dazu findest Du in hunderten Beiträgen, wenn Du im Forum nach "eval" suchst.

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.