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 for-Schleife

 

Dexter
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 22.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.09.2013, 15:27     Titel: Problem mit for-Schleife
  Antworten mit Zitat      
Hallo,

ich habe ein solches Konstrukt manuell erstellt:

Code:
Vhm_1=C{1,7,1};
dVh_1=C{1,8,1};
VhMax_1=C{1,9,1};
VhMin_1=C{1,10,1};
Dir_1=C{1,11,1};
um_1=C{1,12,1};
du_1=C{1,13,1};
vm_1=C{1,14,1};
dv_1=C{1,15,1};
wm_1=C{1,16,1};
dw_1=C{1,17,1};]


Dieses wird bis

Code:
Vhm_24=C{1,421,1};
dVh_24=C{1,422,1};
VhMax_24=C{1,423,1};
VhMin_24=C{1,424,1};
Dir_24=C{1,425,1};
um_24=C{1,426,1};
du_24=C{1,427,1};
vm_24=C{1,428,1};
dv_24=C{1,429,1};
wm_24=C{1,430,1};
dw_24=C{1,431,1};

fortgeführt. Die Spaltenabstände sind dabei immer gleich.

Das Ganze wollte ich nun in eine for-Schleife umwandeln. Diese muss dementsprechend die Varialben von 1-24 benennen und die jeweiligen passenden Werte in die entsprechende Variable schreiben.

Meine Schleife sieht nun wie folgt aus:

Code:
for i=1:24
    for j=7:18:421
       erg = C{1,j,1};
    end
    eval(['Vhm' num2str(i) '=erg']);
end
disp('Ende');


Das Problem ist das "erg". Dieses gibt mir zu jeder Variable immer die gleichen Werte aus (die auch noch falsch sind). Setze ich für das "j" einen festen Wert ein, z.b. 7 für die ersten Vhm-Werte, bekomme ich die richtigen Werte.
Kann mir wer sagen, was ich falsch mache? Und kann ich das System leicht auf alle Variablen in meinem Beispiel oben anwenden?

VG Dexter
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.09.2013, 15:38     Titel:
  Antworten mit Zitat      
Hallo,

ich würde dringend von so einem Vorhaben abraten!

Zu allermindest sollte man die Durchnumerierung von 1 bis 24 vermeiden und die Daten stattdessen in einen Vektor oder ein Cell-Array stecken, z.B.

Code:
Vhm = C(1, 7:18:421, 1);
% bzw.
Vhm = [C{1, 7:18:421, 1}];


Ob Vektor oder Cell-Array geeigneter sind, hängt vom Inhalt der Zellen ab.

Mit deinem Ansatz handelst du dir ja ähnliche Probleme auch bei der Verarbeitung der Daten ein.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 18.09.2013, 15:39     Titel:
  Antworten mit Zitat      
einen index im namen zu verstekcen ist sehr schlecht. das fällt dir garantiert wieder auf die füße. du solltest einen index auch als index verwenden. desweiteren ist von eval abzuraten da es nur schwer zu debuggen ist. verwende lieber cellarrays oder matritzen oder wenn du unbedingt den index um namen verstecken willst stuckts.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Dexter
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 22.05.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.09.2013, 15:50     Titel:
  Antworten mit Zitat      
Ok, wenn ich ein Cell-Array erstelle, wie Harald vorschlägt, dann erhalte ich ein Array mit 24 Spalten mit jeweils 72x1 double...
Wie kann ich darin jetzt auf einen bestimmten Bereich zugreifen, um diesen zu mitteln und dann in einem Plot auszugeben?
In meiner bisherigen Variante habe ich das wie folgt gelöst:

Code:
M=mean(Vhm(1:6,:));
plot(M,Hoehe);
title('Windgeschwindigkeit über die Höhe')
 xlabel('Windgeschwindigkeit [m/s]')
 ylabel('Höhe [m]')
 grid on;
print('-djpeg100','2-3_Uhr');
saveas(gcf, fullfile(pfad, sprintf('2-3_Uhr.jpg')));


Das kann so ja nicht funktionieren, da die Matrixdimensionen nicht mehr stimmen. Vhm hatte ich vorher manuell aus den Vhm1-Vhm24 zusammengesetzt. Also quasi das Cell-Array, nur eben mit double werten in der Form 72x24 double
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.09.2013, 17:28     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Also quasi das Cell-Array, nur eben mit double werten in der Form 72x24 double

Dann nimm doch meinen zweiten Vorschlag, und du solltest genau das erhalten.

In MATLAB ist es nahezu nie nötig, etwas "manuell" zu machen.

Grüße,
Harald
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.