a.) Euler Scheme

N <- 1000 # number of end - points of the grid including T
T <- 1 # length of the interval [0 ,T] in time units
dt <- T/N # time increment
r = 0.10
g = 0.30
X = 1
t <- seq (0,T,length = N+1)
for (k in 2:( N +1)) {
  dW = rnorm (N, 0, 1) * sqrt ( dt )
  X[k] = X[k-1] + r*X[k-1]*dt + g*X[k-1]*dW
}
plot (t, X,  type ="l", main =" Euler Scheme ")

b.) Heun Scheme

N <- 1000 # number of end - points of the grid including T
T <- 1 # length of the interval [0 ,T] in time units
dt <- T/N # time increment
r = 0.10
g = 0.30
XH = 1    #numeric(N+1)
t <- seq (0,T,length = N+1)
for (k in 2:( N +1)) {
  dW = rnorm (N, 0, 1) * sqrt ( dt )
  Xstar = XH[k-1] + r*XH[k-1]*dt + g*XH[k-1]*dW
  XH[k] = XH[k-1] + (1/2)*r*(Xstar+XH[k-1])*dt + (1/2)*g*(Xstar+XH[k-1])*dW
}
plot (t, XH,  type ="l", main ="Heun Scheme ")

c.) Runge-Kutta Scheme

N <- 1000 # number of end - points of the grid including T
T <- 1 # length of the interval [0 ,T] in time units
dt <- T/N # time increment
r = 0.10
g = 0.30
XR = 1
t <- seq (0,T,length = N+1)
for (k in 2:( N +1)) {
  dW = rnorm (N, 0, 1) * sqrt ( dt )
  i0 = XR[k-1]
  y0 = XR[k-1]+0.5*r*i0*dt+0.5*g*i0*dW
  i1 = y0
  y1 = XR[k-1]+0.5*r*i1*dt+0.5*g*i1*dW
  i2 = y1
  y2 = XR[k-1]+r*i2*dt+g*i2*dW
  i3 = y2
  XR[k] = XR[k-1]+r*((i0+2*i1+2*i2+i3)/6)*dt+g*((i0+2*i1+2*i2+i3)/6)*dW
  
}

plot (t, XR,  type ="l", main =" Runge-Kutta Scheme ")

d.) Combined Schemes

#plot for euler scheme
plot (t, X,  type ="l", col="green", main =" Combined Schemes ")
#second plot for heun
lines(t, XH, col="red")
#third plot for runge-kutta
lines(t, XR, col="blue")

#to add legends
legend("topright",legend=c("Euler","Huen","Runge-Kutta"),col=c("green","red","blue"),lty=c(1,2,3), cex=0.8)

References: R for Data Science: Import, Tidy, Transform, Visualize, and Model Data by Hadley Wickham & Garrett Grolemund