Modify this MatLab code so that Figure 3 shows what it's supposed to.

% Input parameters
width = 5; % width of the pipe in mm
a = 0.01; % lattice constant in mm
pw = 0; % probability of waiting
num_steps = 1000000; % number of steps for histograms
num_walks = 1000000; % number of 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 number of steps
for step = 2:num_steps+1
    % Determine if walker waits or makes 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 = 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 the x-direction
figure;
n_steps = 1:num_steps;
msd_x = cumsum(msd_x) ./ (1:num_steps+1);
plot(n_stepsa, msd_xa^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 the y-direction
figure;
msd_y = cumsum(msd_y) ./ (1:num_steps+1);
plot(n_stepsa, msd_ya^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 = 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

% 6) Calculate average time per step for given diffusion constant
D_desired = 1e-7; % desired diffusion constant in cm^2/sec
t = D_desired / (a^2); % average time per step in seconds

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