Manipulating a multidimensional array.
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.
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.
Accepted Answer
More Answers (0)
Categories
Find more on Programming in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!