Skip to content

Commit 06474b5

Browse files
Merge pull request #1370 from andreasnoack/an/isaffine
Define isaffine methods for AbstractSystem
2 parents ef6c4bf + d866fba commit 06474b5

File tree

5 files changed

+15
-1
lines changed

5 files changed

+15
-1
lines changed

docs/src/systems/NonlinearSystem.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ tearing
2323
## Analyses
2424

2525
```@docs
26+
ModelingToolkit.isaffine
2627
ModelingToolkit.islinear
2728
```
2829

docs/src/systems/ODESystem.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ tearing
2929
```@docs
3030
ModelingToolkit.islinear
3131
ModelingToolkit.isautonomous
32+
ModelingToolkit.isaffine
3233
```
3334

3435
## Applicable Calculation and Generation Functions

src/ModelingToolkit.jl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ using Symbolics: _parse_vars, value, @derivatives, get_variables,
4747
exprs_occur_in, solve_for, build_expr, unwrap, wrap,
4848
VariableSource, getname, variable
4949
import Symbolics: rename, get_variables!, _solve, hessian_sparsity,
50-
jacobian_sparsity, islinear, _iszero, _isone,
50+
jacobian_sparsity, isaffine, islinear, _iszero, _isone,
5151
tosymbol, lower_varname, diff2term, var_from_nested_derivative,
5252
BuildTargets, JuliaTarget, StanTarget, CTarget, MATLABTarget,
5353
ParallelForm, SerialForm, MultithreadedForm, build_function,

src/systems/abstractsystem.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -523,6 +523,12 @@ function islinear(sys::AbstractSystem)
523523
all(islinear(r, states(sys)) for r in rhs)
524524
end
525525

526+
function isaffine(sys::AbstractSystem)
527+
rhs = [eq.rhs for eq equations(sys)]
528+
529+
all(isaffine(r, states(sys)) for r in rhs)
530+
end
531+
526532
struct AbstractSysToExpr
527533
sys::AbstractSystem
528534
states::Vector

test/linearity.jl

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,9 @@ eqs2 = [D(x) ~ σ*(y-x),
1818
D(z) ~ y - β*z]
1919

2020
@test !ModelingToolkit.islinear(@named sys = ODESystem(eqs2))
21+
22+
eqs3 = [D(x) ~ σ*(y-x),
23+
D(y) ~ -z-y,
24+
D(z) ~ y - β*z + 1]
25+
26+
@test ModelingToolkit.isaffine(@named sys = ODESystem(eqs))

0 commit comments

Comments
 (0)