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 zwischen zwei Kurven

 

matlabanfaenger
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2012, 08:32     Titel: Fläche zwischen zwei Kurven
  Antworten mit Zitat      
Liebe Leute!
Ich bin ein totaler Anfänger und versuche gerade mein Bestes mit Matlab. Ich habe folgende Frage:

Habe zwei Lastprofile, die ich in Matlab importiert und geplottet habe. Es handelt sich um stündlich gemessen Leistungsdaten (MW) über ein Jahr.
x=[0.345; 0.434; 0.544; etc.] und y=[0.123; 0.122; 0.143; etc.].
Das Integral ist ja in diesem Fall recht einfach zu berechnen - da es stündliche Werte sind kann ich einfach die Werte aufsummieren und erhalte die Werte in MWh.

Nun muss ich allerdings die Differenz (Fläche zwischen den Kurven) aus diesen beiden Kurven berechnen. Diese schneiden sich, d.h. z.T. sind die Werte von x höher als jene von y und umgekehrt. Wären alle Werte von x kleiner wäre dies kein Problem, da man einfach mit minus(y,x) arbeiten könnte. Allerdings brauche ich jetzt eine andere Herangehensweise...
Ich habe es bereits mit if-Anweisungen versucht, war aber nicht erfolgreich.

Wäre froh über jede Hilfe!
Vielen Dank im Voraus und Lg
Private Nachricht senden Benutzer-Profile anzeigen


flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2012, 09:04     Titel:
  Antworten mit Zitat      
Wenn ich die Vektoren
Code:

a = [1 2 3];
b = [4 0 5];
 


und die elementweise Differenz bilde
Code:

c = b-a = [3 -2 2]
sum(c) = 3
 


dann geht ein Wert negativ ein, was inhaltlich bedeutet, dass er von der Gesamtsumme abgezogen wird und letztendlich dem entsprechen sollte, was Du möchtest
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabanfaenger
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2012, 09:18     Titel:
  Antworten mit Zitat      
Vielen Dank für deine rasche Anwort. Leider brauche ich nicht die Gesatmsumme sondern i bräuchte einmal die Summe jener Flächen bei denen y>x und einmal die Summe jener Flächen bei denen y<x ist.

also so etwas wie
if(y>x)
c=minus(y,x)
if(y<x)
d=minus(x,y)

damit ich am Ende einmal die Fläche/Summe habe von dem Fall das y>x ist und einmal die Fläche/Summe von dem Fall wenn y<x ist.

Hoffentlich hab ich mich jetzt verständlicher ausgedrückt!
Private Nachricht senden Benutzer-Profile anzeigen
 
Calle
Forum-Century

Forum-Century


Beiträge: 145
Anmeldedatum: 08.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2012, 09:50     Titel:
  Antworten mit Zitat      
Ich weiss nicht, ob ich das richtig verstanden habe. Du möchtest also die Totale fläche, die zwieschen den zwei kurven liegt.
z.B. Fläche1 liegt unterhalb der ersten kurve (da y<x) und fläche 2 liegt oberhalb der ersten kurve (da y>x).
Dann nimm doch die Differenz der beiden (sowie flashpixx es auch gemacht hat). Dann davon den absoluten betrag und davon die Summe.
Code:
a = [1 2 3];
b = [4 0 5];
c = abs(b-a)
A = sum(c)


oder habe ich es falsch verstanden? Welche fläche möchtest du denn dann genau haben?

mfg
Private Nachricht senden Benutzer-Profile anzeigen
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2012, 10:19     Titel:
  Antworten mit Zitat      
und wenn das nicht reicht, kannst Du mit find bzw. einem Indexvektor die einmal die Fläche oberhalb und unterhalb der Kurve ermitteln und dann getrennt berechnen
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabanfaenger
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2012, 10:23     Titel:
  Antworten mit Zitat      
Leider haben wir uns immer noch nicht richtige verstanden. Ich hab jetzt ein schematisches Beispiel angehängt, damit müsste meine Frage verständlicher werden - hoffe ich zumindest Smile

Also im Bild sind die zwei Kurven in rot und blau dargestellt:
1. Brauche ich die Fläche zwischen der blauer und der roten Kurve (mit dem blauen Pfeil angezeigt)
2. wenn die rote Kurve die blaue Kurve übersteigt brauche ich die Fläche zwischen roter und blauer Kurve (mit rotem Pfeil angezeigt)

Als Ergebnis hätte ich gerne 1. die Fläche zwischen blau und rot (wenn blau größer als rot) und 2. die Fläche zwischen rot und blau (wenn blau kleiner als rot)

also keine Gesamtsumme, sondern zwei Summen auf diese beiden Fälle aufgeteilt!
Ist das jetzt verständlich?
Danke für deine Hilfe!

Bsp.pdf
 Beschreibung:
Beispieldatei

Download
 Dateiname:  Bsp.pdf
 Dateigröße:  25.22 KB
 Heruntergeladen:  579 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2012, 10:41     Titel:
  Antworten mit Zitat      
matlabanfaenger hat Folgendes geschrieben:
Leider haben wir uns immer noch nicht richtige verstanden. Ich hab jetzt ein schematisches Beispiel angehängt, damit müsste meine Frage verständlicher werden - hoffe ich zumindest


Wir haben Dich verstanden. Schau Dir bitte einmal an, was wir Dir geschrieben haben! Wenn Du einen Vektor mit den Y-Werten einer Kurve hast, dann ist die Fläche, die zu einem Wert gehört die Höhe des Elementes des Vektors (klassische Integralherleitung durch Ober- / Untersummen), wobei der Abstand zwischen zwei Punkten 1 ist.

Bitte überlege Dir, was gilt, wenn Du zwei Vektordaten, d.h. zwei gesamplete Messdatenreihen, von einander subtrahierst und aufsummierst bzw, subtrahierst, den Betrag bildest und dann aufsummierst.

matlabanfaenger hat Folgendes geschrieben:

Als Ergebnis hätte ich gerne 1. die Fläche zwischen blau und rot (wenn blau größer als rot) und 2. die Fläche zwischen rot und blau (wenn blau kleiner als rot)


Dies kann nie eintreten, denn die Fläche kann nur Null sein, wenn beide Kurven identischen Flächen haben, wobei aber daraus folgt, dass die Kurven nicht zwingend gleich sein müssen. Eine Normierung gegen 1 geht ohne zusätzliche Annahmen nicht, da die Fläche unbeschränkt ist
Private Nachricht senden Benutzer-Profile anzeigen
 
matlabanfaenger
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2012, 11:00     Titel:
  Antworten mit Zitat      
Das mit der absoluten Summe, der Differenz aus den Vektoren, usw. habe ich mir überlegt - das ist mir auch klar.
Ich brauche aber als Ergebnis weder die Gesamtfläche die zwischen den Kurven "eingeschlossen" ist noch die Differenz aus den "eingeschlossenen" Flächen. Eure Tips beziehen sich allerdings genau auf das!

Ich brauche einerseits den Wert der, ich nenne es mal positiven Flächen (jene bei denen die "blaue" Kurve über der "roten" Kurve liegt) und dann brauche ich noch den Werte für die, ich nenen sie nun, negative Fläche (jene be denen die "blaue" Kurve unter der roten liegt). Ich brauche diese Werte einzeln und nicht bereits summiert oder subtrahiert...
(Das diese nicht gleich groß sind ist mir klar, das brauchen sie ja auch nicht)

Tut mir leid für die Unklarheiten,
Lg
Private Nachricht senden Benutzer-Profile anzeigen
 
Calle
Forum-Century

Forum-Century


Beiträge: 145
Anmeldedatum: 08.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2012, 11:36     Titel:
  Antworten mit Zitat      
Wie flashpixx schon gesagt hat, kannst du die Differenz der beiden Kurven nehmen und dann mit 'find' suchen lassen, welche werte oberhalb und welche unterhalb sind (je nachdem sind diese dann ja positiv oder negativ).

Das könnte dann ungefähr so aussehen
Code:
a = [1 2 3];
b = [4 0 5];
c = a-b;
a1 = find(c < 0);
a2 = find(c >= 0);
for n = 1:length(a1)
    y1(n) = c(a1(n));
end
for m = 1:length(a2)
    y2(m) = c(a2(m));
end
A1 = sum(abs(y1));
A2 = sum(abs(y2));
disp(A1)
disp(A2)


ist zwar vielleicht nicht das beste, aber es kommt hoffentlich diesesmal dein gewünschtes ergebnis heraus.
mfg
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: 26.06.2012, 11:43     Titel:
  Antworten mit Zitat      
Hallo,

man kann hier schön mit logischer Indizierung arbeiten, und fürs Integrieren würde ich TRAPZ verwenden.

In Anlehnung an Calles Code:
Code:
y1 = c(c<0);
A1 = -trapz(y1);
y2 = c(c>=0);
A2 = trapz(y2)


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 26.06.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2012, 13:08     Titel:
  Antworten mit Zitat      
Danke, jetzt versteh ich was ihr meint.

Allerdings habe ich es wie folgt berechnet:
c1= find(c<0)
c2= find(c>=0)
a= c(c1)
b= c(c2)

A1=sum(abs(a))
A2=sum(abs(b))
Ergebnis für die genannten Vektoren ist A1=5 und A2=2

Wenn ich es allerdings so mache wie du vorgeschlagen hast (mit for n= 1:length(c1) und y1(n)= c(c1(n)) erhalte ich falsche Werte (A1=20 und A2=4)
Private Nachricht senden Benutzer-Profile anzeigen
 
Calle
Forum-Century

Forum-Century


Beiträge: 145
Anmeldedatum: 08.02.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2012, 13:16     Titel:
  Antworten mit Zitat      
Ich habe ja gesgt, meins muss nicht perfekt sein. Ich wusste nicht genau, wie ich die werte aus dem c-vektor heraus bekomme (da find ja nur die stellen angibt). Von daher habe ihc das mit der for schleife gemacht (BIn nämlich auch nicht gerade der beste im programmieren und mache es eher selten). Allerdings bekomme ich bei mir mit meiner Methode auch das richtige Ergebnis heraus. (ALso A1 =5 u . A2 = 2)
aber egal
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.