Forward, Backwawrd, Central, and Perfect Difference

Could someone please explain how to use the differences, especially with vectors? I would like to make a chart of the values of the four differences types, along with the corresponding x value. Say x=[0:0.2:0.6], y=sin(x), and yperfect=cos(x), how would I go about this?
UPDATE: This is the code I have to take the forward difference (first order).
function [out] = forwarddiff(x,y)
n=1;
L=length(x);
while n < L
out(n,1)=x(n);
out(n,2)=(y(n+1)-y(n))/(x(n+1)-x(n));
n=n+1;
end
out(L,1)=x(L);
out(L,2)=NaN;
end
X and Y values can be input by the user. My new question is: Would the second order forward difference look something like this?
function [out] = forwarddiff(x,y)
n=1;
L=length(x);
while n < L
out(n,1)=x(n);
out(n,2)=(y(n+2)-2*y(n+1)+y(n))/(x(n+1)-x(n))^2;
n=n+1;
end
out(L,1)=x(L);
out(L,2)=NaN;
end
I get an error about exceeding matrix dimensions when I run this.

3 件のコメント

John D'Errico
John D'Errico 2018 年 6 月 15 日
Why not try something, then ask for help when you get stuck? Show what you did. Make an effort.
Jan
Jan 2018 年 6 月 15 日
I agree with John. Please try it, post the code and ask a specific question. It is unlikely that the forum will do your work in exactly the way you need it.
Is this your homework?
Bailey Smith
Bailey Smith 2018 年 6 月 15 日
An old homework, but no Matlab required. I've been wanting to take my old homeworks and code them into Matlab so that I can better understand the program before I take any advanced computing class. If I have time, I will try to get a code posted tonight or tomorrow.

サインインしてコメントする。

 採用された回答

Ankita Bansal
Ankita Bansal 2018 年 6 月 18 日

0 投票

Hi, in line
out(n,2)=(y(n+2)-2*y(n+1)+y(n))/(x(n+1)-x(n))^2;
you are getting error because you are trying to access y(n+2) at n=L-1.
Change your code to
function [out] = forwarddiff(x,y)
n=1;
L=length(x);
while n < L-1
out(n,1)=x(n);
out(n,2)=(y(n+2)-2*y(n+1)+y(n))/(x(n+1)-x(n))^2;
n=n+1;
end
out(L-1,1)=x(L-1);
out(L-1,2)=NaN;
end

その他の回答 (1 件)

Jan
Jan 2018 年 6 月 18 日
編集済み: Jan 2018 年 6 月 18 日

0 投票

A shorter form of your 1st order forward difference:
function [out] = forwarddiff(x,y)
x = x(:); % Consider row vectors
y = y(:);
dy = (y(2:end) - y(1:end-1)) / (x(2:end) - x(1:end-1));
out = [x, [dy; NaN]];
end
If you really want to do this with a loop, care for a pre-allocation. Letting the output grow iteratively wastes a lot of resources.
See also the diff command and gradient.

カテゴリ

質問済み:

2018 年 6 月 14 日

編集済み:

Jan
2018 年 6 月 18 日

Community Treasure Hunt

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

Start Hunting!

Translated by