i have x and y which are matrices
i perform operations to get U which is a coulmn vector how do i plot it agaisnt x,y which are matices. the erro i get is that z must be a matrix not scalor or vector
x=-(ngrid/2:ngrid/2-1)*0.2
[X,Y] = meshgrid(x,x)
u%outputs coulmn vectors
my output U from my workspace is a coulu vector of 1x2001

7 件のコメント

Cris LaPierre
Cris LaPierre 2021 年 5 月 28 日
How does U relate to x and y?
Tlotlo Oepeng
Tlotlo Oepeng 2021 年 5 月 28 日
編集済み: Tlotlo Oepeng 2021 年 5 月 28 日
u is a wave travelling on the xy plane, after a series of analytical computations i get an output coordnatres of u
Walter Roberson
Walter Roberson 2021 年 5 月 28 日
u is complex-valued . If you plot real(u) against imag(u) it will fill an ellipse that has a ratio of about 10 : 6.4
In order to plot in three dimensions, you would need to be able to relate individual X and Y values to individual uCopy values.
Tlotlo Oepeng
Tlotlo Oepeng 2021 年 5 月 28 日
ussually we use mesh(x,y,abs(U).^2) to plot in this case it gives error
'U must be matrix"
Tlotlo Oepeng
Tlotlo Oepeng 2021 年 5 月 28 日
heres the code
%% -- Initialize variabels --
delta = 0.4; % linear-loss coefficient
epsilon = 2.2; % cubic-gain coefficient
mu = 1; % quintic-loss parameter
v = 0.1; % accounts for the quintic self-defocusing quantic nonlinearity
beta = 0.5; % diffussivity term
D = 1; % group-velocity dispersion
gamma = 0; % accounts for the dispersion of the linear loss...
%% -- Define of Parameters --
ngrid = 2001; % number of grid
dt = 0.1; % change of time t
tmax = 200; % the maximum of time t
dx = 0.2; % step size in x
dy = 0.2; % step size in y
L = 50; % lenght of logitudinal space
ind = (-ngrid/2:ngrid/2-1); % Indices
t = 0:dt:tmax; % temporal Grid
kt = (2*pi/tmax)*[(0:ngrid/2) (-ngrid/2:-1)]; % temporal Grid in new domain using fftshift(so that wavw numbers correspond to
%variables..)
x = ind*dx; % Grid point along x
y = ind*dy; % Grid point along y
kx = (2*pi/L)*[(0:ngrid/2) (-ngrid/2:-1)]; % Grid point along x in new domain using fft
ky = (2*pi/L)*[(0:ngrid/2) (-ngrid/2:-1)];
[X,Y] = meshgrid(x,x)% Grid point along y in new domain using fft
%% -- ansatz--
U = exp(-0.5.*x.^2-0.5.*y.^2-0.5.*t.^2);
%% -- Function Handles for RK4 Scheme--
fU = @(U,z) (-delta+(i+epsilon).*(abs(U).^2).*U+(mu-i*v).*(abs(U).^4).*U);
%% -- Initial Conditions --
z(1) = 0;
%% -- Step Size --
dz = 0.1; % change of z
h = dz/2; % step size in z
zfinal = 100; % final of z
%% -- Update Loop --
for i = 1:ceil(zfinal/h)
% update time
z(i+1) = z(i) + h;
% update R & J
k1 = fU( z(i) , U(i) ); % first slope
k2 = fU( z(i)+h/2 , U(i)+h/2*k1 ); % second slope
k3 = fU( z(i)+h/2 , U(i)+h/2*k2 ); % third slope
k4 = fU( z(i)+h , U(i)+h*k3 ); % fourth slope
U(i+1) = U(i) + h/6*(k1+2*k2+2*k3+k4);
end
%% -- Fourier Transform --
for z=1:zfinal
u = U;
c = fftshift(fft(u)); % apply Fourier transform
c = exp(-h*((0.5*i+beta)*(kx.^2+ky.^2)+(0.5*i*D-gamma)*kt.^2)).*c; % multiply by e^D
u = ifft(fftshift(c)); % inverse Fourier
end
%% -- Plot --
figure (1);
mesh (x,y,abs(u').^2);
Walter Roberson
Walter Roberson 2021 年 5 月 28 日
U = exp(-0.5.*x.^2-0.5.*y.^2-0.5.*t.^2);
You need to rewrite U in terms of X and Y instead of x and y . But X and Y are 2D and probably not the same size as t, so you would need to reshape t into the third dimension, or
[X, Y, T] = meshgrid(x, x, t);
U = exp(-0.5.*X.^2-0.5.*Y.^2-0.5.*T.^2);
But now U will be 3D and you need to summarize it down to 2D in order to use a surface plot.
k1 = fU( z(i) , U(i) ); % first slope
That whole section would need to be rewritten in terms of U being 3D.
Tlotlo Oepeng
Tlotlo Oepeng 2021 年 5 月 29 日
thank you ill try to di that
how do i accept answer?

サインインしてコメントする。

 採用された回答

Walter Roberson
Walter Roberson 2021 年 5 月 29 日

0 投票

[Copied from comment]
U = exp(-0.5.*x.^2-0.5.*y.^2-0.5.*t.^2);
You need to rewrite U in terms of X and Y instead of x and y . But X and Y are 2D and probably not the same size as t, so you would need to reshape t into the third dimension, or
[X, Y, T] = meshgrid(x, x, t);
U = exp(-0.5.*X.^2-0.5.*Y.^2-0.5.*T.^2);
But now U will be 3D and you need to summarize it down to 2D in order to use a surface plot.
k1 = fU( z(i) , U(i) ); % first slope
That whole section would need to be rewritten in terms of U being 3D.

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeData Distribution Plots についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by