Question: Please code in C language starter code is: #include #include #include //TODO //Implement the below function //Simulate one particle moving n steps in random directions
Please code in C language starter code is:
#include
#include
#include
//TODO
//Implement the below function
//Simulate one particle moving n steps in random directions
//Use a random number generator to decide which way to go at every step
//When the particle stops at a final location, use the memory pointed to by grid to
//record the number of particles that stop at this final location
//Feel free to declare, implement and use other functions when needed
void one_particle(int *grid, int n)
{
}
//TODO
//Implement the following function
//This function returns the fraction of particles that lie within the distance
//r*n from the origin (including particles exactly r*n away)
//The distance used here is Euclidean distance
//Note: you will not have access to math.h when submitting on Mimir
double density(int *grid, int n, double r)
{
}
//use this function to print results
void print_result(int *grid, int n)
{
printf("radius density ");
for(int k = 1; k
{
printf("%.2lf %lf ", 0.05*k, density(grid, n, 0.05*k));
}
}
//TODO
//Finish the following function
//See the assignment decription on Piazza for more details
void diffusion(int n, int m)
{
//fill in a few line of code below
for(int i = 1; i
print_result(grid, n);
//fill in some code below
}
int main(int argc, char *argv[])
{
if(argc != 3)
{
printf("Usage: %s n m ", argv[0]);
return 0;
}
int n = atoi(argv[1]);
int m = atoi(argv[2]);
assert(n >= 1 && n
assert(m >= 1 && m
srand(12345);
diffusion(n, m);
return 0;
}

Exercise 1. (50 points) Diffusion In this exercise, we use a 3D random walk to simulate a diffusion process. Imagine a particle starting at the origin (0,0,0) that has equal probabilities to go in 6 possible directions - left, right, backward, forward, down, and up. For example, when the particle is at (x,y,z), with equal probability 1/6, its next location is at (x1,y,z),(x+1,y,z),(x,y1,z),(x,y+1,z),(x,y,z1) or (x,y,z+1). The particle will conduct the random walk for n steps. We are interested in the distribution of the final locations of particles after each takes n steps. Specifically, we would like to know the distribution of the distance between the final location and the origin. In order to obtain this distribution, we simulate m such particles, and check the proportion of the particles that lies within rn distance from the origin, where r is a real number between 0 and 1 . Note all the particles will be within a sphere with radius n since particles only move n steps and the furthest they can go is a distance n from the origin. In our simulation, we will calculate the proportion of particles that are within rn from the origin for r=0.05,0.10,0.15,,0.90,0.95,1.00. Below is the main() function for this program. Note how we use command line arguments. We need to implement the function void diffusion(int n, int m ) \{ \} In this function, we need to dynamically allocate memory to represent a 3D grid where x,y,z coordinates range from n to n. For all the possible x,y,z coordinates within the range, we save the number of particles that end up at the location (x,y,z). During the simulation, if the final location of a particle is (x,y,z), the corresponding value will be incremented by 1 . Generate a random number using rand() \% 6. If this number is 0 or 1 , you should move left or right on the x-axis, respectively. If it is 2 or 3 , you should move up or down on the y-axis, respectively. If it is 4 or 5 , move up or down on the z-axis, respectively. In the implementation of main, we use the below function to print out results
Step by Step Solution
There are 3 Steps involved in it
Get step-by-step solutions from verified subject matter experts
