为什么两个地块不相同

时间:2019-03-09 04:20:47

标签: matlab plot derivative

我正在尝试在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));

我已经画好了。

plot of the first code

然后我将r1导出为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)');

plot of the secondcode

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

1 个答案:

答案 0 :(得分:0)

具有一个输出参数的函数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')

output of code above