|
|
Probleme mit Variablen Deklaration und dem "mean" |
|
timbo |
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 04.05.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 04.05.2011, 23:37
Titel: Probleme mit Variablen Deklaration und dem "mean"
|
|
|
|
|
Hallo,
ich bin Neueinsteiger und noch nicht so erfahren mit Matlab. Habe in den anderen Beiträgen leider nichts gefunden, was mir weiterhilft. Hoffe jemand hat einen nützlichen Tip.
Problem
Ich habe verschiedene Matlab Datein mit Messwerten (test_a_1.mat, test_a_2.mat, ...) die ich auswerten will. Ich möchte jede Datei mit einer for-schleife aufrufen und dann den Mittelwert von bestimmten Messwerten aus der Datei bilden.
Zum testen habe ich jetzt mal den Dateinamen, wo sich die Daten befinden in "bla" gespeichert und draus den "mw1" gebildet, klappt wunderbar. Bla ist dabei eine Double-Variable, die eine langen Zeilenvektor mit sämmtliche Messwerte enthält wenn ich sie aufrufe.
Allerdings will ich das ganze ja in eine for-schleife packen und dabei verschieden Datein nutzen, daher muss sich der Name aus String und Laufindex "j" zusammensetzten, wie ich es in "bla2" gemacht habe.
Das Problem ist jetzt, dass so in bla2 keine double sondern eine string variable habe und somit bekomme ich für den Mittelwert "mw2" einen falschen Wert raus, der anders ist als bei "mw1".
Wie bekomme ich es also hin, dass ich erst den Dateinamen (test_a_1.Y(1,8).Data ) aus String und "j" zusammensetzte und dann aber die darin enthaltenen Messwerte in bla2 speichen kann, anstatt den Dateinamen als String? Habe versucht str2double anzuwenden, aber dann bekomme ich nur NaN.
Hoffe jemand kann mir helfen, Vieln Dank schonmal.
|
|
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 05.05.2011, 00:24
Titel: Re: Probleme mit Variablen Deklaration und dem "mean&qu
|
|
Hallo timbo,
Ich verstehe die Frage nicht ganz. Muss da nicht irgendwo ein LOAD auftauchen? Ich rate einfach mal:
Hilft das?
Gruß, Jan
|
|
|
timbo |
Themenstarter
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 04.05.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 05.05.2011, 14:43
Titel:
|
|
|
|
|
Hallo Jan,
Vielen dank erstmal für die schnelle Antwort, leider hilft mir das nicht. Ich habe die Daten vorher mit load in einer For-schleife geladen, was auch geklappt hat. Hab nur einen Ausschnitt aus dem Code gezeigt, so sieht er ganz aus.
Habe deinen Ansatz mal eingefügt, bekomme aber auch nur eine Fehlermeldung leider. (??? Reference to non-existent field 'Y'.)
Das Problem sind die Variablen, habe den Debugger Schritt für Schritt laufen lassen und laut Workspace steht folgendes in den Variablen.
1. bla = <1x11310 double> (dabei kommt dann auch der richtige mw raus, also ist es so scheinbar richtig)
2. bla2 = 'test_a_1.Y(1,8).Data' (da kommt auch ein Zahlenwert als ans raus, aber definitv ein falscher wert, abweichend von 1.
3. FileData = <1x1 struct> (Fehlermeldung)
Um nochmal die Datenstrucktur zu erläutern:
Jede test_a_1 .... test_a_6 Datei stellt einen Messpunkt da, in jeder Datei gibt es unter "X" die Zeit (jeder Messpunkt wurde 10 sec aufgezeichnet) und unter Y gibt es eine Zeile mit 12 Spalten, dabei ist in jeder Spalte eine andere Messgröße (Strom, Spannung, Drehzahl usw)
Öffnet man also z.B. test_a_1.Y(1,8).Data sind dort 11310 Messwerte als Zeilenvektor enthalten, die während der 10 sec Messzeit aufgenommen wurden und beispielsweise die Drehzahl darstellen. Aus diesen 11310 Messwerten will ich nun jeweils den Mittelwert bilden, dass bei jedem Messpunkt (also test_a_1, .... , test_a_5) und dann von allen Daten Y(1.1).Data, Y(1.2).Data...., Y(1.12).Data.
Hoffe das hilf weiter für nützliche tips.[/code]
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 05.05.2011, 22:27
Titel:
|
|
Hallo timbo,
Dies erstellt einen String, also einen CHAR vector. Davon kann man zwar auch den Mittelwert berechnen, das ist aber nicht sinnvoll. Obwohl der Inhalt dieses Strings gleich dem Namen einer Variable ist, ist beides noch lange nicht identisch!
Ein MAT-File per LOAD direkt in den WorkSpace zu laden, führt immer wieder zu Verwirrung. Deshalb rate ich grundsätzlich davon ab. Es ist viel sicherer die Ausgabe von LOAD einer Variablen zuzuweisen. Z.B.:
"test_a_1" sieht so aus, als habest Du einen Index in den Namen der Variablen gepackt. Das ist grundsätzlich eine schlechte Idee, weil es, wie man sieht, den Zugriff auf die Variable erschwert. Ein CELL- oder STRUCT-Array wäre praktischer.
Gruß, Jan
|
|
|
timbo |
Themenstarter
Forum-Newbie
|
|
Beiträge: 3
|
|
|
|
Anmeldedatum: 04.05.11
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 06.05.2011, 00:06
Titel:
|
|
|
|
|
Vielen Dank erstmal, leider bin ich ncoh nicht viel weiter
Der Tipp mit dem Laden der Daten war sehr gut, so habe ich jetzt schonmal die Daten vernünpftig in einer Datei gesammtelt.
Zitat: |
Dies erstellt einen String, also einen CHAR vector. Davon kann man zwar auch den Mittelwert berechnen, das ist aber nicht sinnvoll. Obwohl der Inhalt dieses Strings gleich dem Namen einer Variable ist, ist beides noch lange nicht identisch!
|
Das hab ich mir ja so ähnlich gedacht, dass ich mit dem string im Argument nichts machen kann.
Zitat: |
"test_a_1" sieht so aus, als habest Du einen Index in den Namen der Variablen gepackt. Das ist grundsätzlich eine schlechte Idee, weil es, wie man sieht, den Zugriff auf die Variable erschwert. Ein CELL- oder STRUCT-Array wäre praktischer.
|
Was meinst du mit index? die ..._a_1 ? Die muss ich ja haben, um die eins mit der Laufvariablen der For-Schleife durch eine 2, 3, 4... zu ersetzten, um alle 6 Messpunkte zu laden. Leider ist ja jeder der 6 Messpunkte eine eigene .mat Datei.
Leider ist mein Hauptproblem noch nicht gelöst.
Mein Ziel ist es eine Matrix (6x12) zu erstellen, dabei sollen die Zeilen 1-6 jeweils einen Messpunkt enthalten. In den 12 Spalten sind dann die verschiedenen gemessenen Größen (Strom, Spannung, Drehzahl.....), allerdings sollen in der Matrix halt immer nur die Mittelwerte von den fast 12000 Messwerten stehen.
Also besteht nachwievor das Problem mit der MIttelwertbildung. Ich greife jetzt zwar in jedem for durlauf auf den richtigen Datensatz zu, allerdings wird ja bei der Mittelwerbildung jedesmal "Data{j}.test_a_1.Y(1,3).Data" aufgerufen, für j = 1 ist das richtig, aber bei j = 2 will ich ja da stehen haben Data{j}.test_a_2.Y(1,3).Data und nicht wieder ..a_1.
er gibt mir so natürich eine Fehlermeldung raus, dass der Pfad nicht exisitiert, weil er ja wieder versucht aus ...a_1 den Mittelwert zu bilden, dort jetzt aber die Datei ....a_2 liegt.
Somit habe ich immer noch das selbe Problem, ich muss den Dateipfad zum aufrufen der Daten für mw1 in jeder For-Schleife ändern durch zusammensetzten von einem Namen (test_a_), dem Laufindex (1-6) und einem Pfad (.Y(1,3).Data) und aus den Daten, die hinter dem zusammengesetzten Namen gespeichert sind dann den MW bilden.
Vieln Dank schonmal für deine Hilfe.
Beste Grüße, timbo
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 09.05.2011, 14:18
Titel:
|
|
Hallo timbo,
Zitat: |
"Data{j}.test_a_1.Y(1,3).Data" aufgerufen, für j = 1 ist das richtig, aber bei j = 2 will ich ja da stehen haben Data{j}.test_a_2.Y(1,3).Data |
Und genau deswegen ist es so hinderlich, wenn man eine Index in den Namen der Variablen packt. Wenn die nun nicht "test_a_1" hieße, sondern ein Cell-Array wäre, könntest Du einfach per "test_a_{1}" darauf zugreifen!
Aber immerhin erlaubt Matlab auch die Namen von Feldern dynamisch zu bilden:
Das funktioniert dann genauso nach "i = 2". Stichwort für die Suche in der Dokumentation: "dynamic fieldnames"
Gruß, Jan
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|