I am given data t=[0 1 2 3 4 5] and y(t)=[1 2.7 5.8 6.6 7.5 9.9] and have to evaluate the derivative of y at each given t value using the following finite difference schemes.
(y(t+h)−y(t−h))/2h =y′(t)+O(h^2)
(−y(t+2h)+4y(t+h)−3y(t))/2h =y′(t)+O(h^2)
(y(t−2h)−4y(t−h)+3y(t))/2h =y′(t)+O(h^2)
I started the code, but I haven't learned what to do in the second order case. This what I have so far for the first given equation:
t= 0: 1: 5;
y(t)= [1 2.7 5.8 6.6 7.5 9.9];
n=length(y);
dfdx=zeros(n,1);
dfdx(t)=(y(2)-y(1))/(t(2)-t(1));
for i=2:n-1
dfdx(1)=(y(i+1)-y(i-1))/(t(i+1)-t(i-1));
end
dfdx(n)=(y(n)-y(n-1))/(t(n)-t(n-1));
the error that returns is "Subscript indices must either be real positive integers or logicals." referencing my use of y(t). How do I fix this to make my code correct?

 Akzeptierte Antwort

Chad Greene
Chad Greene am 21 Feb. 2017

0 Stimmen

There's no need for the (t) when you define y(t). Same with dfdx. Also, make sure you change dfdx(1) in the loop to dfdx(i).
t= 0: 1: 5;
y= [1 2.7 5.8 6.6 7.5 9.9];
n=length(y);
dfdx=zeros(n,1);
dfdx=(y(2)-y(1))/(t(2)-t(1));
for i=2:n-1
dfdx(i)=(y(i+1)-y(i-1))/(t(i+1)-t(i-1));
end
dfdx(n)=(y(n)-y(n-1))/(t(n)-t(n-1));

6 Kommentare

By the way, the gradient function gives the same results.
t= 0: 1: 5;
y= [1 2.7 5.8 6.6 7.5 9.9];
plot(t,gradient(y,t))
Margaret Winding
Margaret Winding am 22 Feb. 2017
Bearbeitet: Margaret Winding am 22 Feb. 2017
Thank you very much! I learned about the gradient function but my professor does not want us to use that for this problem.
I fixed the errors you mentioned, but it now gives me the same error "Subscript indices must either be real positive integers or logicals" but for dfdx=(y(2)-y(1))/(t(2)-t(1))
I don't understand what formatting error is occurring at this point, any ideas? Thank you so much!!
Torsten
Torsten am 22 Feb. 2017
dfdx(1)=(y(2)-y(1))/(t(2)-t(1))
Best wishes
Torsten.
Chad Greene
Chad Greene am 22 Feb. 2017
Ah, yes, sorry Margaret; thanks Torsten.
Margaret Winding
Margaret Winding am 23 Feb. 2017
Chad and Torsten,
Thank you so much for your help! I was able to get the correct answer :)
alburary daniel
alburary daniel am 3 Aug. 2018
and how will be the code for using a 4-point first derivative?

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Kategorien

Mehr zu Programming finden Sie in Hilfe-Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by