When running the friction example, I noticed that after:
@named nn = NeuralNetworkBlock(1, 1; chain = chain2, rng = StableRNG(1111))
eqs = [connect(model.nn_in, nn.output)
connect(model.nn_out, nn.input)]
ude_sys = complete(ODESystem(eqs, t, systems = [model, nn], name = :ude_sys))
sys = structural_simplify(ude_sys)
the resulting system has a mass matrix and the unknowns are:
unknowns(sys)
2-element Vector{SymbolicUtils.BasicSymbolic{Real}}:
friction₊y(t)
(nn₊input₊u(t))[1]
I checked a little deeper and noticed that nn₊input₊u has irreducible set in its metadata.
I suggest not making this a default behavior since a system with a mass matrix restricts the set of solvers that can be used for the problem. One could create an option in the NeuralNetworkBlock to make the input irreducible.
When running the friction example, I noticed that after:
the resulting system has a mass matrix and the unknowns are:
I checked a little deeper and noticed that nn₊input₊u has irreducible set in its metadata.
I suggest not making this a default behavior since a system with a mass matrix restricts the set of solvers that can be used for the problem. One could create an option in the NeuralNetworkBlock to make the input irreducible.