MATLAB Answers

trying to calculate the central diff approximation

4 views (last 30 days)
Ahmed Issa
Ahmed Issa on 10 Feb 2020
Commented: Jim Riggs on 10 Feb 2020
i tried multiple ways but none of them worked. kind of stuck and not sure what to do. what i'm trying to do is find current value that is equal to one ahead minus one below all divided by .2
code is:
Phase_1 = DATA(DATA(:,4)==1,:);
Vroll_avg1_1 = movsum((1/5).*Phase_1(:,3),[2 2]);
Vdi_1 = movsum(1/5.*Vroll_avg1_1,[2 2]);
---> first try: Adi_1 = [Vdi_1(2:Vdi_1+1,:)-Vdi_1(1:Vdi_1-1,:)/(2*T)];
---> second try: Adi_1 = ((Vdi_1(2:end+1) - Vdi_1(1:end-1))/(2*T)); % error says index exceeds array bounds. i understand why but how((2:end+1)) would i get it to work?
---> third try: %K = length(Vdi_1);
%Q = length(Vti_1);
%for M = 2:(length(Vdi_1)-1)
% Adi_1 = ((Vdi_1 - Vdi_1)./(2.*T));
%Adi_1 = (Vdi_1(2) - Vdi_1(1))./(2.*T);
%Adi_1(length(Vdi_1)) = (Vdi_1(K) - Vdi_1(K))./(2.*T);
really need help, please try to help me figure this out.


Sign in to comment.

Accepted Answer

Jim Riggs
Jim Riggs on 10 Feb 2020
Edited: Jim Riggs on 10 Feb 2020
There is a Matlab function "diff" which will do this.
Otherwise, your subscripts must all match (2:end-1)
Adi_1 = diff(Vdi_1);
for i=2:numel(Vdi_1)-1
Adi_1(i) = (Vdi_1(i+1) - Vdi_1(i-1))/2/T;


Show 8 older comments
Jim Riggs
Jim Riggs on 10 Feb 2020
This does not make sense.
Type the following command and post the result:
whos Vdi_1 Vti_1 T Adi_1 Ati_1
Ahmed Issa
Ahmed Issa on 10 Feb 2020
im so sorry jim, just got it to work. forsome reason i had one of the numel as nume1 with the #1. got it to work, thanks!

Sign in to comment.

More Answers (0)


Translated by