Using Trapz on datetime

11 vues (au cours des 30 derniers jours)
Noush
Noush le 11 Déc 2021
Commenté : dpb le 15 Déc 2021
Hi, I have this graph with the Power value on the y-axis and the datetime on the x-axis (overall a week is shown). I want to caluculate various areas below the curves and plot these. Up to now, I have used the "fill" function to do so, but in the last graph I need to calculate the area beneath one curve dependent on the area beneath another of the curves.
I don't know how to create that dependency with fill, or how to actually evaluate the integral that the fill function shows.
Now I saw that I could use the trapz function to calculate the integral, but somehow that does not plot a graph when I use it. I do not get an error message, but I don't get a plot either. What can I do?
I have also tried to convert the datetime values to datenum, I thought that might be the problem, but that does not work either!
  9 commentaires
Noush
Noush le 15 Déc 2021
Okay so I attached a file where all the relevant info is of what I want to do exactly, and here an explanation:
I need to create three plots that are supposed to simulate a battery loading. As you can see in the picture of my question, my y-values are power values and my x-values are datetime values. The plot is supposed to show the battery load and unload throughout 5 days.
The first subplot is supposed to display when loading happens, which is the area underneath the red curve, but only for certain conditions. I have written the conditions, but have used fill to plot this. That is problematic, because fill obviously doesnt give me the value of this area, and I need the value for calculations later on.
The second is the unloading process, basically it has the same conditions in reverse.
The third is supposed to be both the loading and unloading process combined. The battery is only supposed to load up until a certain capacity and unload only with the loaded capacity (the capacity is power*time, which is also why I thought of using trapz or area).
Basically my problem is the third subplot, as I need the plot to display the right thing with a datetime x-axis and also still need values for the capacity, or integral of each day.
Can you give me advice on how to best solve this?
%info:
%dt = datetime of five days in one hour steps
%PV_Leistung = red curve (120 datapoints)
%Power3 = blue curve (120*4 datapoints)
%AL.Leistung_Gesamt = green curve (120 datapoints)
%Loading Process
q1 = PV_Leistung - Power3(1:4:end) - AL.Leistung_Gesamt; %loading with the power value for the time when red curve is over the blue and green one
w1 = (PV_Leistung - Power3(1:4:end)>0) | (PV_Leistung - AL.Leistung_Gesamt>0); %vector of ones where these two conditions are true (loading)
idx = find(w1); %index of these values
y1 = zeros(120,1); %vector of zeros is created
y1(idx) = q1(w1); %vector is filled with PV Values for the spots where condition w is true = loading, as long as red curve is over blue &green
y1(y1>600) = 600; %maximum power of loading possible is 600 kW
y1(y1<0) = 0; %specifies that only positive y-values are plotted
%Unloading Process
q2 =Power3(1:4:end) + AL.Leistung_Gesamt - PV_Leistung; %unloading with the power value for the time when red curve is beneath the blue and green one
w2 = (Power3(1:4:end) - PV_Leistung>0) | (AL.Leistung_Gesamt-PV_Leistung>0); %vector of ones where these two conditions are true (unloading)
idx = find(w2); %indicies of these values
y2 = zeros(120,1); %vector of zeros is created
y2(idx) = q2(w2); %vector is filled with PV Values for the spots where condition w is true = loading, as long as red curve is beneath blue &green
y2(y2>750) = 750; %maximum power of unloading is 750 kW
y2(y2<0) = 0; %specifies that only positive y-values are plotted
%plots
figure(2)%loading curve
subplot(3,1,1)
b1 = fill(dt,(y1),'r');
ylim([-100 1000]);
title("Ladeprozess")
subplot(3,1,2)
b2 = fill(dt,(y2),'r');
ylim([-100 1000]);
title("Entladeprozess")
%load only until 3040 kWh is reached
%unload only with capacity that has been loaded before
subplot(3,1,3)
area(dt,l)
ylim([-100 1000]);
title("Ausleung")
dpb
dpb le 15 Déc 2021
I'm extremely pressed for time at the moment, so don't have time to delve into the guts of the above myself at the moment, but somebody else may come along before I can get back...
However, from your above description, if you have boundaries of these areas defined so that you can use fill to color the areas desired, then perhaps polyshape and its companion area may solve your problem. They, too, will require the time axis variable be treated as a double, but if you have a set of vertices, the above may be more direct route to your goal.

Connectez-vous pour commenter.

Réponses (0)

Catégories

En savoir plus sur Numerical Integration and Differentiation dans Help Center et File Exchange

Produits


Version

R2020a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by