Recently I’ve updated a very big project to the latest version of MTK. I now get this warning:
┌ Warning: Initialization system is overdetermined. 1 equations for 0 unknowns.
Initialization will default to using least squares. To suppress this warning pass warn_initialize_determined = false. To make this warning into an error, pass fully_determined = true
└ @ ModelingToolkit C:\Users\datse\.julia\packages\ModelingToolkit\Vsl3C\src\systems\diffeqs\abstractodesystem.jl:1465
Are there tools to find the culprit equation somehow? My model is massive, with 50+ equations split over 5 files. Even though I am looking, it is very hard to find which one is overspecifying the system.
My code runs perfectly fine mind you - just like it used to run before I updated MTK. I am not really sure of the implications of this warning to be honest.
Check the initialization system, equations(prob.f.initializationprob.f.sys)
and you’ll see what the extra equation is.
2 Likes
What’s prob
supposed to be here? I am making an ODESystem
, at which point I get the aforementioned warning, before making any ODEProblem
. I can’t apply the code you cite for this system, it doesn’t have the fields.
If I then make prob = ODEProblem(ssys, nothing, (0.0, Inf))
, I still can’t apply the code because I get
ODEProblem with uType Vector{Float64} and tType Float64. In-place: true
timespan: (0.0, Inf)
u0: 5-element Vector{Float64}:
290.0
1.0
1200.0
290.0
11.0
julia> equations(prob.f.initializationprob.f.sys)
ERROR: type ODEFunction has no field initializationprob
Stacktrace:
[1] getproperty(x::Function, f::Symbol)
@ Base .\Base.jl:37
[2] top-level scope
@ REPL[15]:1
I’d need an MWE. If you aren’t creating the problem then it shouldn’t be creating the iniitalizaiton system.
Okay, I have found the solution. The answer is to use
equations(prob.f.initializeprob.f.sys)
on the created ODEProblem
resulting from the ODESystem
. Notice the typo initializeprob
versus initializationprob
.