我有以下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 的图上,似乎衍生物的符号错误。
为什么?如果我交换标志,那么我会得到我期望的结果。
答案 0 :(得分:0)
您正在使用f(x-1) - f(x+1)
计算衍生工具,因此可以预期符号更改。
我建议gradient
进行数值区分。
plot(x,y)
对于可视化功能更有用,而不是imagesc
。
关于你的代码,我有点困惑。
y
是一维矢量,但您似乎试图通过circshift(phi(:,:), [-1, +1])
在两个维度上移动它。第一个移位维度无关紧要,因为y
只有一行。这意味着您计算三次相同的内容,但是按4.0
,1.0
和1.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)
。