|
35 | 35 |
|
36 | 36 | modified_states!(mstates, e::Equation, statelist=nothing) = get_variables!(mstates, e.lhs, statelist)
|
37 | 37 |
|
38 |
| -# variable substitution |
39 |
| -# Piracy but mild |
40 |
| -""" |
41 |
| - substitute(expr, s::Pair) |
42 |
| - substitute(expr, s::Dict) |
43 |
| - substitute(expr, s::Vector) |
44 |
| -
|
45 |
| -Performs the substitution on `expr` according to rule(s) `s`. |
46 |
| -
|
47 |
| -# Examples |
48 |
| -```julia |
49 |
| -julia> @parameters t |
50 |
| -(t,) |
51 |
| -
|
52 |
| -julia> @variables x y z(t) |
53 |
| -(x, y, z(t)) |
54 |
| -
|
55 |
| -julia> ex = x + y + sin(z) |
56 |
| -(x + y) + sin(z(t)) |
57 |
| -
|
58 |
| -julia> substitute(ex, Dict([x => z, sin(z) => z^2])) |
59 |
| -(z(t) + y) + (z(t) ^ 2) |
60 |
| -``` |
61 |
| -""" |
62 |
| -# cannot use Union{Pair, Vector, Dict} -- leads to ambiguity |
63 |
| -substitute(expr::Num, s::Pair; kw...) = Num(substituter(s)(value(expr); kw...)) |
64 |
| -substitute(expr::Num, s::Vector; kw...) = Num(substituter(s)(value(expr); kw...)) |
65 |
| -substitute(expr::Num, s::Dict; kw...) = Num(substituter(s)(value(expr); kw...)) |
66 |
| -# TODO: move this to SymbolicUtils |
67 |
| -substitute(expr, s::Pair; kw...) = substituter([s[1] => s[2]])(expr; kw...) |
68 |
| -substitute(expr, s::Vector; kw...) = substituter(s)(expr; kw...) |
69 |
| - |
70 |
| -substituter(pair::Pair) = substituter((pair,)) |
71 |
| -function substituter(pairs) |
72 |
| - dict = Dict(value(k) => value(v) for (k, v) in pairs) |
73 |
| - (expr; kw...) -> SymbolicUtils.substitute(expr, dict; kw...) |
74 |
| -end |
75 |
| - |
76 | 38 | macro showarr(x)
|
77 | 39 | n = string(x)
|
78 | 40 | quote
|
|
0 commit comments