Skip to content

Commit 7f5e0ab

Browse files
committed
Add special rules for max and min
1 parent 24a45e0 commit 7f5e0ab

File tree

1 file changed

+16
-1
lines changed

1 file changed

+16
-1
lines changed

src/extra_functions.jl

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,23 @@
44

55
@register Base.signbit(x)
66
ModelingToolkit.derivative(::typeof(signbit), args::NTuple{1,Any}, ::Val{1}) = 0
7-
87
ModelingToolkit.derivative(::typeof(abs), args::NTuple{1,Any}, ::Val{1}) = IfElse.ifelse(signbit(args[1]),-one(args[1]),one(args[1]))
8+
function ModelingToolkit.derivative(::typeof(min), args::NTuple{2,Any}, ::Val{1})
9+
x, y = args
10+
IfElse.ifelse(x < y, one(x), zero(x))
11+
end
12+
function ModelingToolkit.derivative(::typeof(min), args::NTuple{2,Any}, ::Val{2})
13+
x, y = args
14+
IfElse.ifelse(x < y, zero(y), one(y))
15+
end
16+
function ModelingToolkit.derivative(::typeof(max), args::NTuple{2,Any}, ::Val{1})
17+
x, y = args
18+
IfElse.ifelse(x > y, one(x), zero(x))
19+
end
20+
function ModelingToolkit.derivative(::typeof(max), args::NTuple{2,Any}, ::Val{2})
21+
x, y = args
22+
IfElse.ifelse(x > y, zero(y), one(y))
23+
end
924

1025
@register IfElse.ifelse(x,y,z::Any)
1126
ModelingToolkit.derivative(::typeof(IfElse.ifelse), args::NTuple{3,Any}, ::Val{1}) = 0

0 commit comments

Comments
 (0)