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

Fläche einer Hystereseschleife berechnen

 

Matt1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.07.2015, 16:24     Titel: Fläche einer Hystereseschleife berechnen
  Antworten mit Zitat      
Hallo

ich muss für eine Arbeit in der Uni den Flächeninhalt von Hysteresekurven bestimmten.
Da ich mich mit Matlab nicht wirklich gut auskenne, haben mir die Beispiele hier im Forum leider nicht weiter helfen können.

Meine Vorgehensweise wäre:
- Schnittpunkte mit der x-Achse finden
- Integrieren vom 1. & 2. Schnittpunkt bis zum Anfang der Messwerte
- Differenz der Integrale bestimmen
- Integrieren vom 1. & 2. Schnittpunkt bis zum "Umkehrpunkt" der Hysteresekurve
- Differenz der Integrale bestimmen

Mein Problem ist:
Wie finde ich die x-Achsenschnittpunkte?
Wie finde ich den "Umkehrpunkt" der Hysteresekurve?

Ich habe mal beispielhaft die Messdaten von einer Hysteresekurve in einer Testtabelle hochgeladen. (Die Anzahl der Messpunkte ist nicht bei allen Messungen gleich)

Ich bin für jede Hilfe dankbar
Matthias

test.xls
 Beschreibung:

Download
 Dateiname:  test.xls
 Dateigröße:  36.5 KB
 Heruntergeladen:  398 mal


Harald
Forum-Meister

Forum-Meister


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

Fragen zu Hysterese gab es hier schon öfter.
Hilft dir z.B. das weiter?

http://www.gomatlab.de/hysterese-au.....,highlight,hysterese.html

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2015, 13:12     Titel:
  Antworten mit Zitat      
wenn ich den Code aus dem Beispiel nehme bekomme ich als Ausgabe:

integral =

NaN

Es wird auch irgendwie nicht der ganze Graph in dieses rote "Rückintegral" und grüne "Hinintegral" unterteilt (zumindest laut geplottetem Graph (siehe Bild im Anhang)).

Gruß
Matthias

Hyst.jpg
 Beschreibung:

Download
 Dateiname:  Hyst.jpg
 Dateigröße:  16.49 KB
 Heruntergeladen:  327 mal
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 28.07.2015, 13:18     Titel:
  Antworten mit Zitat      
Zitat:
wenn ich den Code aus dem Beispiel nehme bekomme ich als Ausgabe:

integral =

NaN

bitte erkläre immer genau was du gemacht hast. mit code beispielen. man kann unmöglich erraten was du gemacht hast und warum nan rauskommt.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Matt1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2015, 13:30     Titel:
  Antworten mit Zitat      
Ich habe deinen Code aus dem Beispiel genommen

Code:

x=xlsread('test','A:A');
y=xlsread('test','B:B');

% 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)
 
 
Harald
Forum-Meister

Forum-Meister


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

hast du dir den Code denn mal durchgesehen und versucht, die einzelnen Schritte zu verstehen?
Könnte es denn z.B. sein, dass im Falle des anderen Threads bestimmte Annahmen bzgl. der Daten galten, die bei deinen Daten nicht erfüllt sind?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2015, 16:35     Titel:
  Antworten mit Zitat      
Ich habe mir den Code nochmal etwas angeschaut und das mit dem "Rumwackeln" und Interpolieren mal rausgenommen.

Code:

x=xlsread('test','A:A');
y=xlsread('test','B:B');

% Anfangs und Endpunkte für die Intervalle
start = 2;
[tmp, mitte] = min(x);
ende = find(x, 1, 'last') + 1

% Hin- und Rückweg
hinx = x(start:mitte+1);
hiny = y(abs(start:mitte+1));
rueckx = x(mitte+1:ende);
ruecky = y(abs(mitte+1:ende));

hold all
plot(hinx,hiny,'g:',rueckx,ruecky,'r:','LineWidth', 4)

integral = trapz(hinx,hiny) + trapz(rueckx,ruecky)
 


nur jetzt bekomme ich folgende Fehlermeldung
Code:

Index exceeds matrix dimensions.

Error in test5 (line 16)
rueckx = x((mitte+1):ende);
 


Gruß
Matthias
 
Harald
Forum-Meister

Forum-Meister


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

hast du mal versucht, dem mit dem Debugger auf den Grund zu gehen?

Gibt es Gründe, warum du in deinem Fall...
- bei 2 statt 1 startest
- als ende nicht den letzten Wert nimmst
- zur Mitte 1 hinzuzählst
- den Absolutbetrag von ohnehin positiven Indizes nimmst

Grüße,
Harald

P.S.: Da es zwischenzeitlich eine Funktion integral gibt, würde ich das als Variablennamen meiden
Private Nachricht senden Benutzer-Profile anzeigen
 
Matt1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2015, 18:24     Titel:
  Antworten mit Zitat      
Hallo,

ja das mit dem +1 und dem Betrag nehmen macht keinen Sinn.
Habe nochmal ein wenig dadrüber nachgedacht und bin die Sache jetzt etwas anders angegangen, da ich bei der vorherigen Version nicht genau wusste wie ich die Fläche zwischen den Hin und Rückgraph richtig berechnen sollte.

Hier mein neuer Code den ich jetzt habe

Code:

x=xlsread('test','A:A');
y=xlsread('test','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+1)
        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)
end
 

den Code führt Matlab ohne meckern aus Wink
Code:

flaeche =

    0.2043
 


so rechne ich mir die Fläche zwischen den einzelnen "Linien" ober- bzw unterhalb der x-Achse und der x-Achse aus und ermittle damit meine Fläche der Hystereseschleife.
Sollte doch so stimmen oder habe ich da jetzt irgendwo noch einen Denkfehler?
 
Matt1

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.07.2015, 18:29     Titel:
  Antworten mit Zitat      
was ich grade noch sehe:
das "+1" was bei "mitte" noch dransteht muss natürlich noch entfernt werden.
 
Harald
Forum-Meister

Forum-Meister


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

kommt dir das Ergebnis denn sinnvoll vor? Wie groß würdest du denn die Fläche anhand des Plots schätzen?

Ich verstehe nicht ganz, warum du nochmal komplett anders anfängst, wenn eigentlich nur noch kleine Anpassungen nötig sind.
Fläche zwischen zwei Funktionen = Integral der Differenzfunktion oder Differenz der Integrale.

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