Почему два участка не идентичны - PullRequest
0 голосов
/ 09 марта 2019

Я пытаюсь построить функции в 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 WRT 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 голосов
/ 11 марта 2019

Функция 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

...