JuliaMath / Calculus.jl

Calculus functions in Julia
Other
278 stars 76 forks source link

Prime notation not working #143

Open islent opened 4 years ago

islent commented 4 years ago

Example code copied from README not working (julia-1.3.0, Calculus-0.5.1):

julia> using Calculus

julia> f(x) = sin(x)
f (generic function with 1 method)

julia> f'(1.0) - cos(1.0)
ERROR: MethodError: no method matching adjoint(::typeof(f))
Closest candidates are:
  adjoint(::Missing) at missing.jl:100
  adjoint(::Number) at number.jl:193
  adjoint(::LinearAlgebra.Adjoint) at D:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.3\LinearAlgebra\src\adjtrans.jl:152
  ...
Stacktrace:
 [1] top-level scope at REPL[3]:1

julia> f''(1.0) - (-sin(1.0))
ERROR: MethodError: no method matching adjoint(::typeof(f))
Closest candidates are:
  adjoint(::Missing) at missing.jl:100
  adjoint(::Number) at number.jl:193
  adjoint(::LinearAlgebra.Adjoint) at D:\buildbot\worker\package_win64\build\usr\share\julia\stdlib\v1.3\LinearAlgebra\src\adjtrans.jl:152
  ...
Stacktrace:
 [1] top-level scope at REPL[6]:1
willowell commented 4 years ago

I'm having the same problem with JuliaPro-1.2.0-2 with Julia 1.2.0 on macOS 10.15.1. Steps:

  1. Start JuliaPro
  2. Start Julia REPL
  3. Enter `Pkg.add("Calculus")
  4. Enter using Calculus
  5. Enter f(x) = x
  6. Enter f'(0)
  7. REPL errors: ERROR: MethodError: no method matching adjoint(::typeof(f))

It appears as though Julia is mistaking the Calculus package's prime notation operator for the Hermitian adjoint operator in the standard library. julia/stdlib/v1.2/LinearAlgebra/adjtrans.jl specifically mentions:

Lazy adjoint (conjugate transposition) (also postfix `'`).
Note that `adjoint` is applied recursively to elements.

in a comment at line 105 and 106.

derivative(f, 0) behaves normally.

birm commented 4 years ago

Looks like this comes out of https://github.com/JuliaMath/Calculus.jl/issues/133