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

Spalte zu uitable in GUI hinzufügen

 

Peedschee
Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 21.10.13
Wohnort: ---
Version: R2013a
     Beitrag Verfasst am: 12.11.2013, 09:48     Titel: Spalte zu uitable in GUI hinzufügen
  Antworten mit Zitat      
Hallo liebe Forumsmitglieder,

ich bin blutiger Matlab-Anfänger und dementsprechend unerfahren was das Arbeiten mit diesem Programm betrifft.

Ich arbeite mit der Version R2013a und muss für meine Diplomarbeit ein GUI entwickeln. Dieses GUI soll per Knopfdruck .txt - Daten mit Messwerten einlesen und auswerten.

Das Einlesen klappt wunderbar und auch die Darstellung der Messwerte in uitable als Matrix (nur Zahlenwerte) und axes funktioniert. Jetzt möchte ich zur Auswertung in einem 2. GUI eine Spalte zu uitable (die Werte habe ich zuvor aus dem 1. GUI an das 2. GUI übergeben) hinzufügen. Diese Spalte soll die Differenz der x-Werte, also Zelle 1 ist x2-x1, Zelle 2 x3-x2 usw., beinhalten und dann im uitable der 2. GUI neben den anderen Spalten angezeigt werden. Das ist in Excel ja sehr einfach, aber wie klappt das in Matlab? Ich hoffe mir kann da jemand einen Tipp geben, wie ich das Problem in meiner .m-file lösen kann...

Eine weitere Frage zum anschließenden Plot: Ich möchte die Werte per Knopfdruck mit plot(x,y) plotten, aber nur bis zu einer bestimmten Differenz der aufeinander folgenden x-Werte (es geht dabei um die eigentlichen x-Werte, nicht die Werte aus der neu hinzugefügten Spalte. Diese Spalte dient nur der Veranschaulichung). Wenn jetzt also die Differenz zwischen xn+1 und xn größer als ein bestimmter Wert ist (in meinem Fall 15), dann möchte ich nur bis zu diesem x-Wert plotten. Gibt es da eine Möglichkeit dies zu realisieren?

Ich habe wirklich schon die Suchfunktion bemüht, aber konnte bisher keine Hilfe oder Lösung meines Problems finden... Ich kann später auch gerne meine .fig- und .m-files hier reinstellen, wenn es hilft.

Vielen Dank schon mal im Voraus für eure Bemühungen! Dieses Forum ist wirklich klasse und ohne euch wäre ich gar nicht erst so weit mit meinem Programm gekommen!

Viele Grüße,

Peedschee
Private Nachricht senden Benutzer-Profile anzeigen


Kascho
Forum-Century

Forum-Century


Beiträge: 195
Anmeldedatum: 24.03.10
Wohnort: Jena
Version: R2008b ... :(
     Beitrag Verfasst am: 12.11.2013, 10:47     Titel:
  Antworten mit Zitat      
Hallo Peedsche, mir steht diese Version leider nicht zur Verfügung.

Ich würde vor dem plotten mittels

Code:


die Differenzen berechnen und dann entweder mit logischer Indizierung oder einer If Anweisung schauen, ob der Wert größer 15 ist.

Gruß, Kascho
Private Nachricht senden Benutzer-Profile anzeigen
 
Peedschee
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 21.10.13
Wohnort: ---
Version: R2013a
     Beitrag Verfasst am: 14.11.2013, 10:39     Titel:
  Antworten mit Zitat      
Hallo Kascho,

vielen Dank für deine Antwort!

Habe mit
Code:

jetzt die Differenzen der x-Werte berechnen können und mittels logischer Indizierung überprüfen können, ob der Wert kleiner als 15 ist (diesen Bereich möchte ich ja plotten). Das sieht bei mir dann so aus:
Code:
x=b(:,1); % in b ist die Matrix gespeichert, die ich in meiner uitable habe
Differenz=diff(x);
Differenz_gesucht=Differenz < 15;

Die Matrix von Differenz_gesucht hat dann ja eine Spalte und n Zeilen mit den Werten 1 und 0 für true und false. Wie schaffe ich es jetzt, dass mein Graph nur die x-Werte (mit den dazu gehörigen y-Werten) aus der uitable (Matrix b) plottet, für die die jeweilige Zelle in Differenz_gesucht 1 ergibt?

Danke für deine/eure Hilfe!

Gruß,
Peedschee
Private Nachricht senden Benutzer-Profile anzeigen
 
Peedschee
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 21.10.13
Wohnort: ---
Version: R2013a
     Beitrag Verfasst am: 17.11.2013, 16:28     Titel:
  Antworten mit Zitat      
Servus,

ich habe jetzt folgenden Code:

Code:
b=getappdata(0,'PassData');

set(handles.datatable2,'Data',b);

axes(handles.berstkurvebisberstpunkt);

x_deformation=b(:,1);
y_kraft=b(:,2);

delta_displacement = diff(x_deformation)

negative_werte_x=find(x_deformation < 0 & y_kraft < 0 & delta_displacement > 15);
negative_werte_y=find(y_kraft < 0 & x_deformation < 0 & delta_displacement > 15);

x_deformation(negative_werte_x)=[];
y_kraft(negative_werte_y)=[];

scatter(x_deformation, y_kraft);


Ohne "& delta_displacement > 15" in der find-Anweisung funktioniert auch alles. D. h. es werden nur die Werte geplottet, für die x und y größer 0 sind. Wenn ich jedoch "& delta_displacement > 15" mit eingebe kommt folgende Fehlermeldung:

Code:
Error using  &
Matrix dimensions must agree.

Error in dataimport1>importdatabutton_Callback (line
119)
negative_werte_x=find(x_deformation < 0 & y_kraft < 0 &
delta_displacement > 15);


Warum funktioniert das nicht? Kann es sein, dass die Dimensionen nicht übereinstimmen, weil delta_displacement eine Zeile weniger hat als x und y? Wenn ja, wie kann ich dieses Problem lösen?

Ich hoffe, ihr könnt mir da weiterhelfen!

Viele Grüße,

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

Forum-Meister


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

du erkennst das Problem ja schon selbst: der Ableitungsvektor hat ein Element weniger, und damit ist keine Zuordnung mehr möglich.
Du brauchst einen Änderungsvektor gleicher Länge. Das würde ich mit Differenzenquotienten machen - zentral, wo möglich, und einseitig an den Randpunkten.
Code:

delta_displacement = zeros(size(x_deformation));
delta_displacement(1) = x_deformation(2)-x_deformation(1);
delta_displacement(2:end-1) = x_deformation(3:end)-x_deformation(1:end-2);
delta_displacement(end) = x_deformation(end)-x_deformation(end-1);


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 30
Anmeldedatum: 21.10.13
Wohnort: ---
Version: R2013a
     Beitrag Verfasst am: 17.11.2013, 19:40     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen Dank, damit funktioniert es jetzt!

Einen schönen Sonntag Abend noch!

Grüße,

Peedschee
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.