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)
sol
Es el resultado solución de esta EDO, incluyendo los miembros que representan la variable independiente y la variable dependiente, que son respectivamente sol.t
y 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")
A continuación, compare solve
los 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
sol
Aunque hay dos miembros, no es una matriz de dos columnas en sí misma, sino una clase compleja. sol
también se puede llamar como una función. P.ej
julia> sol(1.5)
4.3471420001896455
Por lo tanto, puede comparar sol
la 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")
Los errores visibles son aceptables.