diff --git a/src/differentiate.jl b/src/differentiate.jl index 11aa16a..16aba4c 100644 --- a/src/differentiate.jl +++ b/src/differentiate.jl @@ -30,7 +30,7 @@ function differentiate(::SymbolParameter{:^}, args, wrt) yp = differentiate(y, wrt) if xp == 0 && yp == 0 return 0 - elseif xp != 0 && yp == 0 + elseif yp == 0 return :( $y * $xp * ($x ^ ($y - 1)) ) else return :( $x ^ $y * ($xp * $y / $x + $yp * log($x)) ) @@ -105,9 +105,9 @@ function differentiate(::SymbolParameter{:/}, args, wrt) if xp == 0 && yp == 0 return 0 elseif xp == 0 - return :( -$yp * $x ) + return :( -$yp * $x / $y^2 ) elseif yp == 0 - return :( $xp * $y ) + return :( $xp / $y ) else return :( ($xp * $y - $x * $yp) / $y^2 ) end diff --git a/test/symbolic.jl b/test/symbolic.jl index 6e4b584..1332a08 100644 --- a/test/symbolic.jl +++ b/test/symbolic.jl @@ -7,6 +7,9 @@ @assert isequal(differentiate(:(x + x), :x), 2) @assert isequal(differentiate(:(x - x), :x), 0) @assert isequal(differentiate(:(2 * x), :x), 2) +@assert isequal(differentiate(:(2 / x), :x), :(-2 / x^2)) +@assert isequal(differentiate(:(x / 2), :x), 0.5) +@assert isequal(differentiate(:(sin(x) / x), :x), :((cos(x) * x - sin(x)) / x^2)) @assert isequal(differentiate(:(x * 2), :x), 2) @assert isequal(differentiate(:(a * x), :x), :a) @assert isequal(differentiate(:(x * a), :x), :a)