How to derive/integrate plotted data?

3 Ansichten (letzte 30 Tage)
Mason
Mason am 10 Jun. 2025
Kommentiert: Walter Roberson am 10 Jun. 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 Kommentare
Torsten
Torsten am 10 Jun. 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 am 10 Jun. 2025
y = eval(sprintf('Sheet1.Variable%i',i));
Instead of using eval, you can use
y = Sheet1.("Variable" + i));

Melden Sie sich an, um zu kommentieren.

Antworten (0)

Kategorien

Mehr zu 2-D and 3-D Plots finden Sie in Help Center und File Exchange

Produkte


Version

R2024b

Community Treasure Hunt

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

Start Hunting!

Translated by