[Tutorial de SciML] Julia resuelve ecuaciones diferenciales ordinarias

SciML puede usar IA para resolver ecuaciones diferenciales parciales, que se puede decir que son muy sofisticadas.

El sitio web oficial proporciona tutoriales de cuadernos, que se pueden abrir de las siguientes maneras:

>]
pkg> add https://github.com/SciML/SciMLTutorials.jl
# 按退格键退出pkg
julia> using SciMLTutorials
julia> SciMLTutorials.open_notebooks()

Las ecuaciones diferenciales ordinarias se pueden escribir en la forma

tu ′ = f ( tu , pag , t ) u'=f(u,p,t)tu=f ( tu ,pag ,t )

donde _t es la variable independiente,ppp es el parámetro del modelo,uuu es la variable dependiente,fff es sobreti, tu, ttu ,El modelo no lineal de t .

A continuación presentamos el primer caso:

u′ = 0.98 u, u (0) = 1.0 u '= 0.98u, u (0) = 1.0tu=0 _ 9 8 tu ,en ( 0 )=1 . 0

La solución analítica de esta ecuación es e 0.98 te^{0.98t}mi0 . 9 8 t , es una ecuación diferencial muy simple adecuada para la verificación de códigos.

Su código es el siguiente

using DifferentialEquations #如果未装,会提示是否安装,选择是
f(u,p,t) = 0.98u            #新建一个待求方程
u0 = 1.0                    #初值
tspan = (0.0,1.0)           #时间范围
#新建一个常微分方程问题
prob = ODEProblem(f,u0,tspan)
sol = solve(prob)

solEs el resultado solución de esta EDO, incluyendo los miembros que representan la variable independiente y la variable dependiente, que son respectivamente sol.ty sol.u, a través de plot(sol)los cuales se pueden dibujar las dos, y la figura es la siguiente

using Plots; gr()
plot(sol)
savefig("ode_1.png")

inserte la descripción de la imagen aquí

A continuación, compare solvelos resultados y las soluciones analíticas,

plot!(sol.t, t->1.0*exp(0.98t),lw=3,ls=:dash,label="True Solution!")
savefig("ode_2.png")

la imagen es la siguiente

inserte la descripción de la imagen aquí

solAunque hay dos miembros, no es una matriz de dos columnas en sí misma, sino una clase compleja. soltambién se puede llamar como una función. P.ej

julia> sol(1.5)
4.3471420001896455

Por lo tanto, puede comparar solla diferencia con la solución analítica, es decir, el error de ajuste

plot(0:0.1:1, t->(sol(t)-1.0*exp(0.98t)),label="error")
savefig("ode_3.png")

inserte la descripción de la imagen aquí
Los errores visibles son aceptables.

Supongo que te gusta

Origin blog.csdn.net/m0_37816922/article/details/123417647
Recomendado
Clasificación