Calcoli scientifici con Julia/Lancio oggetto
Considerato un oggetto di 30 Kg che viene lanciato in caduta libera sottoposto alla forza peso pari a 9,8 m/s^2 e ad una resistenza direttamente proporzionale alla velocità pari a (3Kg/s)*v si vuole calcolare la velocità dell'oggetto dopo 10 secondi e la sua velocità limite.
L'equazione differenziale da analizzare è la seguente:
con condizione iniziale v(0)=0 .
Innanzitutto occorre installare i pacchetti Plots, DifferentialEquations.
Da REPL digitare:
using Pkg
Pkg.add("Plots")
using Pkg
Pkg.add("DifferentialEquations")
Da Jupyter in due celle di codice digitare :
] add Plots
] add DifferentialEquations
e poi cliccare su Run. Poi eseguire il codice per risolvere l'equazione differenziale e tracciare il grafico della soluzione analitica e numerica della crescita malthusiana esponenziale (utilizzo il seguente codice rilasciato con licenza MIT https://computationalmindset.com/en/neural-networks/ordinary-differential-equation-solvers-in-julia.html):
using DifferentialEquations
using Plots
ode_fn(v,p,t) = 9.8-(3/30)*v
an_sol(t) = (30*9.8)/3*(1-exp(-(3/30)*t))
t_begin=0.0
t_end=50.0
tspan = (t_begin,t_end)
x_init=0.0
prob = ODEProblem(ode_fn, x_init, tspan)
num_sol = solve(prob, Tsit5(), reltol=1e-8, abstol=1e-8)
plot(num_sol.t, an_sol.(num_sol.t),
linewidth=2, ls=:dash,
title="Lancio oggetto tramite DifferentialEquations",
xaxis="t", yaxis="v",
label="analitico",
legend=true)
plot!(num_sol,
linewidth=1,
label="numerico")
La velocità dell'oggetto dopo 10 secondi è pari a 61,95 m/s, mentre la velocità limite calcolando il limite per t tendente a inf è come si vede dal grafico pari a 98 m/s:
num_sol(10)
61.94781476107555