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

Werte aus Matrizen zu Variablen in Schleife erzeugen

 

opa2003
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 05.09.11
Wohnort: Delmenhorst
Version: Matlab 2011b
     Beitrag Verfasst am: 23.02.2012, 22:00     Titel: Werte aus Matrizen zu Variablen in Schleife erzeugen
  Antworten mit Zitat      
Hallo!
Seit einiger Zeit bin ich stiller Leser dieses Forums und konnte mir bis jetzt immer ganz gut selber helfen (Danke an alle Laughing). Im moment pfeile ich an meiner Masterarbeit und komme nun nicht weiter....

Ich habe 3 txt-Datein die ich mit unten stehendem Code erfolgreich einlesen kann. Hierbei handelt es sich um die Messpunkte x, y und z einer Koordinatenmessung. Die txt-Dateien gestellten sich wie folgt:

Messung_1
1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
1 1 1
...

Messung_2
2 2 2
....

Messung_3
3 3 3
....

Analog zu den Messungen möchte ich nun einzelne Variablen den Spalten der Messdaten (Spalten) zu ordnen, soll heißen:

x_1 = 1 1 1 1 1.....
y_1 = 1 1 1 1 1....
z_1 = 1 1 1 1 1....
x_2 = 2 2 2 2 2 ....
usw.

Die Variablen habe ich soweit erzeugen können, nur leider gelingt es mir nicht, diese mit den Werten der jeweiligen Messung (Spalte) zu füllen. Manuell würde ich es folgenderweise machen:

Code:
x_1=Messung_1(:,1)
y_1=Messung_1(:,2)
z_1=Messung_1(:,3)


Leider gelingt es mir nicht das in der unten stehen Schleife einzubinden:

Code:
list=dir('Messung_*.txt')
for i=1:length(list)                  
eval(['load ' list(i).name ' -ascii']);
eval(['x_' num2str(i) '=i'])             %<---- Hier werden die Variablen erzeugt und ich nicht weiter...!
eval(['y_' num2str(i) '=i'])
eval(['z_' num2str(i) '=i'])
end


Habe ich einen falschen Ansatz gewählt? Habt ihr einen Tipp für mich? Vielen Dank schon einmal im Voraus!

test.rar
 Beschreibung:
Beispielmessungen....

Download
 Dateiname:  test.rar
 Dateigröße:  240 Bytes
 Heruntergeladen:  259 mal
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: 24.02.2012, 08:40     Titel:
  Antworten mit Zitat      
wenn ich kurz fragen darf. warum benutzt du eval um den index in den variablen namen zu packen anstadt den index als index zu benutzen ? zb als cell index oder sowas. das macht es später ungemein einfacher mit den daten zu arbeiten ?

Code:
list=dir('Messung_*.txt');
x=cell(length(list),1);
y=cell(length(list),1);
z=cell(length(list),1);
for i=1:length(list)
   messung=load(list(i).name);
   x{i}=messung(:,1);
   y{i}=messung(:,2);
   z{i}=messung(:,3);
end
Private Nachricht senden Benutzer-Profile anzeigen
 
opa2003
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 05.09.11
Wohnort: Delmenhorst
Version: Matlab 2011b
     Beitrag Verfasst am: 24.02.2012, 14:20     Titel:
  Antworten mit Zitat      
Vielen Dank am Winkow für den hervorragenden Ansatz. Im Rahmen meiner Recherche habe ich nun auch öfters von der Vermeidung der eval-Funktion gelesen...nur leider muss ich mich einer Krücke bedienen, um zum gewünschten Ziel zu gelangen. Matlab taucht im Rahmen meines Studiums leider nur am Rande auf und somit ist mein Talent/Wissen absolut überschaubar.

Code:
list=dir('Messung_*.txt');
x=cell(length(list),1);
y=cell(length(list),1);
z=cell(length(list),1);
for i=1:length(list)
   messung=load(list(i).name);
   x{i}=messung(:,1);
   y{i}=messung(:,2);
   z{i}=messung(:,3);
   
end    

 [x_1 x_2 x_3] = deal(x{:})  %<---Krücke: Anzahl der Zeilen in "array". Muss irgendwie in die Schleife.
 [y_1 y_2 y_3] = deal(y{:})
 [z_1 z_2 z_3] = deal(z{:})


Um die Messwerte mit dem Curve Fitting Tool auszuwerten, benötige ich einzelne Variablen der "cell-Inhalte" x, y und z. Ich bin mir sicher, dass meine Krücke auch anders formuliert werden kann.

Wie bekomme ich die deal-Funktion in die Schleife eingebunden, um ein automatisches Erzeugen (Indexierung) der Variablen x_i, y_i und z_i zu erreichen?
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: 24.02.2012, 14:32     Titel:
  Antworten mit Zitat      
ich versteh immernoch nicht warum du unbedingt den index im dateinamen haben willst. das fällt dir zu 99% später auf die füße ^^
wenn du einfach nur eine variable willst in der zb alle xwerte sind kannst du auch
Code:

benutzen
Private Nachricht senden Benutzer-Profile anzeigen
 
opa2003
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 05.09.11
Wohnort: Delmenhorst
Version: Matlab 2011b
     Beitrag Verfasst am: 24.02.2012, 14:56     Titel:
  Antworten mit Zitat      
Wie schon kurz erwähnt, brauche ich (meiner Meinerung nach Laughing ) die einzelnen Zellen als Variablen für das CFTool. Die Daten fasse ich sozusagen gar nicht mehr an...und können mir somit später nicht auf die Füsse fallen. Wink

Vielleicht etwas zum Hintergrund: Die Messdaten stammen aus einer Koordinatenmessung eines plangefrästen Flachstahls. Durch die Zerspanung mit dem Fräser entsteht Verzug (Bauteilbiegung und -torsion) und das Bauteil krümmt sich. Diese Krümmung interessiert mich, da ich daraus mittels FEM auf Spannungszustände im Bauteil (genauer Eigenspannungen) Rückschlüsse ziehen kann. Der Fit funktioniert auch soweit, soll heißen Verkippung und Berechnung der Flächenparameter werden berücksichtig und ich bekomme Parameter für meine flächenbeschreibende Funktion. Wenn es interessiert hier die Funktion:

f(x,y):a+b*x+c*y+d*x^2*e*y^2+f*x*y

Mit den Parametern a-f arbeite ich dann weiter.

An sich bin ich so schon zu 100% zufrieden, da es sich um einen einmaligen Vorgang handelt...ich dachte nur das es eleganter geht und ich der Nachwelt ein vernüftigen Code-Schnipsel hinterlasse.
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: 24.02.2012, 15:06     Titel:
  Antworten mit Zitat      
vernümpftiger code ist aber ohne die indexe im namen Smile
wenn du gleich alle x benutzen willst kannst du wie gesagt einfach
Code:
benutzen.
du könntest auch alternativ garkeine cellen benutzen und alle messungen in eine 2d matrix schreiben. hätte aber den nachteil 0en erzeugt werden wenn die messreihen unterschiedlich lang sind.
wenn du nur einzellne messreihen in dein cftool geben willst machst du halt x{i} als eingabe anstadt x_1.
Private Nachricht senden Benutzer-Profile anzeigen
 
opa2003
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 05.09.11
Wohnort: Delmenhorst
Version: Matlab 2011b
     Beitrag Verfasst am: 24.02.2012, 15:37     Titel:
  Antworten mit Zitat      
Mit der Funktion

Code:


schreibt er mir alle Werte in eine Variable, die ich dann wieder trennen müßte. Gegen die Indexvariante scheinst du wirklich was zu haben. Wink

Brauch sie aber...und mit meiner exzellenten copy+paste-Technik habe ich schnell die Variablen (der Anzahl meiner Messungen entsprechend) in meine Krücke eingefügt. Twisted Evil

Aber nochmal vielen Dank...du hast mich ein ganzes Stück voran gebracht! Läuft ja...
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: 24.02.2012, 15:41     Titel:
  Antworten mit Zitat      
hmm der unterschied is doch aber nur das du anstadt x_1 irgendwo zu benutzen x{1} benutzt. oder halt auch x{i} und das in eine schleife pakst... dann brauch man garnich copy paste machen.
Private Nachricht senden Benutzer-Profile anzeigen
 
opa2003
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 05.09.11
Wohnort: Delmenhorst
Version: Matlab 2011b
     Beitrag Verfasst am: 24.02.2012, 16:03     Titel:
  Antworten mit Zitat      
Ok, da hast du Recht...aber ich muss wieder meine überschaubaren Matlabkenntnisse anführen.

Ich benutze die GUI der Toolbox, da ich hier einfach eine benutzerdefinierte Gleichung zur Auswertung hinterlegen kann. Zudem empfinde ich es im moment als Vorteil, die Messdaten nochmal visuell in der Toolbox wahrzunehmen....allerdings erfasst die Toolbox nur die von mir gewünschten Variablen.

Wie das alles als m-code ala x{i} automatisiert aussieht, ist etwas womit sich meine Nachfolger an der Uni beschäftigen können. Zu einer eventuell ausstehenden Mittelwertbildung, werde ich dein Vorschlag mit Sicherheit bedenken!
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.