Advertisement
Guest User

Untitled

a guest
May 11th, 2017
111
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Julia 1.15 KB | None | 0 0
  1. using Interpolations
  2. using Plots
  3.  
  4. # Parameters
  5. T = 10.;
  6. β = 0.02;
  7. bᵐᵃˣ = 0.07;
  8. σ = 0.3;
  9. κ = 0.25;
  10. γ = 3.;
  11. m = 0.;
  12. λ = 1.;
  13. c = 0.1;
  14.  
  15. # Meshing parameter
  16. ρ⁻¹ = 2;
  17.  
  18. # Timesteps
  19. P = 32 * ρ⁻¹;
  20. dt = T/P;
  21.  
  22. # Spatial grid (2M+1 nodes)
  23. xᵐᵃˣ = 1;
  24. M = 8 * ρ⁻¹;
  25. x = -xᵐᵃˣ:(1/M):xᵐᵃˣ;
  26.  
  27. # Control grid (2M₀+1 nodes)
  28. M₀ = 2 * ρ⁻¹;
  29. Bρ = -bᵐᵃˣ:(bᵐᵃˣ/M₀):bᵐᵃˣ;
  30.  
  31. # Normal random variables
  32. C = 10^3 * (ρ⁻¹)^2;
  33. ψ = randn(C);
  34. ϕ = [ψ;]
  35.  
  36. # Solution and buffer
  37. uⁿ = SharedArray(Float64, length(x))
  38. u = zeros(length(x));
  39.  
  40. tic();
  41. for n = (P - 1):-1:0
  42.     discount = exp(* n * dt);
  43.     interp = interpolate((x,), u, Gridded(Linear()));
  44.     @sync @parallel for j = 1:length(x)
  45.         uⁿ[j] = maximum(u - discount * (λ * abs(x - x[j]) + c));
  46.         for b = Bρ
  47.             X = x[j] - κ * b * dt + σ * ϕ * √dt;
  48.             X = max(min(X, xᵐᵃˣ), -xᵐᵃˣ);
  49.             f = -discount * ((x[j] - m)^2 + γ * b^2);
  50.             uⁿ[j] = max(uⁿ[j], mean(interp[X]) + f * dt);
  51.         end
  52.     end
  53.     u = copy(uⁿ);
  54. end
  55. toc();
  56.  
  57. # Solution
  58. interp = interpolate((x,), u, Gridded(Linear()));
  59. println("u(t=0,x=0) = $(interp[m])");
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement