Skip to content

Fix disturbance_modeling.md: generate_control_function with analysis points #4215

@ChrisRackauckas-Claude

Description

@ChrisRackauckas-Claude

Description

The state estimation example in docs/src/tutorials/disturbance_modeling.md is disabled due to compatibility issues with generate_control_function and analysis points.

Problem

The example showing how to generate functions f and g for state estimation using generate_control_function and build_explicit_observed_function fails when used with models containing analysis points.

Location

docs/src/tutorials/disturbance_modeling.md - lines 206-235

Expected behavior

Should be able to generate control functions from a model with analysis points for use in state estimators like Kalman filters or particle filters.

Related code

inputs = [ssys.u]
disturbance_inputs = [ssys.d1, ssys.d2]
P = ssys.system_model
outputs = [P.inertia1.phi, P.inertia2.phi, P.inertia1.w, P.inertia2.w]

(f_oop, f_ip), x_sym, p_sym, io_sys = ModelingToolkit.generate_control_function(
    model_with_disturbance, inputs; known_disturbance_inputs = disturbance_inputs)

g = ModelingToolkit.build_explicit_observed_function(io_sys, outputs; inputs)

op = ModelingToolkit.inputs(io_sys) .=> 0
x0 = ModelingToolkit.get_u0(io_sys, op)
p = MTKParameters(io_sys, op)
u = zeros(1)
w = zeros(length(disturbance_inputs))
@test f_oop(x0, u, p, t, w) == zeros(5)
@test g(x0, u, p, 0.0) == [0, 0, 0, 0]

Context

This is important for users who want to use ModelingToolkit models with state estimation libraries like LowLevelParticleFiltersMTK.jl.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions