Guest User

Untitled

a guest
May 14th, 2021
138
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Julia 5.80 KB | None | 0 0
  1. ### A Pluto.jl notebook ###
  2. # v0.14.5
  3.  
  4. using Markdown
  5. using InteractiveUtils
  6.  
  7. # ╔═╡ 3abce27e-5e75-4a74-982d-64423205486d
  8. begin
  9.     using Pkg
  10.     Pkg.add("DifferentialEquations")
  11.     using DifferentialEquations
  12.     Pkg.add("Plots")
  13.     using Plots
  14.     Pkg.add("ForwardDiff")
  15.     using ForwardDiff
  16. end
  17.  
  18. # ╔═╡ 8a074dac-dfc8-4e0c-bb8c-9324b23623e8
  19. function  lotka_voltera(u,p,t)
  20.     N₁, N₂ = u
  21.     ϵ₁, ϵ₂, γ₁, γ₂ = p
  22.     return  [N₁*ϵ₁ - γ₁*N₁*N₂, -N₂*ϵ₂ + γ₂*N₁*N₂]
  23. end
  24.  
  25. # ╔═╡ 8249c704-8f85-4630-983a-e7c6375fa4b2
  26. u₀ = [1.,1.];
  27.  
  28. # ╔═╡ 1b11b472-83c2-4d23-ba60-aceacb1bb034
  29. p = [3.,1.,0.5,0.4];
  30.  
  31. # ╔═╡ b29054e6-198e-438b-8657-4383a9c141fa
  32. t =(0., 3.)
  33.  
  34. # ╔═╡ 2d11e521-73ab-4537-87af-182ac56aa9a0
  35. prob = ODEProblem(lotka_voltera, u₀, t, p)
  36.  
  37. # ╔═╡ 9dc8c40c-7aaf-4be1-b834-2c649f9f39e5
  38. solution = solve(prob);
  39.  
  40. # ╔═╡ 20bfa96f-e752-43fd-a6b7-b1816b6c0037
  41. plot(solution)
  42.  
  43. # ╔═╡ 5aed8764-afb6-4e2d-99e3-df6f787db235
  44. md"
  45. ### This is a Lotka-Voltera Model
  46. "
  47.  
  48. # ╔═╡ 2d0c829d-78d5-454a-9990-80d1a5b563c1
  49. md"Inital sensitivity is $0$."
  50.  
  51. # ╔═╡ a9abd86b-12d4-4221-abf7-aac367287011
  52. u₀ₚ = hcat(u₀, zeros(2,4))
  53.  
  54. # ╔═╡ 446e80b4-e90a-4893-b510-c222554826b8
  55. function lotka_sensitivity(du, u, p, t)
  56.     du[:,1] = lotka_voltera(u[:,1],p,t)
  57.     N₁, N₂ = u[:,1] # ; s₁ₚ₁ s₂ₚ₁; s₁ₚ₂ s₂ₚ₂; s₁ₚ₃ s₂ₚ₃; s₁ₚ₄ s₂ₚ₄
  58.     p₁, p₂, p₃, p₄ = p
  59.    
  60.     J = [(p₁-p₂*N₂) (-p₂*N₁); (p₄*N₁) (p₄*N₂-p₃)]
  61.     du[:,2] = (J*u[:,2]) .+ [N₁, 0.]
  62.     du[:,3] = (J*u[:,3]) .+ [-N₂*N₁, 0.]
  63.     du[:,4] = (J*u[:,4]) .+ [0., -N₂]
  64.     du[:,5] = (J*u[:,5]) .+ [0., N₂*N₁]
  65. end
  66.    
  67.  
  68. # ╔═╡ a55f620c-393c-44c9-acb0-84f11839225b
  69. prob_sensitivity = ODEProblem(lotka_sensitivity, u₀ₚ, t, p)
  70.  
  71. # ╔═╡ ad7bb8c4-880a-4239-8f75-9294edde92ca
  72. solution_sensitivity = solve(prob_sensitivity);
  73.  
  74. # ╔═╡ a357fff8-b61d-442b-8b1c-1e6b1f9abe72
  75. plot(solution_sensitivity; vars=[(1),(2),(3),#=(4),=#(5),#=(6),=#(7),#=(8),(9),(10)=#])
  76.  
  77. # ╔═╡ 2cfb9c5a-cd2d-4715-bae2-3e63f9ee1dfa
  78. md"# Problem one above"
  79.  
  80. # ╔═╡ c28839d2-f21c-4c52-afe5-4c00e67843b4
  81. md"If we increase parameter 1 (the replication rate of rabits) the rate of rabits will initally increase but fall more quickly due to wolves."
  82.  
  83. # ╔═╡ af8ba9c0-253b-4937-bca3-cf50b21d671a
  84. point_of_eval = [-3.,1.]
  85.  
  86. # ╔═╡ de864650-6742-4786-886a-38380be2fea8
  87. ForwardDiff.jacobian(par->lotka_voltera(point_of_eval,par,0.0),p)
  88.  
  89. # ╔═╡ c1a3f293-da11-4e27-a8b3-71ebeb9dc1fb
  90. begin
  91.     a=zeros(2,5);
  92.     lotka_sensitivity(a,hcat(point_of_eval,zeros(2,4)), p, 0.0);
  93.     a[:,2:5]
  94. end
  95.  
  96. # ╔═╡ 7ff16d5f-1d25-4b88-9a3e-f5bd2d2a75be
  97. function vorschlag3(du,u,p,t)
  98.     du[1:2,1] = lotka_voltera(u[1:2,1],p,t)
  99.     du[1:2,2] = lotka_voltera(u[1:2,2],[2.,1.5,0.3,0.6],t)
  100.     du[3,1] = (u[1,1]-u[1,2])^2
  101.     du[3,2] = 0;
  102.     N₁, N₂ = u[1:2,1] # ; s₁ₚ₁ s₂ₚ₁; s₁ₚ₂ s₂ₚ₂; s₁ₚ₃ s₂ₚ₃; s₁ₚ₄ s₂ₚ₄
  103.     p₁, p₂, p₃, p₄ = p
  104.    
  105.    
  106.     J = [(p₁-p₂*N₂) (-p₂*N₁); (p₄*N₁) (p₄*N₂-p₃)]
  107.     du[1:2,3] = (J*u[1:2,3]) .+ [N₁, 0.]
  108.     du[1:2,4] = (J*u[1:2,4]) .+ [-N₂*N₁, 0.]
  109.     du[1:2,5] = (J*u[1:2,5]) .+ [0., -N₂]
  110.     du[1:2,6] = (J*u[1:2,6]) .+ [0., N₂*N₁]
  111.    
  112.     j = 2*(u[1,1]-u[1,2])
  113.     du[3,3] = j * u[1,3]
  114.     du[3,4] = j * u[1,4]
  115.     du[3,5] = j * u[1,5]
  116.     du[3,6] = j * u[1,6]
  117.    
  118. end
  119.  
  120. # ╔═╡ 31c04461-32d1-423c-bb89-e43a998e29f3
  121. u₀v₃ = hcat(vcat(u₀,zeros(1)),vcat(u₀,zeros(1)),zeros(3,4))
  122.  
  123. # ╔═╡ ccafe7d2-4349-4a2e-93d7-3767d534d12b
  124. prob_vorschlag3 = ODEProblem(vorschlag3, u₀v₃, t, p)
  125.  
  126. # ╔═╡ 6be8eaa6-ab14-4946-9f51-560f55a6a9ad
  127. solution_vorschlag3 = solve(prob_vorschlag3)
  128.  
  129. # ╔═╡ 939f7768-766f-4108-90f5-cd4a7be6569a
  130. solution_vorschlag3(t[2])
  131.  
  132. # ╔═╡ 78a05561-174b-4b24-86f0-37b7c250d94d
  133. plot(solution_vorschlag3;vars=[(3),(9),(12),(13),(15)])
  134.  
  135. # ╔═╡ 09da0df7-c02f-4898-87a1-045189a78112
  136. plot(solution_vorschlag3;vars=[(1),(2),(3),(4),(5)])
  137.  
  138. # ╔═╡ 85d82caa-47f3-4f42-9718-ab1c02974777
  139. iterations = 800
  140.  
  141. # ╔═╡ 3aa1a948-135a-4508-9f4b-f7825d8e9061
  142. learning_rate= 0.001
  143.  
  144. # ╔═╡ 16d90458-e2b4-4678-827f-f4dafebd1aa0
  145. let pᵢ = p
  146.     a = []
  147.     for i in 1:iterations
  148.         prob_it = ODEProblem(vorschlag3, u₀v₃, t, pᵢ);
  149.         s =  solve(prob_it);
  150.         pᵢ = pᵢ - learning_rate*s(1)[3,3:6]
  151.         plot(s;vars=[(1),(2),(3),(4),(5)])
  152.     end
  153.     append!(a,p)
  154.     a
  155. end
  156.  
  157. # ╔═╡ Cell order:
  158. # ╠═3abce27e-5e75-4a74-982d-64423205486d
  159. # ╠═8a074dac-dfc8-4e0c-bb8c-9324b23623e8
  160. # ╠═8249c704-8f85-4630-983a-e7c6375fa4b2
  161. # ╠═1b11b472-83c2-4d23-ba60-aceacb1bb034
  162. # ╠═b29054e6-198e-438b-8657-4383a9c141fa
  163. # ╠═2d11e521-73ab-4537-87af-182ac56aa9a0
  164. # ╠═9dc8c40c-7aaf-4be1-b834-2c649f9f39e5
  165. # ╠═20bfa96f-e752-43fd-a6b7-b1816b6c0037
  166. # ╟─5aed8764-afb6-4e2d-99e3-df6f787db235
  167. # ╟─2d0c829d-78d5-454a-9990-80d1a5b563c1
  168. # ╠═a9abd86b-12d4-4221-abf7-aac367287011
  169. # ╠═446e80b4-e90a-4893-b510-c222554826b8
  170. # ╠═a55f620c-393c-44c9-acb0-84f11839225b
  171. # ╠═ad7bb8c4-880a-4239-8f75-9294edde92ca
  172. # ╠═a357fff8-b61d-442b-8b1c-1e6b1f9abe72
  173. # ╠═2cfb9c5a-cd2d-4715-bae2-3e63f9ee1dfa
  174. # ╠═c28839d2-f21c-4c52-afe5-4c00e67843b4
  175. # ╠═de864650-6742-4786-886a-38380be2fea8
  176. # ╠═c1a3f293-da11-4e27-a8b3-71ebeb9dc1fb
  177. # ╠═af8ba9c0-253b-4937-bca3-cf50b21d671a
  178. # ╠═7ff16d5f-1d25-4b88-9a3e-f5bd2d2a75be
  179. # ╠═31c04461-32d1-423c-bb89-e43a998e29f3
  180. # ╠═ccafe7d2-4349-4a2e-93d7-3767d534d12b
  181. # ╠═6be8eaa6-ab14-4946-9f51-560f55a6a9ad
  182. # ╠═939f7768-766f-4108-90f5-cd4a7be6569a
  183. # ╠═78a05561-174b-4b24-86f0-37b7c250d94d
  184. # ╠═09da0df7-c02f-4898-87a1-045189a78112
  185. # ╠═85d82caa-47f3-4f42-9718-ab1c02974777
  186. # ╠═3aa1a948-135a-4508-9f4b-f7825d8e9061
  187. # ╠═16d90458-e2b4-4678-827f-f4dafebd1aa0
Advertisement
Add Comment
Please, Sign In to add comment