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

Hysterese aus Messwerten -> Fläche dazwischen berechnen?

 

Ragnarok
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 09.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.10.2011, 14:32     Titel: Hysterese aus Messwerten -> Fläche dazwischen berechnen?
  Antworten mit Zitat      
Hallo liebe Matlab Gemeinde,
Ich hab aus den Messwerten von einem Versuch (Josephson-Kontakt) einen Graph geplottet. Dieser ist eine Hysterese.
Wie kann ich da jetzt die Fläche zwischen den beiden Linien berechnen lassen?

MfG
Ragnarok
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

1. Schnittpunkte finden (Vorzeichenänderung der Differenz)
2. z.B. mit TRAPZ das Integral der Differenz berechnen

Wenn du mehr Hilfe brauchst, solltest du bei der Frage vielleicht etwas mehr ins Detail gehen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 09.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.10.2011, 18:30     Titel:
  Antworten mit Zitat      
Ich hab mal die .dat (in der zip file) und eine m-file angehängt wie ich den Plot haben mag. Da muss ich dann die Fläche dazwischen berechnen, nur ich habe da 0 Ahnung wie ich das machen soll. Es sind ja keine 2 Funktionen, sondern sind einfach Messwerte, wo manche x-Werte doppelte y-Werte zugeschrieben bekommen.

Hysterese.m
 Beschreibung:
Hysterese.m welche data0004.dat benötigt

Download
 Dateiname:  Hysterese.m
 Dateigröße:  71 Bytes
 Heruntergeladen:  930 mal
data0004.zip
 Beschreibung:
beinhaltet data0004.dat für m-file

Download
 Dateiname:  data0004.zip
 Dateigröße:  24.1 KB
 Heruntergeladen:  837 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.492
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.10.2011, 18:05     Titel:
  Antworten mit Zitat      
Hallo,

zunächst ist mal die Frage, um welche Fläche es genau geht. Ich nehme mir mal die untere vor. Leider ist es bedingt durch die Daten etwas mühsam:

Code:
load data0004.dat
x=data0004(:,2);
y=data0004(:,1);
x=x*100;

% Anfangs und Endpunkte für die Intervalle
start = find(x(1:end-1) < 0 & diff(x) < -0.001, 1, 'first');
[tmp, mitte] = min(x);
ende = find(diff(x)>0.01, 1, 'last') + 1;

% Hin- und Rückweg
hin = [x(start:mitte), y(start:mitte)];
rueck = [x(mitte:ende), y(mitte:ende)];

% Eliminieren von "Rumwackeln"
hincond = [true; diff(hin(:,1)) < 0];
rueckcond = [true; diff(rueck(:,1)) > 0];

% Interpolation und Visualisierung
xgrid = tmp:0.001:-0.001;
hininterp = interp1(hin(hincond,1), hin(hincond,2), xgrid, 'linear');
rueckinterp = interp1(rueck(rueckcond,1), rueck(rueckcond,2), xgrid, 'linear');

plot(x,y)
hold on
plot(xgrid, hininterp, 'g:', xgrid, rueckinterp, 'r:');

integral = trapz(xgrid, rueckinterp - hininterp)


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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 09.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.10.2011, 14:18     Titel:
  Antworten mit Zitat      
Was für ein Integral wird dort ausgerechnet?
Die "beiden" von einander abgezogen?
Ich brauch wenn dann die beiden einzeln, oder beide zusammen. Keine Differenz.
Danke danke danke schonmal Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die Fläche zwischen zwei Kurven ist nunmal das Integral der Differenz. Hier sind die beiden begrenzenden Kurven durch die rote und die grüne Linie angenähert, und es wird die Fläche zwischen ihnen berechnet.

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 09.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.10.2011, 15:20     Titel:
  Antworten mit Zitat      
Wenn ich das ausführe habe ich iwie keine rote oder grüne line in meiner Figur drin. Mach ich iwas falsch?
Ich hab die ganz normalen Messwerte dort und die Hysteretische Kurve von vorher.

edit:
Ich hab auch noch einen fEhler gemacht, es müsste nicht x=x*100 heissen sondern y=y/10......... sorry
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

etwas genau hinschauen muss man wohl. Alternativ den Plot-Befehl ersetzen durch:
Code:
plot(xgrid, hininterp, 'g.', xgrid, rueckinterp, 'r.');


Die Korrektur von x bzw. y kannst du sicher auch selbst vornehmen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 09.10.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.10.2011, 02:17     Titel:
  Antworten mit Zitat      
Sorry habs vergessen dazu zu schreiben, wenn ich des in y=y/100 ändere kommt der Fehler:
Zitat:
??? Index exceeds matrix dimensions.

Error in ==> Hysterese at 22
rueckinterp = interp1(rueck(rueckcond,1), rueck(rueckcond,2), xgrid,
'linear');


Aber danke für den anderen Plot Befehl, jetzt seh ich im negativen Bereich die rote und grüne line. Danke!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

hier eine modifizierte Version des Codes:

Code:
load data0004.dat
x=data0004(:,2);
y=data0004(:,1);
y=y/10;

% Anfangs und Endpunkte für die Intervalle
start = find(x(1:end-1) < 0 & diff(x) < -0.00001, 1, 'first');
[tmp, mitte] = min(x);
ende = find(diff(x)>0.0001, 1, 'last') + 1;

% Hin- und Rückweg
hin = [x(start:mitte), y(start:mitte)];
rueck = [x(mitte:ende), y(mitte:ende)];

% Eliminieren von "Rumwackeln"
hincond = [true; diff(hin(:,1)) < 0];
rueckcond = [true; diff(rueck(:,1)) > 0];

% Interpolation und Visualisierung
xgrid = tmp:0.00001:-0.00001;
hininterp = interp1(hin(hincond,1), hin(hincond,2), xgrid, 'linear');
rueckinterp = interp1(rueck(rueckcond,1), rueck(rueckcond,2), xgrid, 'linear');

plot(x,y)
hold on
plot(xgrid, hininterp, 'g:', xgrid, rueckinterp, 'r:', 'LineWidth', 4);

integral = trapz(xgrid, rueckinterp - hininterp)


Normalerweise versuche ich, nur Tipps zu geben und die User die Lösung sich selber erarbeiten zu lassen, damit sie sie auch wirklich verstehen. Hier habe ich das nicht gemacht, weil die Aufgabe doch im Detail ein wenig kompliziert ist.
Das mindeste, was ich dir jedoch empfehlen würde, ist den Code zeilenweise durchzugehen und dir genau anzusehen, was wo warum gemacht wurde. Dann verstehst du auch, wieso ich die Parameter im Code nach deinem "Änderungswunsch" auch entsprechend anpassen musste, damit der Code weiterhin funktioniert.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
kwd46056
Forum-Anfänger

Forum-Anfänger


Beiträge: 39
Anmeldedatum: 27.10.17
Wohnort: Regensburg
Version: ---
     Beitrag Verfasst am: 13.11.2017, 20:01     Titel:
  Antworten mit Zitat      
Hallo Leute, ich hab mal wieder eine Frage. Hab folgende Daten:

0,14407983 1,1492893
0,27971539 1,8931921
0,41298372 2,6522124
0,53950578 3,360863
0,6574446 4,0194035
0,75528604 4,5932093
0,83180547 5,0731511
0,88867098 5,4268126
0,9272337 5,6419048
0,94609195 5,7102165
0,9435581 5,5597239
0,91648304 5,3449359
0,86251211 4,9631925
0,79071808 4,468646
0,70033568 3,8701291
0,59778559 3,1530907
0,48150691 2,4005198
0,34756994 1,5923887
0,20238777 0,76162624
0,056693759 -0,054261539
-0,089569524 -0,84093434
-0,22973856 -1,6063218
-0,36521041 -2,3797045
-0,49779171 -3,1055915
-0,62130082 -3,7867317
-0,72537327 -4,3744302
-0,81136173 -4,8966241
-0,87956607 -5,299181
-0,92824066 -5,5789552
-0,95826834 -5,7129183
-0,96593767 -5,7002702
-0,94698983 -5,5188866
-0,90322381 -5,2071848
-0,84223843 -4,7630811
-0,76370329 -4,1957974
-0,66793269 -3,5410688
-0,55565387 -2,8252621
-0,42576212 -2,0439165
-0,2847544 -1,2301263
-0,14217786 -0,39030933
0,000570419 0,41382578
0,14371736 1,169627
0,2863071 1,9195566
0,42475283 2,6610799

1 Spalte sind die x-Werte für die Verschiebung und die 2 Spalte stellt die Lagerkraft da.

Diese Daten stellen eine Hysteresschleife da, von der ich jetzt den Flächeninhalt benötige. Die hier im diesem Beitrag gezeigten Codes bringen mich nicht weiter.

Ich hab folgenden Code geschrieben
Code:
x=xlsread('Berechnung_01','A:A');
y=xlsread('Berechnung_01','B:B');

[tmp, mitte] = min(x);

for i=1:length(y)                    
    if(sign(y(i)) == -1 && i < mitte+1)
        xunten1(i) = x(i);      % x- &y-Werte des oberen Stückes der Hystereseschleife
        yunten1(i) = abs(y(i)); % unterhalb der x-Achse
    else
        xunten2(i) = x(i);      % x- &y-Werte des unteren Stückes der Hystereseschleife
        yunten2(i) = abs(y(i)); % unterhalb der x-Achse
    end
    if(i < mitte)
        xoben1(i) = x(i);   % x- &y-Werte des oberen Stückes der Hystereseschleife
        yoben1(i) = y(i);   % oberhalb der x-Achse
    else
        xoben2(i) = x(i);   % x- &y-Werte des unteren Stückes der Hystereseschleife
        yoben2(i) = y(i);   % oberhalb der x-Achse
    end
end
% Fläche zwischen unterem und oberem Hystereseschleifestückes
flaeche = trapz(xunten2,yunten2) - trapz(xunten1,yunten1) + trapz(xoben1,yoben1) - trapz(xoben2,yoben2);

plot(x,y)
xlabel 'mm'
ylabel 'kN'
hold on
 


Ich bin mir ziemlich sicher, dass bei meinem Code ein Fehler vorliegt, da der ausgegebene Flächenwert, meiner Meinung nicht korrekt ist.

Gruß
David
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.