离散的函数导数

时间:2015-04-08 15:51:47

标签: matlab calculus derivative

我有以下MWE计算沿y方向的函数的导数:

x=1:50;
y=x;

phi = sin((x-10)/10);



dyPhi = (4.0*(circshift(phi(:,:), [+0, +1]) - circshift(phi(:,:), [+0, -1])) + ...
         1.0*(circshift(phi(:,:), [+1, +1]) - circshift(phi(:,:), [-1, -1])) + ...
         1.0*(circshift(phi(:,:), [-1, +1]) - circshift(phi(:,:), [+1, -1])))/12.0;

figure(1)
imagesc(phi)
colorbar

figure(2)
imagesc(dyPhi)
colorbar

但是,请看两个图:在 dyPhi 的图上,似乎衍生物的符号错误。

为什么?如果我交换标志,那么我会得到我期望的结果。

1 个答案:

答案 0 :(得分:0)

您正在使用f(x-1) - f(x+1)计算衍生工具,因此可以预期符号更改。

我建议gradient进行数值区分。

plot(x,y)对于可视化功能更有用,而不是imagesc


关于你的代码,我有点困惑。

y是一维矢量,但您似乎试图通过circshift(phi(:,:), [-1, +1])在两个维度上移动它。第一个移位维度无关紧要,因为y只有一行。这意味着您计算三次相同的内容,但是按4.01.01.0缩放每个结果。

正如我所提到的,circshift(phi,[0,1]) - circshift(phi,[0,-1])实际上正在计算f(x-1) - f(x+1)circshift(phi,[0,1])会将每个值f(x)替换为其过去值f(x-1),因为转移位于右侧。同样,使用circshift(phi,[0,-1])的左移代替f(x)f(x+1)