# Manipulating a multidimensional array.

3 views (last 30 days)

Show older comments

PROBLEM: I have managed to create a multidimensional array storing eigenvectors of a hamiltonian. Now I want to manipulate the array to find the expectation value of a matrix and make a quiver plot.

EXPLANATION : I have the following Hamiltonian with . I want to find the eigenvectors for a set of values on a meshgrid and then use it to find and and then to do a quiver plot.

It can be done by solving analyticaly as well and the results are,

The above can be easily coded as follows,

kx = linspace(-0.5,0.5,15);

ky = linspace(-0.5,0.5,15);

[KX,KY] = meshgrid(kx,kx);

X = -sin(atan2(KY,KX));

Y = cos(atan2(KY,KX));

quiver(KX,KY,X,Y)

My Attempt

kx = linspace(-0.5,0.5,15);

ky = linspace(-0.5,0.5,15);

[KX,KY] = meshgrid(kx,kx);

alpha_R = 0.18851;

M = length(kx);

% SPIN MATRICES

sigma_x = [0,1;1,0]; % sigma_x

sigma_y = [0,-1j;1j,0]; %sigma_y

I = [1,0;0,1]; % Identity

%Pre-allocation

E = nan(M,M,2);

Psi = nan(M,M,2);

Psi_prime = nan(M,M,2);

for i = 1: length(kx)

for j = 1: length(ky)

kx_t = kx(i);

ky_t = ky(j);

eps_k = kx_t^2 + ky_t^2; % epsilon_k

%hamiltonian

H = eps_k * I + alpha_R * (sigma_x .* ky_t - sigma_y .* kx_t);

E(i,j,:) = eig(H);

[V,D] = eig(H);

Psi(i,j,:) = V(:,1);

end

end

Psi_prime = pagectranspose(Psi);

%%%ERROR HERE

expx = Psi_prime .* sigma_x .* Psi ;

% expy

% quiver(KX,KY,expx,expy)

I want to find the expectation value of x and y and make a quiver plot of that to get the same texture as above.

Any help or guidance would be helpful. I just am unable to visualize a multidimensional array.

Thank You.

##### 0 Comments

### Accepted Answer

Bruno Luong
on 23 Apr 2022

Edited: Bruno Luong
on 23 Apr 2022

Try this:

kx = linspace(-0.5,0.5,15);

ky = linspace(-0.5,0.5,15);

[KX,KY] = meshgrid(kx,kx);

alpha_R = 0.18851;

M = length(kx);

% SPIN MATRICES

sigma_x = [0,1;1,0]; % sigma_x

sigma_y = [0,-1j;1j,0]; %sigma_y

I = [1,0;0,1]; % Identity

%Pre-allocation

E = nan(M,M,2);

Psi = nan(2,1,M,M); % BL's change here

for i = 1: length(kx)

for j = 1: length(ky)

kx_t = kx(i);

ky_t = ky(j);

eps_k = kx_t^2 + ky_t^2; % epsilon_k

%hamiltonian

H = eps_k * I + alpha_R * (sigma_x .* ky_t - sigma_y .* kx_t);

E(i,j,:) = eig(H);

[V,D] = eig(H);

Psi(:,:,i,j) = V(:,1); % BL's change here

end

end

% Psi_prime = pagectranspose(Psi); % BL's change here

%%%NO LONGER ERROR HERE

expx = pagemtimes(pagemtimes(Psi,'ctranspose',sigma_x,'none'),Psi); % BL's change here

expx = reshape(expx,[M M]); % BL's change here

expy = pagemtimes(pagemtimes(Psi,'ctranspose',sigma_y,'none'),Psi); % BL's change here

expy = reshape(expy,[M M]); % BL's change here

% expy

quiver(KX,KY,expx,expy)

##### 5 Comments

Bruno Luong
on 24 Apr 2022

### More Answers (0)

### See Also

### Categories

### Community Treasure Hunt

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

Start Hunting!