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