Forward, Backwawrd, Central, and Perfect Difference
7 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Bailey Smith
el 14 de Jun. de 2018
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 comentarios
Jan
el 15 de Jun. de 2018
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
el 15 de Jun. de 2018
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.
Respuesta aceptada
Ankita Bansal
el 18 de Jun. de 2018
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
0 comentarios
Más respuestas (1)
Jan
el 18 de Jun. de 2018
Editada: Jan
el 18 de Jun. de 2018
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.
0 comentarios
Ver también
Categorías
Más información sobre Logical en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!