plotting a derivative of a function using surf command

1 Ansicht (letzte 30 Tage)
Wajahat
Wajahat am 8 Mär. 2019
Bearbeitet: Wajahat am 9 Mär. 2019
I am trying to plot a derivative of a function using surf command, but when I evaluate it an error occur "Data dimensions must agree".
This is what I typed:
close all;
X=-10:.1:10;
T=-10:.1:10;
mu1=-.01+1*1i;
a=(.1-2*1i);
b=(.1-.1*1i);
[x,t]=meshgrid(X,T);
x1=exp(-1i*mu1.*x).*exp((1-(1i./(2*mu1)).*t));
x2=exp(1i*mu1.*x).*exp((1+(1i./(2*mu1)).*t));
y1=exp(-1i*mu1.*x).*exp((1+(1i./(2*mu1)).*t));
y2=exp(1i*mu1.*x).*exp((1-(1i./(2*mu1)).*t));
A=2*1i*(1)*a*conj(b)*x1.*conj(x2).*(x2.*conj(y1)-y2.*conj(x1));
B=(a.*conj(a).*x1.*conj(x1).*y2.*conj(y2)+b.*conj(b).*x1.*conj(y1).*x2.*conj(y2)+a.*conj(a).*x2.*conj(x2).*y1.*conj(y1)+b.*conj(b).*y1.*conj(x2).*y2.*conj(x1));
r1=-2.*1i.*((A./B));
dr1=diff(r1);
dt=diff(t);
dr1dt=dr1./dt;
td=t(2:end);
surf(x,td,abs(dr1dt));
  1 Kommentar
KSSV
KSSV am 8 Mär. 2019
X=-10:.1:10;
T=-10:.1:10;
mu1=-.01+1*1i;
a=(.1-2*1i);
b=(.1-.1*1i);
[x,t]=meshgrid(X,T);
x1=exp(-1i*mu1.*x).*exp((1-(1i./(2*mu1)).*t));
x2=exp(1i*mu1.*x).*exp((1+(1i./(2*mu1)).*t));
y1=exp(-1i*mu1.*x).*exp((1+(1i./(2*mu1)).*t));
y2=exp(1i*mu1.*x).*exp((1-(1i./(2*mu1)).*t));
A=2*1i*(1)*a*conj(b)*x1.*conj(x2).*(x2.*conj(y1)-y2.*conj(x1));
B=(a.*conj(a).*x1.*conj(x1).*y2.*conj(y2)+b.*conj(b).*x1.*conj(y1).*x2.*conj(y2)+a.*conj(a).*x2.*conj(x2).*y1.*conj(y1)+b.*conj(b).*y1.*conj(x2).*y2.*conj(x1));
r1=-2.*1i.*((A./B));
dr1=gradient(r1);
dt=gradient(t);
dr1dt=dr1./dt;
td=t(2:end);
surf(x,t,abs(dr1dt)');
But you need re think on your code.

Melden Sie sich an, um zu kommentieren.

Antworten (1)

KSSV
KSSV am 8 Mär. 2019
X=-10:.1:10;
T=-10:.1:10;
mu1=-.01+1*1i;
a=(.1-2*1i);
b=(.1-.1*1i);
[x,t]=meshgrid(X,T);
x1=exp(-1i*mu1.*x).*exp((1-(1i./(2*mu1)).*t));
x2=exp(1i*mu1.*x).*exp((1+(1i./(2*mu1)).*t));
y1=exp(-1i*mu1.*x).*exp((1+(1i./(2*mu1)).*t));
y2=exp(1i*mu1.*x).*exp((1-(1i./(2*mu1)).*t));
A=2*1i*(1)*a*conj(b)*x1.*conj(x2).*(x2.*conj(y1)-y2.*conj(x1));
B=(a.*conj(a).*x1.*conj(x1).*y2.*conj(y2)+b.*conj(b).*x1.*conj(y1).*x2.*conj(y2)+a.*conj(a).*x2.*conj(x2).*y1.*conj(y1)+b.*conj(b).*y1.*conj(x2).*y2.*conj(x1));
r1=-2.*1i.*((A./B));
dr1=gradient(r1);
dt=gradient(t);
dr1dt=dr1./min(diff(T));
td=t(2:end);
surf(x,t,abs(dr1dt)');
To get dt you can use difference in T. You need not to take a matrix. ANote that dt is same i.e 0.01. If you use a matrix..it is coming out to be zero matrix and makes dr1dt a nan or inf matrix. I advice you to still rethink on your code.
  5 Kommentare
KSSV
KSSV am 8 Mär. 2019
diff reduces the dimension by one....ad you are subtracting the consecutive elements. Gradient will not reduce the dimensions.
Wajahat
Wajahat am 8 Mär. 2019
Bearbeitet: Wajahat am 9 Mär. 2019
@ KSSV,
To verify, I considered a simple example such as
X=-1:.05:1;
T=-1:.05:1;
mu1=1+1*1i;
[x,t]=meshgrid(X,T);
r1=mu1.*sin(x+4.*t);
dr1=gradient(r1);
dt=gradient(t);
dr1dt=dr1./min(diff(T));
td=t(2:end);
surf(x,t,abs(dr1dt));
I have plotted it.
Then I take the derivative of 'r1' w.r.t 't' and then plot the function. i..e,
X=-1:.05:1;
T=-1:.05:1;
mu1=1+1*1i;
[x,t]=meshgrid(X,T);
r1=4.*mu1.*cos(x+4.*t);
surf(x,t,abs(r1)');
You can see there is difference of amplitude in these plots. Why the two plots are not identical?

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by