starting with:
f(x,y) = x*y*exp(x+y) + 2x-2y + x/y
This is fine:
using Measurements
f(x,y) = x*y*exp(x+y) + 2x-2y + x/y
x1 = 1.0 ±0.1
y1 = 2.0 ±0.001
f(x1,y1) #fine
This is also fine:
using ForwardDiff
x1 = 1.0
y1 = 2.0
dfx(x,y) = ForwardDiff.derivative(_x -> f(_x,y),x)
dfx(x1,y1) #also fine
But,this combination is not fine:
using ForwardDiff,Measurements
x1 = 1.0 ±0.1
y1 = 2.0 ±0.001
dfx(x,y) = ForwardDiff.derivative(_x -> f(_x,y),x)
dfx(x1,y1) #NOT FINE
Solution:
using ForwardDiff,Measurements,ForwardDiffOverMeasurements
x1 = 1.0 ±0.1
y1 = 2.0 ±0.001
dfx(x,y) = ForwardDiff.derivative(_x -> f(_x,y),x)
dfx(x1,y1) #fine again
on the REPL:
>julia ]
(@v1.7) pkg> add ForwardDiffOverMeasurements
>julia using ForwardDiffOverMeasurements
The package loads promote rules and some basic operations that favor a ForwardDiff.Dual
over a Measurements.Measurement
, so this holds:
f(x::Dual,y::Measurement)::Dual
The package does not export anything nor does define new functions.
At the moment, +
, -
, *
, and /
are defined. if any Base function is missing, please open an issue.