为什么两个地块不相同
Why two plots are not identical
我正在尝试在 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)');
我发现这些图中存在幅度差异。为什么两个图不一样?
函数 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')
我正在尝试在 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)');
我发现这些图中存在幅度差异。为什么两个图不一样?
函数 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')