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

Datei öffnen und plotten in GUI

 

HP

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.05.2011, 21:56     Titel: Datei öffnen und plotten in GUI
  Antworten mit Zitat      
Hallo,

ich schlage mich jetzt seit einiger Zeit mit folgendem Problem herum: Meine GUI besteht (noch) aus einem "Datei Öffnen"-Button ('openfile'), mit dem man eine wählbare Datei in den Workspace laden können soll, und aus einem Plot.
Die Dateien, mit denen ich arbeite, sind 3-dimensionale Matritzen mit komplexen Einträgen.
Bisher habe ich folgendes:
Code:

function openfile_Callback(hObject, eventdata, handles)
%Übliche Kommentare

[name,pfad] = uigetfile('*.mat', 'Bitte gewünschte mat-Datei auswählen');
if name==0 return, end

out = load([pfad name]);          % mat-Datei

% Übergabe der Datei 'out' in den Workspace
assignin('base','out',out);
%1. Plot auswählen
axes(handles.iso1)
isosurface(abs(out));


Leider funktioniert mein Code von vorne bis hinten nicht. Bevor es zum Plot kommt, wird out als <1x1> struct angezeigt.
Demnach bekomme ich diese Fehlermeldung:
??? Undefined function or method 'abs' for input arguments of type 'struct'.

Leider weiß ich auch nicht, ob ich die Grafik richtig eingebunden habe.

Kann mir jemand sagen, wie meine GUI doch noch läuft? Bin für jede Hilfe dankbar!!


eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 11.05.2011, 07:56     Titel:
  Antworten mit Zitat      
Wird doch in der Fehlermeldung genau beschrieben:

Deine Variable out, die du aus der mat Datei importierst, ist vom Typ struct. Der Befehl abs funktioniert nicht für Strukturen, sondern nur für numerische Datentypen.
Private Nachricht senden Benutzer-Profile anzeigen
 
HP

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2011, 08:17     Titel:
  Antworten mit Zitat      
Ja, das ist mir schon klar. Genau das ist ja meine Frage. Ich hab keine Ahnung, warum aus meiner Matrix struc wird und wie ich es vermeiden kann.....hab leider noch wenig Ahnung, was Matlab und GUIs betrifft....
 
HP

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2011, 08:24     Titel:
  Antworten mit Zitat      
Um die Sache klarer zu machen : meine mat-file ist vom Typ <117x117x61 double> .
Das soll sie aber auch bleiben und ich verstehe nicht, warum sie auf einmal vom Typ struc ist. Kann mir da jemand helfen?
 
_Peter_
Moderator

Moderator


Beiträge: 537
Anmeldedatum: 08.12.10
Wohnort: ---
Version: 7.10, 2010a
     Beitrag Verfasst am: 11.05.2011, 09:37     Titel:
  Antworten mit Zitat      
Hallo HP,
das liegt am Befehl load.
Dieser macht dir aus deinem MAT-File beim Einlesen ein struct.
MATLAB Hilfe hat Folgendes geschrieben:

S = load(filename) loads the variables from a MAT-file into a structure array, or data from an ASCII file into a double-precision array.


Guck dir also an wie das struct aufgebaut ist und übergib nur die Daten.

p.s.: Klick in deinem Quellcode hier im Thread auf den lod Befehl und du gelangst direkt auf die Online Hilfe dazu.
_________________

Gruß
Peter
_________________
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht? Oder der MATLAB Hilfe?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
HP

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2011, 11:49     Titel:
  Antworten mit Zitat      
Vielen Dank, Peter, du hast mir schon ein entscheidendes Stück weiter geholfen! Jetzt weiß ich zumindest, wo der Fehler liegt.
Habe jetzt betreffende Stelle ersetzt mit
Code:

out = load([pfad name],'-mat');
 

Laut Hilfe soll der Anhang '-mat' forcieren, dass die Datei eine .mat-Datei bleibt.
Leider bekomme ich noch immer eine struct-Datei. Ich nehme an, ich habe einfach irgendwas falsch implementiert, finde den Fehler aber noch nicht. Ich fürchte, da brauch ich noch Hilfe!
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 11.05.2011, 11:52     Titel:
  Antworten mit Zitat      
Hallo,

extrahiere doch einfach die Variable aus der Struktur?

Code:
out = out.variablenname;

Dabei steht variablenname für den Namen der Variablen, wie er in der .mat-Datei gespeichert ist.

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: 11.05.2011, 11:58     Titel:
  Antworten mit Zitat      
Hallo HP,

-MAT bewirkt, dass LOAD eine Datei auch dann im MAT-Format einliest, wenn die Datei-Endung nicht ".mat" ist. Das ändert also nichts an der Representation der Daten.

MAT-Files sind übrigens intern als STRUCT formatiert. Deswegen ist es auch nicht so verblüffend, dass LOAD einen STRUCT zurück gibt. Das sollte aber eigentlich auch kein Problem sein, Du kannst doch einfach auf das gewünschte Feld zugreifen:
Code:

X = rand(10);
save('FileName.mat', 'X');
% Nun entweder:
S = load('FileName.mat');
disp(S.X);
% Oder:
X = load('FileName.mat', 'X');
disp(X);

Soweit ich das sehe, ist das in "doc save" und "doc load" hinreichend gut beschrieben.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
HP

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.05.2011, 15:18     Titel:
  Antworten mit Zitat      
VIELEN HERZLICHEN DANK AN EUCH!! Ihr habt mir echt sehr geholfen!
Ich hab mich natürlich durch die docs gekämpft, bin aber nicht damit klar gekommen. Wenn man von 0 anfängt, ist glaub ich das einfachste schon kompliziert genug Wink
Jedenfalls ein ganz großes Dankeschön!
 
Slisus
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 14.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.06.2016, 13:06     Titel:
  Antworten mit Zitat      
Tut mir leid für das ausgraben, aber meine frage basiert auf genau diesem thread
Die Matrix bzw die .mat datei einlesen geht wunderbar
Mein Problem ist aber die Zeile
out = out.variablenname
Die Harald vorgeschlagen hatte. Die Matrix wird soweit auch geladen. Für meinen anwendungsfall ist der name der Matrix, also 'variablenname' vorher unbekannt, es sollen nämlich verschiedene .mat dateien geladen werden können. Die Frage ist also, wie kann ich das umgehen
Man kann annehmen, dass in der .mat datei auch nur eine matrix gespeichert ist, vllt gibt es ja gleich ne möglichkeit, alle matrizen aus der .mat datei in matrixform zu speichern, egal wie dessen name ist
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.06.2016, 14:29     Titel:
  Antworten mit Zitat      
Hallo,

versuch mal
Code:
fields = fieldnames(out);
out = out.(fields{1});


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Slisus
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 14.06.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2016, 11:03     Titel:
  Antworten mit Zitat      
Vielen Dank dir, funktioniert einwandfrei Smile
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 - 2024 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.