Hi there.
I am starting to use the amazing ModellingToolkit, but I am afraid I am missing something important. So I apologize if my questions is silly.
Suppose I have a model consisting of two differential equations, two dependent variables x1 and x2 and an independent variable t. For example:
@parameters t a1 a2;
@variables x1(t) x2(t);
D = Differential(t);
D2 = Differential(t)^2;
f(t) = 0.1*sin(2*pi*t);
T1 = a1*f(t)
T2 = a2*f(t)
eq = [ D2(x1) ~ T1 - D(x2),
D2(x2) ~ T2 - D(x1) ];
sys = ODESystem(eq);
sys = ode_order_lowering(sys);
tspan = (0.0,10.0);
p =[a1 => 1.0,
a2 => 2.0 ];
u0 =[ D(x1) => 0.0,
x1 => 0.0,
D(x2) => 0.0,
x2 => 0.0,
];
prob = ODEProblem(sys,u0,tspan,p,jac=true)
sol = solve(prob);
I can plot the solution x1(t) even without knowing the position of this variable in pos(t)
, since there is a Plot recipe
plot(sol,vars=(x1));
My question is. Suppose I want to make some mathematical operations on x1(t)
. For example, evaluate the integral of (x1(t)/(a+b))^2
over the time span.
How can I “recover” x1(t) from sol and use it along with the symbolic operations? For example,
expr = substitute( (x1/(a+b))^2, p)
will substitute the values of a and b, as expected. But if I try to use it with QuadGK, for example, it will give me an error, since x1(t) is not linked to sol(t).
I guess I am missing something important about it and I really want to understand how to properly use the solution provided by DifferentialEquations here.
Thank you.