Skip to content

Commit be2ee4a

Browse files
authored
Merge pull request #534 from eschnett/patch-1
simplify_rules.jl: Add rules for sinh, cosh
2 parents 9f5873e + 04ef715 commit be2ee4a

File tree

3 files changed

+21
-3
lines changed

3 files changed

+21
-3
lines changed

src/simplify_rules.jl

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,6 @@ let
4343

4444
MUL_DISTRIBUTE = @ordered_acrule((~x)^(~n) * (~x)^(~m) => (~x)^(~n + ~m))
4545

46-
4746
CANONICALIZE_POW = [
4847
@rule(^(*(~~x), ~y::_isinteger) => *(map(a->pow(a, ~y), ~~x)...))
4948
@rule((((~x)^(~p::_isinteger))^(~q::_isinteger)) => (~x)^((~p)*(~q)))
@@ -91,6 +90,13 @@ let
9190
@acrule(cot(~x)^2 + 1 => csc(~x)^2)
9291
@acrule(csc(~x)^2 + -1 => cot(~x)^2)
9392

93+
@acrule(cosh(~x)^2 + -1*sinh(~x)^2 => one(~x))
94+
@acrule(cosh(~x)^2 + -1 => sinh(~x)^2)
95+
@acrule(sinh(~x)^2 + 1 => cosh(~x)^2)
96+
97+
@acrule(cosh(~x)^2 + sinh(~x)^2 => cosh(2 * ~x))
98+
@acrule(cosh(~x) * sinh(~x) => sinh(2 * ~x)/2)
99+
94100
@acrule(exp(~x) * exp(~y) => _iszero(~x + ~y) ? 1 : exp(~x + ~y))
95101
@rule(exp(~x)^(~y) => exp(~x * ~y))
96102
]

src/utils.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,10 @@ pow(x::Symbolic,y::Symbolic) = Base.:^(x,y)
3636
# Simplification utilities
3737
function has_trig_exp(term)
3838
!istree(term) && return false
39-
fns = (sin, cos, tan, cot, sec, csc, exp)
39+
fns = (sin, cos, tan, cot, sec, csc, exp, cosh, sinh)
4040
op = operation(term)
4141

42-
if Base.@nany 7 i->fns[i] === op
42+
if Base.@nany 9 i->fns[i] === op
4343
return true
4444
else
4545
return any(has_trig_exp, arguments(term))

test/rulesets.jl

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -100,13 +100,25 @@ end
100100
@eqtest simplify(1 + y + cot(x)^2) == csc(x)^2 + y
101101
@eqtest simplify(cos(x)^2 - 1) == -sin(x)^2
102102
@eqtest simplify(sin(x)^2 - 1) == -cos(x)^2
103+
104+
@eqtest simplify(cosh(x)^2 + 1 - sinh(x)^2) == 2
105+
@eqtest simplify(cosh(y)^2 + 1 - sinh(y)^2) == 2
106+
@eqtest simplify(-sinh(y)^2 + cosh(y)^2 + 1) == 2
107+
108+
@eqtest simplify(cosh(x)^2 - 1) == sinh(x)^2
109+
@eqtest simplify(sinh(x)^2 + 1) == cosh(x)^2
103110
end
104111

105112
@testset "Double angle formulas" begin
106113
@syms r x
114+
107115
@eqtest simplify(r * cos(x / 2)^2 - r * sin(x / 2)^2) == r * cos(x)
108116
@eqtest simplify(r * sin(x / 2)^2 - r * cos(x / 2)^2) == -r * cos(x)
109117
@eqtest simplify(2cos(x) * sin(x)) == sin(2x)
118+
119+
@eqtest simplify(r * cosh(x / 2)^2 + r * sinh(x / 2)^2) == r * cosh(x)
120+
@eqtest simplify(r * sinh(x / 2)^2 + r * cosh(x / 2)^2) == r * cosh(x)
121+
@eqtest simplify(2cosh(x) * sinh(x)) == sinh(2x)
110122
end
111123

112124
@testset "Exponentials" begin

0 commit comments

Comments
 (0)