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

Daten einlesen im GUI

 

Prikindel
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2011, 22:01     Titel: Daten einlesen im GUI
  Antworten mit Zitat      
Hallo Leute,

habe ein Problem beim Laden der Daten aus einer Textdatei (Datei im Anhang). Ich will mir die 2. die 3. und die 5. Spalte aus der Datei laden und damit ein 3D Plot zeichnen. Das Problem ist, dass die Daten in der Spalte 5 in exponentialform liegen, z.B. 4.4322585033180566e-08. Ich habe mit str2double und str2num versucht eine Gleitkommazahl zu bekommen ohne Erfolg. Eigentlich brauche ich für den Plot, für meshgrid zahlen die gleich lang sind. Wie kann ich die Spalte 5 umwandeln und runden so dass aus 4.4322585033180566e-08 Meter z.B. 44.432 nano Meter wird. Und die Werte aus den ersten 2 Spalten auch auf 3 Stellen nach der Komma abrunde?

Danke im Voraus!

Code:
% Das ist mein Programm
[filename,pathname]=uigetfile('*.txt','Select the measurement data file');
name=[pathname filename];
handles.results=importdata(name,'\t',1);
handles.data=handles.results.data;
guidata(hObject, handles);

axes(handles.axes)
X=handles.results.data(:,2)';
Y=handles.results.data(:,3)';
Z=handles.results.data(:,5)';

[Xi,Yi]=meshgrid(min(X):0.05:max(X),min(Y):0.05:max(Y));
[XI,YI,ZI]=griddata(X,Y,Z,Xi,Yi,'cubic',{'QJ'});
surf(XI,YI,ZI,'LineStyle','none')
colormap(jet);
hold on;
plot3(X,Y,Z....
 


Daten.txt
 Beschreibung:

Download
 Dateiname:  Daten.txt
 Dateigröße:  55.39 KB
 Heruntergeladen:  378 mal
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: 01.12.2011, 23:38     Titel: Re: Daten einlesen im GUI
  Antworten mit Zitat      
Hallo Prikindel,

Welches Problem hast Du denn genau beim Laden der Files? Eigentlich werden die Zahlen in Exponential-Form ohne Probleme gelesen. Und wenn sie als Strings vorliegen, kann auch STR2DOUBLE und SSCANF damit umgehen.
Bitte zeige also, was Du genau versucht hast und welche Fehler dabei auftraten.

Wieso benötigt MESHGRID Zahlen, die gleich lang sind? Und was genau ist die Länge einer Zahl? Bei z.B. 0.0080000000000004 ist das nicht leicht zu definieren.

Um Nanometer zu bekommen, musst Du nur mit 1e9 multiplizieren. Runden auf drei Nachkommastellen kannst Du ungefähr mit:
Code:
x = round(x*1000) / 1000;

Aber wie gesagt: Das ist nur ungefähr gerundet: Es lassen sich nicht alle realen Zahlen als Binärzahl darstellen. Als Konsequenz wird es mit jedem Verfahren zur Rundung immer Werte wie 0.8040000000000001 geben.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Prikindel
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2011, 00:00     Titel:
  Antworten mit Zitat      
Also mit dem Code von oben kommt folgende Fehlermeldung:
"Z must be a matrix, not a scalar or vector"

wenn ich
Code:
Z=str2double(handles.results.data(:,5)');
schreibe, dann sagt griddata: "X and Y must be same length as Z or the lengths
of X and Y must match the size of Z."

Wie runde ich alle Elemente der Matrix und nicht nur eine Zahl?
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: 02.12.2011, 01:11     Titel:
  Antworten mit Zitat      
Hallo Prikindel,

Damit wird es schon klarer: Das Problem liegt nicht bei den Zahlen oder beim Einlesen, sondern die Dimensionen passen nicht zu den befehlen zum Zeichnen. "Length" bedeutet also Anzahl der Elemente des Vektors. Mit Rundung hat dies nichts zu tun.

Für ein Gitternetz müssen die Anzahl der X- und Y-Werte zu der Anzahl der Z-Werte in der jeweiligen Richtung passen. Das machen sie zur Zeit in Deinem Code nicht. Welche Dimensionen haben sie denn? (Siehe "help size").

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Prikindel
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2011, 08:26     Titel:
  Antworten mit Zitat      
Hallo Jan,

size(Y) gibt mir genau so wie size(Z):

ans =
1 294

eigentlich ist es auch immer nur eine Spalte aus meiner TextDatei, die Spalten sind auch gleich lang.

Gruß, Prikindel
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: 02.12.2011, 09:08     Titel:
  Antworten mit Zitat      
Hallo Prikindel,

Dann ist die Fehlermeldung ""Z must be a matrix, not a scalar or vector" einleuchtend, oder?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Prikindel
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2011, 09:11     Titel:
  Antworten mit Zitat      
leider nicht, ich habe schon aus anderen Textdateien Graphen mit diesem Code geplottet. Da war Z auch nur eine Spalte aus der Textdatei, eine 1xn Matrix halt, oder verstehe ich das jetzt falsch?
Private Nachricht senden Benutzer-Profile anzeigen
 
elcachon
Forum-Century

Forum-Century


Beiträge: 190
Anmeldedatum: 03.05.11
Wohnort: ---
Version: 7.6.0(R2008a), 7.8.0(R2009a)
     Beitrag Verfasst am: 02.12.2011, 10:17     Titel:
  Antworten mit Zitat      
Hallo,
Diese Zeile
Zitat:

size(Y) gibt mir genau so wie size(Z):

ans =
1 294


sagt aber, das Y und Z Skalare Werte sind und keine 1xn Matrix, das ist das Problem!
Private Nachricht senden Benutzer-Profile anzeigen
 
Prikindel
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.12.2011, 10:22     Titel:
  Antworten mit Zitat      
Das Problem ist gelöst, musste die Schrittweite für meshgrid anpassen, danke noch mal für die Rückmeldungen!
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.