【问题标题】:Why two plots are not identical为什么两个地块不相同
【发布时间】:2019-03-09 04:20:47
【问题描述】:

我正在尝试在 MATLAB 中绘制函数。在第一个图中,我编写了一个函数并使用gradient 命令绘制该函数。在第二个图中,我取了一个函数的导数,然后绘制它。但这两个地块并不完全相同。差异在哪里?

MATLAB 代码:

X=-1:.05:1;
T=-1:.05:1;
m=1+1*1i;
[x,t]=meshgrid(X,T);
r1=m.*sin(x+4.*t);
dr1=gradient(r1);
dt=gradient(t);
dr1dt=dr1./min(diff(T));
td=t(2:end);

surf(x,t,abs(dr1dt));

我已经画好了。

然后我取r1 w.r.t t 的导数,然后绘制函数。即,

X=-1:.05:1;
T=-1:.05:1;
m=1+1*1i;
[x,t]=meshgrid(X,T);
r1=4.*m.*cos(x+4.*t);

surf(x,t,abs(r1)');

我发现这些图中的幅度存在差异。为什么这两个地块不一样?

【问题讨论】:

  • 你的导数没有正确
  • @Ben,实际上是 $cos$ 而不是 $sin$。这是一个拼写错误
  • 通常您可以使用问题下方的“编辑”链接来修复此类错误。但目前其他用户的编辑处于待处理状态,因此在接受或拒绝之前,您可能无法进行更改。
  • 您是否询问连续函数的导数与使用该函数的离散版本确定的导数的近似值之间的区别?还是这里的差异真的很重要?如果您上传这两个图,可能会更容易看出我们在这里讨论的是哪种差异。
  • @Luengo,我已经上传了情节。

标签: matlab plot derivative


【解决方案1】:

函数gradient 带有一个输出参数,计算x 方向的偏导数。因此,您在代码的第一位计算的是 d/dx r1,而不是 d/dt r1。它使用两个输出参数计算 x 和 y 导数。

在第二位代码中,计算的导数被转置,导致交换 x 轴和 t 轴。

以下代码修复了这两个错误:

X=-1:.05:1;
T=-1:.05:1;
m=1+1*1i;
[x,t]=meshgrid(X,T);
r1=m.*sin(x+4.*t);

[dr1dx,dr1dt]=gradient(r1);
dr1dx=dr1dx/mean(diff(X));
dr1dt=dr1dt/mean(diff(T));

dr1dt_true=4.*m.*cos(x+4.*t);

figure
subplot(1,2,1)
surf(x,t,abs(dr1dt));
xlabel('x')
ylabel('t')
title('discrete approximation')
subplot(1,2,2)
surf(x,t,abs(dr1dt_true));
xlabel('x')
ylabel('t')
title('analytical')

【讨论】:

    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 2018-05-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多