[Scipy-tickets] [SciPy] #564: Change derivative() to return the gradient of multidimensional functions
SciPy
scipy-tickets@scipy....
Mon Dec 17 09:16:39 CST 2007
#564: Change derivative() to return the gradient of multidimensional functions
-------------------------+--------------------------------------------------
Reporter: robfalck | Owner: jarrod.millman
Type: enhancement | Status: new
Priority: normal | Milestone: 0.7
Component: scipy.misc | Version:
Severity: minor | Resolution:
Keywords: |
-------------------------+--------------------------------------------------
Comment (by stefan):
We need a docstring, something like
{{{
Given a function, use a central difference formula with spacing dx to
compute the nth derivative at x0.
*Parameters*:
func : callable(x,*args)
Function for which the derivative is calculated.
x0 : float or ndarray of floats
Point around which the derivative is calculated.
dx : float
Sample spacing. To small a step size can lead to
round-off error.
n : int
Calculate the n-th derivative.
order : int
Number of points to take into account. Must be odd.
}}}
The weights can be defined using dicts, and the order semi-automatically
determined:
{{{
if order < n+1:
d,m = divmod(n,2)
order = d*2 + 1
assert (order % 2 == 1), "Odd number of points only."
# pre-computed for n=1 and 2 and low-order for speed.
if n==1:
weights = {3: array([-1,0,1])/2.0,
5: array([1,-8,0,8,-1])/12.0,
7: array([-1,9,-45,0,45,-9,1])/60.0,
9: array([3,-32,168,-672,0,672,-168,32,-3])/840.0}
elif n==2:
weights = {3: array([1,-2.0,1]),
5: array([-1,16,-30,16,-1])/12.0,
7: array([2,-27,270,-490,270,-27,2])/180.0,
9:
array([-9,128,-1008,8064,-14350,8064,-1008,128,-9])/5040.0}
else:
weights = {}
weights = weights.get(order,central_diff_weights(order,n))
}}}
I'd also replace the ">>" with "divmod", to make it clearer that there is
division by two.
Some tests + examples in the docstring would be really great too.
I think the last for-loop can be vectorised.
--
Ticket URL: <http://scipy.org/scipy/scipy/ticket/564#comment:2>
SciPy <http://www.scipy.org/>
SciPy is open-source software for mathematics, science, and engineering.
More information about the Scipy-tickets
mailing list