If you have to use interpolation, Interpolations has a gradient function. If you have an analytic expression, DualNumbers/JuliaDiff is oh-so-sweet.
--Tim On Tuesday, August 25, 2015 06:31:27 AM Scott T wrote: > Commenting here because I'd be interested in hearing any more thoughts > people have. I'm working on a similar problem at the moment, but for > directional derivatives of 2D data. My data has hardly any noise though, > which makes doing finite-differencing along one axis a decent choice - but > I'd like to keep up to date with the options for interpolation and finding > derivatives. > > Scott > > On Tuesday, 25 August 2015 13:44:54 UTC+1, Mauro wrote: > > I see. Can you analytically differentiate dx/dt = F(x,t) once more? > > > > For the finite differences, presumably you tried using a large stencil? > > Here some old Matlab code of mine in case you haven't tried: > > > > function dy_dx = diff_o4(y,dx) > > % differentiates x numerically with O(dx^4) > > % see schieser (1991) > > > > dy_dx = 2*[0; 0; 0; 0; y] - 16*[0; 0; 0; y; 0] + 16*[0; y; 0; 0; 0] - > > 2*[y; 0; 0; 0; 0]; > > dy_dx = dy_dx(3:end-2); > > > > dy_dx(1) = -50*y(1) + 96*y(2) - 72*y(3) +32*y(4) - 6*y(5); > > dy_dx(2) = -6*y(1) - 20*y(2) + 36*y(3) - 12*y(4) + 2*y(5); > > > > dy_dx(end-1) = 6*y(end) + 20*y(end-1) - 36*y(end-2) + 12*y(end-3) - > > 2*y(end-4); > > dy_dx(end) = 50*y(end) - 96*y(end-1) + 72*y(end-2) - 32*y(end-3) + > > 6*y(end-4); > > > > dy_dx = 1/24/dx*dy_dx; > > > > > > On Tue, 2015-08-25 at 14:37, Spencer Lyon <spence...@gmail.com > > > > <javascript:>> wrote: > > > Hey Mauro, > > > > > > That’s right. The ODE solver does give me the first derivative. The > > > > problem is that I need the first two derivatives! > > > > > So what I’ve done to test all my numerical tools for accuracy is to > > > > compare the approximated first derivative with the actual one given my by > > the ODE solver. That’s how I know that the approximations are all very > > poor > > (an average error of 75%, where this is computed as abs((actual - > > approx)./actual)). If I could find a way to get accurate approximations of > > the first derivative, then I could apply these techniques to the actual > > first derivative to get an estimate of the second derivative. > > > > > // Spencer > > > > > > From:Mauro <maur...@runbox.com <javascript:>> > > > Reply:ju...@googlegroups.com <javascript:> <julia...@googlegroups.com > > > > <javascript:>>> > > > > > Date:August 25, 2015 at 8:31:50 AM > > > To:juli...@googlegroups.com <javascript:> <julia...@googlegroups.com > > > > <javascript:>>> > > > > > Subject: Re: [julia-users] Re: ANN: JuliaDiff -- differentiation tools > > > > in Julia > > > > >> About the data, it should be pretty smooth. It is generated as the > > > > output > > > > >> of applying a stiff ODE solver where the domain is covered by 10,000 > > > > points > > > > >> on the unit interval. I've tried using all 10,000 (x, y) points. I was > > >> > > >> concerned about overfitting, so I also tried thinning the data by > > > > taking > > > > >> every `n`th point, but that didn't help. > > > > > > The ODE solver should, at least internally, have an estimate of the > > > derivative. Maybe there is a way to get at that? Otherwise, if the ODE > > > is in the form dx/dt = F(x,t) then just plug your x and t into that. If > > > > > > it is of the form 0=F(dx/dt,x,t) then you could solve the system of > > > equations for dx/dt for all x,t. > > > > > >> That's a good point regarding regression or Bayesean techniques. I'll > > >> definitely consider that. > > >> > > >> Thanks again for the comments! > > >> > > >> > > >> On Tuesday, August 25, 2015 at 5:45:08 AM UTC-4, Christoph Ortner > > > > wrote: > > >>> P.S.: I think your problem is unrelated to `julia-diff` which deals > > > > with a > > > > >>> completely different class of differentiation algorithms.