Modify the MatLab code below to answer the following problem:

Using the same model except with the electric field in the y-direction, answer these questions:
1) What should the new equations for the step-probabilities be?
2) Visualize the random walk trajectories
3) In the x-direction, calculate the mean squared displacement as a function of number of steps.
4) In the y-direction, calculate the mean squared displacement as a function of number of steps.
5) For 1,000,000 walks, plot the histogram of locations of the random walker in the x-direction
after 100, 1000, 10000, 100000, 1000000 steps.
6) For 1,000,000 walks, plot the histogram of locations of the random walker in the y-direction
after 100, 1000, 10000, 100000, 1000000 steps.





%% RANDOM WALKS, BROWNIAN MOTION, AND DIFFUSION


% ————————— parameters
width = 5;                                           % width of pipe in mm
a = 0.01;                                         % lattice constant in mm
pw = 0;                                           % probability of waiting
num_steps = 1000000;                              % # steps for histograms
num_walks = 1000000;                       % # random walks for histograms

% ————————— calculate lattice size based on width
lattice_size = round(width/a);

% ————————— parameterize the step probabilities
A = 0.5;                               % electric field strength parameter
ph = 1/2*(1+A^2);
pv = 1 - ph;
pu = pv/2;
pd = pv/2;
pL = (ph/2)*(1-A);
pR = (ph/2)*(1+A);

% ————————— initialize random walker position
x = 0;
y = lattice_size/2;

% ————————— initialize mean squared displacement variables
msd_x = zeros(1,num_steps);
msd_y = zeros(1,num_steps);

% ————————— loop over the # of steps
for step = 2:num_steps+1
%           choice: does walker wait or make a step?
            if rand<=pw
%           walker waits
            continue;
            else
%           walker makes a step
%           calculate the step direction
            dx = zeros(1,2);
            dy = zeros(1,2);
            dx(rand<=pL+0.5) = -1;
            dx(rand<=pR+(pL/2)) = 1;
            dy(rand<=pu+0.5) = -1;
            dy(rand<=pd+(pu/2)) = 1;
%           update walker position
            x = x+sum(dx);
            y = y+sum(dy);
%           reflect at the y-direction boundary
            if y<1
                y = 2-y;
            elseif y>lattice_size
                y = 2*lattice_size - y - 1;
            end
%           calculate mean squared displacement in each direction
            msd_x(step) = (x*a)^2;
            msd_y(step) = ((y-(lattice_size/2))*a)^2;
      end
end

% —————————— 1) visualize the random walk trajectories
figure;
plot((0:num_steps)*a, (msd_y*a), 'b.')
title('Random Walk Trajectories');
xlabel('x (mm)');
ylabel('y (mm)');
xlim([0,num_steps*a]);

% ————————— 2) mean squared displacement in x-direction
figure;
n_steps = 1:num_steps;
msd_x = cumsum(msd_x) ./ (1:num_steps+1);
plot(n_steps(1:num_steps-1)*a, msd_x(2:num_steps)*a^2, 'b')
title('Mean Squared Displacement in the x-Direction');
xlabel('Number of Steps');
ylabel('Mean Squared Displacement');
xlim([0,num_steps*a]);

% ————————— 3) mean squared displacement in y-direction
figure;
msd_y = cumsum(msd_y) ./ (1:num_steps+1);
plot(n_steps(1:num_steps)*a, msd_y(1:num_steps)*a^2, 'b')
title('Mean Squared Displacement in the y-Direction');
xlabel('Number of Steps');
ylabel('Mean Squared Displacement');
xlim([0, num_steps*a]);


% ————————— 4) histogram of locations in x-direction
figure;
for num_steps = [100,1000,10000,100000,1000000]
    x_hist = zeros(1,lattice_size+1);
    for walk = 1:num_walks
        x=0;
        for step = 1:num_steps
            dx = zeros(1,2);
            dx(rand<=pL+0.5) = -1;
            dx(rand<=pR+(pL/2)) = 1;
            x = x+sum(dx);
            if x<0
                x=0;
            elseif x>lattice_size
                x = lattice_size;
            end
        end
        x_hist(x+1) = x_hist(x+1) + 1;
    end
    subplot(2,3,find([100,1000,10000,100000,1000000] == num_steps));
    bar(0:lattice_size, x_hist / num_walks, 'b');
    title(['Histogram of x-locations after ', num2str(num_steps), ' steps']);
    xlabel('x');
    ylabel('Probability');
end

% ————————— 5) histogram of locations in y-direction
figure;
for num_steps = [100,1000,10000,100000,1000000]
    y_hist = zeros(1,lattice_size+1);
    for walk = 1:num_walks
        x = 0;
        y = lattice_size/2;
        for step = 1:num_steps
            dx = zeros(1,2);
            dy = zeros(1,2);
            dx(rand<=pL+0.5) = -1;
            dx(rand<=pR+(pL/2)) = 1;
            dy(rand<=pu+0.5) = -1;
            dy(rand<=pd+(pu/2)) = 1;
            x = x+sum(dx);
            y = y+sum(dy);
            if y<1
                y = 2-y;
            elseif y>lattice_size
                y = 2*lattice_size - y - 1;
            end
        end
        y_hist(y+1) = y_hist(y+1) + 1;
    end
    subplot(2,3,find([100,1000,10000, 100000,1000000]==num_steps));
    bar(0:lattice_size, y_hist / num_walks, 'b');
    title(['Histogram of y-locations after ', num2str(num_steps), ' steps']);
    xlabel('y');
    ylabel('Probability');
end








%% RANDOM WALKTS, BROWNIAN MOTION, AND DIFFUSION


% ————————— parameters
width = 5; % width of pipe in mm
a = 0.01; % lattice constant in mm
pw = 0; % probability of waiting
num_steps = 1000000; % # steps for histograms
num_walks = 1000000; % # random walks for histograms

% ————————— calculate lattice size based on width
lattice_size = round(width/a);

% ————————— initialize random walker position
x = 0;
y = lattice_size/2;

% ————————— initialize mean squared displacement variables
msd_x = zeros(1,num_steps);
msd_y = zeros(1,num_steps);

% ————————— loop over the # of steps
for step = 2:num_steps+1
% choice: does walker wait or make a step?
if rand<=pw
% walker waits
continue;
else
% walker makes a step
% calculate the step direction
dx = randi([-1,1]);
dy = randi([-1,1]);
% update walker position
x = x+dx;
y = y+dy;
% reflect at the y-direction boundary
if y<1
y = 2-y;
elseif y>lattice_size
y = 2lattice_size - y - 1;
end
% calculate mean squared displacement in each direction
msd_x(step) = (xa)^2;
msd_y(step) = ((y-(lattice_size/2))a)^2;
end
end

% —————————— 1) visualize the random walk trajectories
figure;
plot((0:num_steps)a, (msd_ya), ‘b.’)
title(‘Random Walk Trajectories’);
xlabel(‘x (mm)’);
ylabel(‘y (mm)’);
xlim([0,num_stepsa]);

% ————————— 2) mean squared displacement in x-direction
figure;
n_steps = 1:num_steps;
msd_x = cumsum(msd_x) ./ (1:num_steps+1);
plot(n_steps(1:num_steps-1)a, msd_x(2:num_steps)a^2, ‘b’)
title(‘Mean Squared Displacement in the x-Direction’);
xlabel(‘Number of Steps’);
ylabel(‘Mean Squared Displacement’);
xlim([0,num_stepsa]);

% ————————— 3) mean squared displacement in y-direction
figure;
msd_y = cumsum(msd_y) ./ (1:num_steps+1);
plot(n_steps(1:num_steps)a, msd_y(1:num_steps)a^2, ‘b’)
title(‘Mean Squared Displacement in the y-Direction’);
xlabel(‘Number of Steps’);
ylabel(‘Mean Squared Displacement’);
xlim([0, num_stepsa]);

% ————————— 4) histogram of locations in x-direction
figure;
for num_steps = [100,1000,10000,100000,1000000]
x_hist = zeros(1,lattice_size+1);
for walk = 1:num_walks
x=0;
for step = 1:num_steps
dx = randi([-1,1]);
x = x+dx;
if x<0
x=0;
elseif x>lattice_size
x = lattice_size;
end
end
x_hist(x+1) = x_hist(x+1) + 1;
end
subplot(2,3,find([100,1000,10000,100000,1000000] == num_steps));
bar(0:lattice_size, x_hist / num_walks, ‘b’);
title(['Histogram of x-locations after ‘, num2str(num_steps), ’ steps’]);
xlabel(‘x’);
ylabel(‘Probability’);
end

% ————————— 5) histogram of locations in y-direction
figure;
for num_steps = [100,1000,10000,100000,1000000]
y_hist = zeros(1,lattice_size+1);
for walk = 1:num_walks
x = 0;
y = lattice_size/2;
for step = 1:num_steps
dx = randi([-1,1]);
dy = randi([-1,1]);
x = x+dx;
y = y+dy;
if y<1
y = 2-y;
elseif y>lattice_size
y = 2lattice_size - y - 1;
end
end
y_hist(y+1) = y_hist(y+1) + 1;
end
subplot(2,3,find([100,1000,10000,100000,1000000] == num_steps));
bar(0:lattice_size, y_hist / num_walks, ‘b’);
title(['Histogram of y-locations after ‘, num2str(num_steps), ’ steps’]);
xlabel(‘y’);
ylabel(‘Probability’);
end

% ————————— 6) calculate avg time per step for given diffusion constant
D_desired = 1e-7; % desired diffusion constant in cm^2/sec
t = D_desired / (a^2); % avg time per step in sec
% substitude the values, t = (10^-7) / (.01^2) = 10^-3
% so the average time per step (t) should be 10^-3 seconds

% ————————— 7) calculate diffusion constant in the x-direction
figure;
diffusion_x = gradient(msd_xa^2) / (2t);
plot(n_stepsa, diffusion_x);
title(‘Diffusion Constant in the x-Direction’);
xlabel(‘Time (mm)’);
ylabel(‘Diffusion Constant’);
xlim([0, num_steps*a]);