【问题标题】:discrete derivative of function函数的离散导数
【发布时间】:2015-04-08 15:51:47
【问题描述】:

我有以下 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 的图上,似乎导数的符号错误。

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

【问题讨论】:

  • 你到底为什么使用circshift?还有更通用的数值微分方法,或者,如果您只使用sin & cos,您可以简单地通过添加pi/2“微分”。

标签: matlab calculus derivative


【解决方案1】:

您正在使用f(x-1) - f(x+1) 计算导数,因此可以预期符号会发生变化。

我会推荐 gradient 进行数值区分。

plot(x,y) 在可视化函数方面也比imagesc 更有用。


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

y 是一维向量,但您似乎通过尝试使用circshift(phi(:,:), [-1, +1]) 在二维中移动它。第一个移位维度无关紧要,因为y 只有一行。这意味着您要计算同样的东西 3 次,但将每个结果按 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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-13
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 2012-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多