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

eval vermeiden?!

 

xPashAx
Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 19.12.2011, 14:01     Titel: eval vermeiden?!
  Antworten mit Zitat      
hi jungs,
bräuchte eure hilfe.
ich hab zB eine Messung. test_1.mat. im test_1.mat sind die variablen geschwindigkeit_2, beschleunigung_4, gierrate_2...,time_1,time_2,time_3 usw.
von den endungen sehe ich welches time vektor zur welcher variable gehört.
wie kann ich sowas plotten.
es soll ja so aussehen:
Code:
plot(time_2,geschwindigkeit_2)

bei der messung test_2.mat ändern sich die endungen geschwindigkeit_4, beschleunigung_5.
jetzt müssste ich
Code:
plot(time_4,geschwindigkeit_4)

ich möchte die in mit EINER gui die .mat files laden und im axes plotten.

ich hoffe mein problem war eindeutig.

ich versuche sowas zu machen.
Code:
plot(time_(endung von geschwindigkeit),geschwindigkeit_(endung 1,2 oder 3 usw))

d.h.
Code:
plot(time_1,geschwindigkeit_1)
Code:
plot(time_2,geschwindigkeit_2)

sowas in der art.

vielen dank
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

ich sehe keine Möglichkeit, EVAL hier zu vermeiden.
Das müsste man meiner Meinung nach über die Wahl konsistenter Variablennamen in den .mat-Dateien angehen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 19.12.2011, 15:56     Titel:
  Antworten mit Zitat      
wie kann ich das dann umsetzen?
Code:

plot(eval('time_''endung von geschwindigkeit),eval('geschwindigkeit_''*'))
 


dankeee
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.12.2011, 16:03     Titel:
  Antworten mit Zitat      
Hallo,

Code:
endung = num2str(1); % Beispiel
plot(eval(['time_' endung]),eval(['geschwindigkeit_' endung]))


Sieht grausam aus, aber das verdankt man den variierenden Namen in den .mat-Dateien.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 19.12.2011, 16:15     Titel:
  Antworten mit Zitat      
jepp danke harald so in der richtung.
aber noch nicht so ganz.
in einem mat file ist die endung _1 und bei der anderen mat file _2. du bist hier mit dem konstanten wert 1 davon ausgegangen. geht das net dynamisch? mein ziel ist geschwindigkeit-zeit zu plotten.
sooo im test_1.mat habe ich geschwindigkeit_1, time_1,time_2.... also ist das befehl
Code:
plot(time_1,geschwindigkeit_1)
im test_2.mat habe ich geschwindigkeit_2,time_1,time_2.... also ist das befehl
Code:
plot(test_2,geschwindigkeit_2)

wenn ich jetzt mit
Code:
das mat file lade, muss es erkennen wie die endung vom geschwindigkeit ist und die dazugehörige zeit vektor finden, damit ich es auch plotten kann[/code]
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

dann musst du eben aus dem Dateinamen die 1 extrahieren und das in endung reinschreiben, und schon ist es dynamisch Smile

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 19.12.2011, 19:46     Titel:
  Antworten mit Zitat      
... und wie kann ich die 1 von geschwindigkeit_1 extrahieren und ans time_ dranhängen damit es time_1 wird ?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.12.2011, 20:04     Titel:
  Antworten mit Zitat      
Hallo,

du musst die Information ja aus dem Dateinamen extrahieren.

Wenn die Ziffern einstellig sind, reicht eine einfache Indizierung.

Code:
endung = dateiname(6)


Wenn sie mehrstellig sind, kann man über reguläre Ausdrücke gehen, siehe z.B.
Code:


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 19.12.2011, 20:31     Titel:
  Antworten mit Zitat      
danke für die bemühung harald Wink aber ich glaube ich hab mich falsch ausgedrückt Very Happy ein bsp also. habe 3 messungen in mat file.
Code:
messung_A.mat
Code:
messung_B.mat
und
Code:
messung_C.mat
.
Code:
messung_A.mat
beinhaltet
Code:
geschwindigkeit_1;beschleunigung_4;time_1;time_2;time_3;time_4
und
Code:
messung_B.mat
beinhaltet
Code:
geschwindigkeit_2;beschleunigung_1;time_1;time_2;time_3;time_4
so aus den endungen können wir sehen welches zeitvektor zur welchem vektor gehört. es sollte ein universalles befehl sein. für plotten falls es natürlich möglich ist.
jetzt blöd dargestellt
Code:
plot(time_*endung vom geschwindigkeit*;geschwindigkeit_*endung, je nach mat file ändert sich die endung*)
ich möchte mit uigetfile eine mat file laden und es soll dann in einem gui geplottet werden. nur die endungen der variablen ändern sich. das problem ist ja dann den zeitvektor zuzuordnen.
ich hoffe das es diesmal klar war:D
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.12.2011, 20:40     Titel:
  Antworten mit Zitat      
Hallo,

deine neue Fragestellung hat mit der ursprünglichen recht wenig zu tun, da in der ursprünglichen die Namen der Variablen aus den Dateinamen ableitbar waren - hier erscheinen sie zufällig, was das ganze ungleich schwieriger macht.

So sehe ich lediglich die Möglichkeit, das mat-File zu laden, und über WHOS zu sehen, welche Daten vorhanden sind und damit dann zu plotten.

Ich frage mich ernsthaft, was derjenige, der die Daten so in den .mat-Dateien abgelegt hat, sich dabei gedacht hat.

Bitte beim nächsten Mal gleich ein aussagekräftiges Beispiel.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
xPashAx
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 294
Anmeldedatum: 18.05.09
Wohnort: Heidelberg
Version: ---
     Beitrag Verfasst am: 19.12.2011, 20:46     Titel:
  Antworten mit Zitat      
genau das hat mich auch geärgert Smile wollte halt ne schöne gui basteln damit ich die signale auch schön analysieren kann. werde es wohl dann mit INCA machen *.dat. hatte nämlich die messungen in .mat files konvertiert. kannste aber bitte trotzdem den ansatz geben Very Happy wenn das schwierig ist lass ich die finger weg, wäre wohl dann zeitverschwendung.
danke harald ich weiss war mein fehler. habs nicht korrekt beschrieben, sorry.
schönen abend noch
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.12.2011, 21:13     Titel:
  Antworten mit Zitat      
Hallo,

"schwierig" wäre übertrieben, es wird halt nur ein unansehnliches Stückwerk. Die einzelnen Elemente sind ja schon da, du musst sie nur korrekt zusammensetzen. Schau doch mal selbst, wie weit du kommst?

Grüße,
Harald
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.12.2011, 22:18     Titel: Re: eval vermeiden?!
  Antworten mit Zitat      
Hallo xPashAx,

Einen Index in den Namen einer Variablen zu packen ist immer eine schlechte Idee. Wenn man schon nicht time{1}, time{2} etc verwenden kann, wäre dies besser:
Code:
time(1).data = rand(1,15);
time(1).index = 2;
time(2).data = rand(1,15);
time(2).index = 4;


Aber nun liegen die Daten bereits vor. Auch hier gibt es eine Methode, um en EVAL vorbeizukommen:
Code:

Data = load('test_1.mat');
Field = fieldnames(Data);
plot(Data.(Field{1}), Data.('time_2'), Data.(sprintf('geschwindigkeit_%d', 2))

Im PLOT Befehl drei verschiedene Methoden, um auf die Felder zugreifen zu können.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.12.2011, 22:30     Titel:
  Antworten mit Zitat      
Hallo zusammen,

in der Tat, die Möglichkeit für eval hatte ich übersehen.

Am geschicktesten dürfte es wohl sein, die Variable field nach Einträgen geschwindigkeit_* etc. zu durchzugehen und ggf. zu plotten.

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.