I’m trying to use MonteCarloMeasurements with MTK. I have some problems wrt. (i) the number of particles, and (ii) interpretation/presentation of the results.
Here is a simple RC circuit example:
using Plots, LaTeXStrings
using ModelingToolkit, DifferentialEquations
using MonteCarloMeasurements
# 1. Independent variables
@variables t
# 2. Differential operator
Dt = Differential(t)
# 3. Parameters
pars_RC = @parameters begin
C=8, [description="Capacitance, C"]
R=0.1, [description="Resistance, Ω"]
end
# 4. Dependent variables
vars_RC = @variables begin
i(t), [description="Total current, A"]
i_c(t), [description="Capacitor current, A"]
i_r(t), [description="Resistor current, A"]
(u(t)=0), [description="Voltage, V"]
end
# RC circuit
eqs_a = [Dt(u) ~ i_c/C,
i_r ~ u/R,
i ~ i_r + i_c]
@named mod_RC_a = ODESystem(eqs_a,t,vars_RC,pars_RC)
# Specifying inputs
@register_symbolic i_u(t)
eqs_i = [i ~ i_u(t)]
@named i_input = ODESystem(eqs_i,t)
# Causal system
mod_RC = extend(i_input, mod_RC_a) |> structural_simplify
i_u(t) = 10
tspan=(0,5)
prob = ODEProblem(mod_RC, [],tspan)
sol = solve(prob)
plot(sol, lw=2.5)
This produces the following plot:
Next, using MonteCarloMeasurements
:
prob = remake(prob; u0=[u => -0.2..0.2], p=[C=> 8±1])
sol = solve(prob)
plot(sol)
produces:
[
Warning: Using arrays or dicts to store parameters of different types can hurt performance. Consider using tuples instead.
– I neglected this advice…]
Question 1: In order for this to work, it is required that at least one parameter and at least one state/initial value simultaneously are specified with uncertainty, right? […to make sure that the quantities are properly promoted to the new type…]
According to the documentations, the above syntax for specifying uncertainty produces 2000 particles.
The following alternative description also works:
Np = 10
prob = remake(prob; u0=[u => 0.2*Particles(Np)], p=[C=> 8 + Particles(Np)])
sol = solve(prob)
plot(sol)
with result:
Question 2:: This only works if I specify the same number of particles in every uncertainty, right? [Np
above is used in both cases of calling Particles
…]
Question 3: Clearly, the blue region in the two plots above are not the “shadows” of plotting multiple parameters – in the last plot, one may discern a “small” number of particle trajectories, probably 10.
- Does the blue region represent a ribbon plot of the computed mean +/- the computed standard deviation of the particles?
- Does the thicker blue line in the center of the ribbon plot represent the mean?
I observe that I can change the color of the filled area (“ribbon”?) with setting fill color (fc=...
), the line color by specifying lc
, and the line thickness by specifying lw
.
Question 4: Regarding solutions…
- Is it possible to specify the line width, line color, line alpha value, and line style individually for the mean and the particles?