Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ### A Pluto.jl notebook ###
- # v0.14.5
- using Markdown
- using InteractiveUtils
- # ╔═╡ 3abce27e-5e75-4a74-982d-64423205486d
- begin
- using Pkg
- Pkg.add("DifferentialEquations")
- using DifferentialEquations
- Pkg.add("Plots")
- using Plots
- Pkg.add("ForwardDiff")
- using ForwardDiff
- end
- # ╔═╡ 8a074dac-dfc8-4e0c-bb8c-9324b23623e8
- function lotka_voltera(u,p,t)
- N₁, N₂ = u
- ϵ₁, ϵ₂, γ₁, γ₂ = p
- return [N₁*ϵ₁ - γ₁*N₁*N₂, -N₂*ϵ₂ + γ₂*N₁*N₂]
- end
- # ╔═╡ 8249c704-8f85-4630-983a-e7c6375fa4b2
- u₀ = [1.,1.];
- # ╔═╡ 1b11b472-83c2-4d23-ba60-aceacb1bb034
- p = [3.,1.,0.5,0.4];
- # ╔═╡ b29054e6-198e-438b-8657-4383a9c141fa
- t =(0., 3.)
- # ╔═╡ 2d11e521-73ab-4537-87af-182ac56aa9a0
- prob = ODEProblem(lotka_voltera, u₀, t, p)
- # ╔═╡ 9dc8c40c-7aaf-4be1-b834-2c649f9f39e5
- solution = solve(prob);
- # ╔═╡ 20bfa96f-e752-43fd-a6b7-b1816b6c0037
- plot(solution)
- # ╔═╡ 5aed8764-afb6-4e2d-99e3-df6f787db235
- md"
- ### This is a Lotka-Voltera Model
- "
- # ╔═╡ 2d0c829d-78d5-454a-9990-80d1a5b563c1
- md"Inital sensitivity is $0$."
- # ╔═╡ a9abd86b-12d4-4221-abf7-aac367287011
- u₀ₚ = hcat(u₀, zeros(2,4))
- # ╔═╡ 446e80b4-e90a-4893-b510-c222554826b8
- function lotka_sensitivity(du, u, p, t)
- du[:,1] = lotka_voltera(u[:,1],p,t)
- N₁, N₂ = u[:,1] # ; s₁ₚ₁ s₂ₚ₁; s₁ₚ₂ s₂ₚ₂; s₁ₚ₃ s₂ₚ₃; s₁ₚ₄ s₂ₚ₄
- p₁, p₂, p₃, p₄ = p
- J = [(p₁-p₂*N₂) (-p₂*N₁); (p₄*N₁) (p₄*N₂-p₃)]
- du[:,2] = (J*u[:,2]) .+ [N₁, 0.]
- du[:,3] = (J*u[:,3]) .+ [-N₂*N₁, 0.]
- du[:,4] = (J*u[:,4]) .+ [0., -N₂]
- du[:,5] = (J*u[:,5]) .+ [0., N₂*N₁]
- end
- # ╔═╡ a55f620c-393c-44c9-acb0-84f11839225b
- prob_sensitivity = ODEProblem(lotka_sensitivity, u₀ₚ, t, p)
- # ╔═╡ ad7bb8c4-880a-4239-8f75-9294edde92ca
- solution_sensitivity = solve(prob_sensitivity);
- # ╔═╡ a357fff8-b61d-442b-8b1c-1e6b1f9abe72
- plot(solution_sensitivity; vars=[(1),(2),(3),#=(4),=#(5),#=(6),=#(7),#=(8),(9),(10)=#])
- # ╔═╡ 2cfb9c5a-cd2d-4715-bae2-3e63f9ee1dfa
- md"# Problem one above"
- # ╔═╡ c28839d2-f21c-4c52-afe5-4c00e67843b4
- 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."
- # ╔═╡ af8ba9c0-253b-4937-bca3-cf50b21d671a
- point_of_eval = [-3.,1.]
- # ╔═╡ de864650-6742-4786-886a-38380be2fea8
- ForwardDiff.jacobian(par->lotka_voltera(point_of_eval,par,0.0),p)
- # ╔═╡ c1a3f293-da11-4e27-a8b3-71ebeb9dc1fb
- begin
- a=zeros(2,5);
- lotka_sensitivity(a,hcat(point_of_eval,zeros(2,4)), p, 0.0);
- a[:,2:5]
- end
- # ╔═╡ 7ff16d5f-1d25-4b88-9a3e-f5bd2d2a75be
- function vorschlag3(du,u,p,t)
- du[1:2,1] = lotka_voltera(u[1:2,1],p,t)
- du[1:2,2] = lotka_voltera(u[1:2,2],[2.,1.5,0.3,0.6],t)
- du[3,1] = (u[1,1]-u[1,2])^2
- du[3,2] = 0;
- N₁, N₂ = u[1:2,1] # ; s₁ₚ₁ s₂ₚ₁; s₁ₚ₂ s₂ₚ₂; s₁ₚ₃ s₂ₚ₃; s₁ₚ₄ s₂ₚ₄
- p₁, p₂, p₃, p₄ = p
- J = [(p₁-p₂*N₂) (-p₂*N₁); (p₄*N₁) (p₄*N₂-p₃)]
- du[1:2,3] = (J*u[1:2,3]) .+ [N₁, 0.]
- du[1:2,4] = (J*u[1:2,4]) .+ [-N₂*N₁, 0.]
- du[1:2,5] = (J*u[1:2,5]) .+ [0., -N₂]
- du[1:2,6] = (J*u[1:2,6]) .+ [0., N₂*N₁]
- j = 2*(u[1,1]-u[1,2])
- du[3,3] = j * u[1,3]
- du[3,4] = j * u[1,4]
- du[3,5] = j * u[1,5]
- du[3,6] = j * u[1,6]
- end
- # ╔═╡ 31c04461-32d1-423c-bb89-e43a998e29f3
- u₀v₃ = hcat(vcat(u₀,zeros(1)),vcat(u₀,zeros(1)),zeros(3,4))
- # ╔═╡ ccafe7d2-4349-4a2e-93d7-3767d534d12b
- prob_vorschlag3 = ODEProblem(vorschlag3, u₀v₃, t, p)
- # ╔═╡ 6be8eaa6-ab14-4946-9f51-560f55a6a9ad
- solution_vorschlag3 = solve(prob_vorschlag3)
- # ╔═╡ 939f7768-766f-4108-90f5-cd4a7be6569a
- solution_vorschlag3(t[2])
- # ╔═╡ 78a05561-174b-4b24-86f0-37b7c250d94d
- plot(solution_vorschlag3;vars=[(3),(9),(12),(13),(15)])
- # ╔═╡ 09da0df7-c02f-4898-87a1-045189a78112
- plot(solution_vorschlag3;vars=[(1),(2),(3),(4),(5)])
- # ╔═╡ 85d82caa-47f3-4f42-9718-ab1c02974777
- iterations = 800
- # ╔═╡ 3aa1a948-135a-4508-9f4b-f7825d8e9061
- learning_rate= 0.001
- # ╔═╡ 16d90458-e2b4-4678-827f-f4dafebd1aa0
- let pᵢ = p
- a = []
- for i in 1:iterations
- prob_it = ODEProblem(vorschlag3, u₀v₃, t, pᵢ);
- s = solve(prob_it);
- pᵢ = pᵢ - learning_rate*s(1)[3,3:6]
- plot(s;vars=[(1),(2),(3),(4),(5)])
- end
- append!(a,p)
- a
- end
- # ╔═╡ Cell order:
- # ╠═3abce27e-5e75-4a74-982d-64423205486d
- # ╠═8a074dac-dfc8-4e0c-bb8c-9324b23623e8
- # ╠═8249c704-8f85-4630-983a-e7c6375fa4b2
- # ╠═1b11b472-83c2-4d23-ba60-aceacb1bb034
- # ╠═b29054e6-198e-438b-8657-4383a9c141fa
- # ╠═2d11e521-73ab-4537-87af-182ac56aa9a0
- # ╠═9dc8c40c-7aaf-4be1-b834-2c649f9f39e5
- # ╠═20bfa96f-e752-43fd-a6b7-b1816b6c0037
- # ╟─5aed8764-afb6-4e2d-99e3-df6f787db235
- # ╟─2d0c829d-78d5-454a-9990-80d1a5b563c1
- # ╠═a9abd86b-12d4-4221-abf7-aac367287011
- # ╠═446e80b4-e90a-4893-b510-c222554826b8
- # ╠═a55f620c-393c-44c9-acb0-84f11839225b
- # ╠═ad7bb8c4-880a-4239-8f75-9294edde92ca
- # ╠═a357fff8-b61d-442b-8b1c-1e6b1f9abe72
- # ╠═2cfb9c5a-cd2d-4715-bae2-3e63f9ee1dfa
- # ╠═c28839d2-f21c-4c52-afe5-4c00e67843b4
- # ╠═de864650-6742-4786-886a-38380be2fea8
- # ╠═c1a3f293-da11-4e27-a8b3-71ebeb9dc1fb
- # ╠═af8ba9c0-253b-4937-bca3-cf50b21d671a
- # ╠═7ff16d5f-1d25-4b88-9a3e-f5bd2d2a75be
- # ╠═31c04461-32d1-423c-bb89-e43a998e29f3
- # ╠═ccafe7d2-4349-4a2e-93d7-3767d534d12b
- # ╠═6be8eaa6-ab14-4946-9f51-560f55a6a9ad
- # ╠═939f7768-766f-4108-90f5-cd4a7be6569a
- # ╠═78a05561-174b-4b24-86f0-37b7c250d94d
- # ╠═09da0df7-c02f-4898-87a1-045189a78112
- # ╠═85d82caa-47f3-4f42-9718-ab1c02974777
- # ╠═3aa1a948-135a-4508-9f4b-f7825d8e9061
- # ╠═16d90458-e2b4-4678-827f-f4dafebd1aa0
Advertisement
Add Comment
Please, Sign In to add comment