def testDerivative2(self): conec = [(1, 3), (2, 3), (0, 3), \ (1, 4), (0, 4), \ (3, 4), (4, 5), (0, 5), (4, 6), (3, 6), (5, 6) ] net = ffnet(conec) y1n, y2n = net.derivative([1, 1])[0] from scipy import derivative def func1(x): return net([x, 1])[0] def func2(x): return net([1, x])[0] y1 = derivative(func1, 1, dx=0.001) y2 = derivative(func2, 1, dx=0.001) self.assertAlmostEqual(y1n, y1, 7) self.assertAlmostEqual(y2n, y2, 7)
def newtonsMethod(f, x0, tol=1e-7, df=None): if df is None: df = lambda x: sp.derivative(f,x) x = x0 while(sp.absolute(float(f(x))/df(x)) >= tol): x -= float(f(x))/df(x) return x
def diff(f, x, i, n=1, eps=0.01, n_points=3): """Takes the i-th derivative of a multi-dimmensional function """ def func_for_diff(x_i): return f(np.concatenate((x[:i],[x_i],x[i+1:]))) x = np.atleast_1d(x) return derivative(func=func_for_diff, x0=x[i], dx=eps, n=n, order=n_points)
def diff(self, i, order=1): """ N.diff(i, order=1) Derivative wrt index i to given order. """ old_val = copy(self[i]) d = derivative(func=self.func_for_diff, x0=old_val, dx=self.eps[i], n=order, args=[i], order=self.diff_order) self[i] = old_val return d
def ContinuousParSpread(self, parameters): surv_prob = lambda t: self.SurvivalProbability(parameters, t) numerator = lambda t: self.DiscountCurve.DF(0, t) * \ derivative( surv_prob, t, dx = 0.0001) denominator = lambda t: self.DiscountCurve.DF(0, t) * \ self.SurvivalProbability(parameters, t) cts_ps = (1 - self.R) * -quad(numerator, 0, self.maturity)[0] \ / quad(denominator, 0, self.maturity)[0] * 10000 return cts_ps
def grad_Sy(r1,r2,r3,r4,t1,hx,hy,Ox,Oy,sig,t2): return array([ derivative(lambda a: Sy(a,r2,r3,r4,t1,hx,hy,Ox,Oy,sig,t2),r1,0.01*r1), derivative(lambda a: Sy(r1,a,r3,r4,t1,hx,hy,Ox,Oy,sig,t2),r2,0.01*r2), derivative(lambda a: Sy(r1,r2,a,r4,t1,hx,hy,Ox,Oy,sig,t2),r3,0.01*r3), derivative(lambda a: Sy(r1,r2,r3,a,t1,hx,hy,Ox,Oy,sig,t2),r4,0.01*r4), derivative(lambda a: Sy(r1,r2,r3,r4,a,hx,hy,Ox,Oy,sig,t2),t1,0.02), derivative(lambda a: Sy(r1,r2,r3,r4,t1,a,hy,Ox,Oy,sig,t2),hx,0.01*hx), derivative(lambda a: Sy(r1,r2,r3,r4,t1,hx,a,Ox,Oy,sig,t2),hy,0.01*hy), 0.0, 1.0])
def jacobian( F,x): def replace( A,a,i): R=A.copy() #This line caused me a lot of problems R[i]=a return R J = sp.zeros((len(x),len(x))) for i in range(len(x)): for j in range(len(x)): #Is there a better way to do a partial derivative? J[i,j] = sp.derivative(lambda a: F(replace(x,a,i))[j],x[i]) return J
def get_eap_range(iap_v): """return the index range where the eap has a significant waveform based on the derivative of the iap, an index range is determined that will cover the course of the significant (that is non-zero) waveform for the eap. very heuristic.. might not work all the time """ # this gets rid of apossible bump from 0 to x on the first samples and # extends the waveform for the derivative calculation my_iap = N.concatenate((iap_v[3:].copy(), N.ones(5) * iap_v[-1])) iap_func = lambda x: my_iap[x] der_1st = [N.derivative(iap_func, i) for i in xrange(iap_v.size)] der_1st = N.absolute(N.asarray(der_1st[1:])) start = stop = (der_1st > 1e-1).argmax() stop += (der_1st[stop:] > 1e-2).argmin() return start, stop
def newtonsMethod( *args): f = None df = None x0 = None tol = None if ( len(args) == 3 ): f = args[0] df = lambda x: sp.derivative(f,x) x0 = args[1] tol = args[2] else : f = args[0] df = args[1] x0 = args[2] tol = args[3] x = x0 while( sp.absolute(float(f(x))/df(x)) >= tol): x -= float(f(x))/df(x) return x
def diff2(self, i, j): """ N.diff2(i,j) Mixed second derivative. Differentiates wrt both indices. """ old_val = copy(self[j]) if not self.stochastic_indices[i][0] in self.stochastic_indices[j][0].moral_neighbors: return 0. def diff_for_diff(val): self[j] = val return self.diff(i) d = derivative(func=diff_for_diff, x0=old_val, dx=self.eps[j], n=1, order=self.diff_order) self[j] = old_val return d
def grad_Sx(r1, r2, r3, r4, t1, hx, hy, Ox, Oy, sig, t2): return array([ derivative( lambda a: Sx(a, r2, r3, r4, t1, hx, hy, Ox, Oy, sig, t2), r1, 0.01 * r1), derivative( lambda a: Sx(r1, a, r3, r4, t1, hx, hy, Ox, Oy, sig, t2), r2, 0.01 * r2), derivative( lambda a: Sx(r1, r2, a, r4, t1, hx, hy, Ox, Oy, sig, t2), r3, 0.01 * r2), derivative( lambda a: Sx(r1, r2, r3, a, t1, hx, hy, Ox, Oy, sig, t2), r4, 0.01 * r4), derivative( lambda a: Sx(r1, r2, r3, r4, a, hx, hy, Ox, Oy, sig, t2), t1, 0.02), derivative( lambda a: Sx(r1, r2, r3, r4, t1, a, hy, Ox, Oy, sig, t2), hx, 0.01 * hx), derivative( lambda a: Sx(r1, r2, r3, r4, t1, hx, a, Ox, Oy, sig, t2), hy, 0.01 * hy), 1.0, 0.0 ])
def df (x1, y1): print 'df %.20g %.20g' % (x1, y1) dx = derivative (lambda x: f (x, y1), x1, derivx, order=dorder) dy = derivative (lambda y: f (x1, y), y1, derivy, order=dorder) print ' -> %.20g %.20g' % (dx, dy) return [dx, dy]
def df(x1, y1): dx = derivative(lambda x: f(x, y1), x1, derivx, order=dorder) dy = derivative(lambda y: f(x1, y), y1, derivy, order=dorder) return [dx, dy]
def dSydt2(r1,r2,r3,r4,t1,hx,hy,Ox,Oy,sig,t2): return derivative(lambda a: Sy(r1,r2,r3,r4,t1,hx,hy,Ox,Oy,sig,a),t2,0.02)
def dSydt2(r1, r2, r3, r4, t1, hx, hy, Ox, Oy, sig, t2): return derivative( lambda a: Sy(r1, r2, r3, r4, t1, hx, hy, Ox, Oy, sig, a), t2, 0.02)
hx = v[5] hy = v[6] Ox = v[7] Oy = v[8] t2 = thetas[0] print "\nLet's make sure the forward equations are working..." print "Sx:", sfbe.Sx(r1, r2, r3, r4, t1, hx, hy, Ox, Oy, sig, t2) print "Sy:", sfbe.Sy(r1, r2, r3, r4, t1, hx, hy, Ox, Oy, sig, t2) print "\nSome numerical derivatives we're surely gonna need..." print "F**k doing them by hand! I *know* the forward equations are right!\n" print "the gradient bits for Sx:" print "1:", derivative( lambda a: sfbe.Sx(a, r2, r3, r4, t1, hx, hy, Ox, Oy, sig, t2), r1, 0.01 * abs(r1)) print "2:", derivative( lambda a: sfbe.Sx(r1, a, r3, r4, t1, hx, hy, Ox, Oy, sig, t2), r2, 0.01 * abs(r2)) print "3:", derivative( lambda a: sfbe.Sx(r1, r2, a, r4, t1, hx, hy, Ox, Oy, sig, t2), r3, 0.01 * abs(r3)) print "4:", derivative( lambda a: sfbe.Sx(r1, r2, r3, a, t1, hx, hy, Ox, Oy, sig, t2), r4, 0.01 * abs(r4)) print "5:", derivative( lambda a: sfbe.Sx(r1, r2, r3, r4, a, hx, hy, Ox, Oy, sig, t2), t1, 0.02) print "6:", derivative( lambda a: sfbe.Sx(r1, r2, r3, r4, t1, a, hy, Ox, Oy, sig, t2), hx, 0.01 * abs(hx))
def df(x1, y1): print 'df %.20g %.20g' % (x1, y1) dx = derivative(lambda x: f(x, y1), x1, derivx, order=dorder) dy = derivative(lambda y: f(x1, y), y1, derivy, order=dorder) print ' -> %.20g %.20g' % (dx, dy) return [dx, dy]
def F( z, OmegaM ): d = [] for i in xrange( 0, len(OmegaM) ): f = lambda x: (Delta(x,[OmegaM[i]])[0]) d.append( -((1+z)/Delta(z,[OmegaM[i]])[0])*sp.derivative( f , z, dx = 0.00001 ) ) return d
def marginal_cost(self, quantity): return derivative(self.cost_function, quantity)
t1=v[4] hx=v[5] hy=v[6] Ox=v[7] Oy=v[8] t2=thetas[0] print "\nLet's make sure the forward equations are working..." print "Sx:", sfbe.Sx(r1,r2,r3,r4,t1,hx,hy,Ox,Oy,sig,t2) print "Sy:", sfbe.Sy(r1,r2,r3,r4,t1,hx,hy,Ox,Oy,sig,t2) print "\nSome numerical derivatives we're surely gonna need..." print "F**k doing them by hand! I *know* the forward equations are right!\n" print "the gradient bits for Sx:" print "1:",derivative(lambda a: sfbe.Sx(a,r2,r3,r4,t1,hx,hy,Ox,Oy,sig,t2),r1,0.01*abs(r1)) print "2:",derivative(lambda a: sfbe.Sx(r1,a,r3,r4,t1,hx,hy,Ox,Oy,sig,t2),r2,0.01*abs(r2)) print "3:",derivative(lambda a: sfbe.Sx(r1,r2,a,r4,t1,hx,hy,Ox,Oy,sig,t2),r3,0.01*abs(r3)) print "4:",derivative(lambda a: sfbe.Sx(r1,r2,r3,a,t1,hx,hy,Ox,Oy,sig,t2),r4,0.01*abs(r4)) print "5:",derivative(lambda a: sfbe.Sx(r1,r2,r3,r4,a,hx,hy,Ox,Oy,sig,t2),t1,0.02) print "6:",derivative(lambda a: sfbe.Sx(r1,r2,r3,r4,t1,a,hy,Ox,Oy,sig,t2),hx,0.01*abs(hx)) print "7:",derivative(lambda a: sfbe.Sx(r1,r2,r3,r4,t1,hx,a,Ox,Oy,sig,t2),hy,0.01*abs(hy)) print "8:",1.0 print "9:",0.0 print "\nthe gradient bits for Sy:" print "1:", derivative(lambda a: sfbe.Sy(a,r2,r3,r4,t1,hx,hy,Ox,Oy,sig,t2),r1,0.01*abs(r1)) print "2:", derivative(lambda a: sfbe.Sy(r1,a,r3,r4,t1,hx,hy,Ox,Oy,sig,t2),r2,0.01*abs(r2)) print "3:", derivative(lambda a: sfbe.Sy(r1,r2,a,r4,t1,hx,hy,Ox,Oy,sig,t2),r3,0.01*abs(r3)) print "4:", derivative(lambda a: sfbe.Sy(r1,r2,r3,a,t1,hx,hy,Ox,Oy,sig,t2),r4,0.01*abs(r4)) print "5:", derivative(lambda a: sfbe.Sy(r1,r2,r3,r4,a,hx,hy,Ox,Oy,sig,t2),t1,0.02)