How to derive/integrate plotted data?

3 visualizaciones (últimos 30 días)
Mason
Mason el 10 de Jun. de 2025
Comentada: Walter Roberson el 10 de Jun. de 2025
I have data points that I'm plotting from an excel sheet that I would like to create a derivate or integral plot of. I've been plotting them via duration because the data is time coded, but I think having the x-axis be time is preventing me from getting derivaties or integrals.
I've tried diff to create derivatives but all I get is a perfectly flat line at 0. it looks like dy is being stored as a sym?
I've tried cumtrapz to get an integral but all I get is the base graph.
How do i fix this and actually get the derivative plot of my graph? And would a similar process follow for create an integral?
%
clear
datasource = "xxxxxxxxxxx.xlsx"
%importing data
disp("Importing Flight Data...")
Sheet1 = readtable(datasource,'PreserveVariableNames',true);
disp("Done")
disp("Importing Division Data...")
Sheet2 = readtable(datasource, 'sheet', 2, 'ReadRowNames',false, 'VariableNamingRule','preserve');
disp("Done")
%}
format longG;
TimetoEnd=(height(Sheet1)-1)*0.032*1000;
numManuRows=height(Sheet2);
MaxVar=(width(Sheet1)-1);
%plot x axis with time
t=duration(12,00,00,000:032:TimetoEnd,"format","hh:mm:ss.SSS");
tdoub=milliseconds(t/86400000);
Prompt which variable
while true
prompt = "Which variable would you like to see? Type 0 to end. ";
i = input(prompt);
if or(i<=0,MaxVar<i)
disp ("-------------End-------------")
break
end
y = eval(sprintf('Sheet1.Variable%i',i));
clf
plot(t,y,'k'); %plot graph
hold on;
pause(3);
%what follows is me trying to plot the derivative
syms x;
dy=diff(y,tdoubint);
plot(t,dy,'b');
%naming graph
graphname="Variable %d Derivative";
str2=sprintf(graphname,i);
title (str2);
%
disp("Creating Divisions...")
for m=1:numRows
dividename=Sheet2.ID{m};
dividetime = hours(Sheet2.Time(m) * 24);
dividetime.Format = 'hh:mm:ss.SSS';
if isnan(Sheet2.Duration(m)) == 1;
xline(dividetime,'g',{dividename});
elseif mod(m,2) == 1
xline(dividetime,'r',{dividename});
else
xline(dividetime,'b',{dividename});
end
end
%}
disp("Done")
%end
  2 comentarios
Torsten
Torsten el 10 de Jun. de 2025
We don't have your data - so we cannot run your code.
I suggest plotting the inputs to "diff" and "cumtrapz" just before you call the functions for differentiation and integration.
There is no need to define symbolic variables to use these functions.
Walter Roberson
Walter Roberson el 10 de Jun. de 2025
y = eval(sprintf('Sheet1.Variable%i',i));
Instead of using eval, you can use
y = Sheet1.("Variable" + i));

Iniciar sesión para comentar.

Respuestas (0)

Categorías

Más información sobre 2-D and 3-D Plots en Help Center y File Exchange.

Productos


Versión

R2024b

Community Treasure Hunt

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

Start Hunting!

Translated by