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