示例#1
0
 def _multicomplex(f, fx, x, h):
     n = len(x)
     cmplx_wrap = Bicomplex.__array_wrap__
     partials = [
         cmplx_wrap(f(Bicomplex(x + 1j * hi, 0))).imag
         for hi in Jacobian._increments(n, h)
     ]
     return np.array(partials)
示例#2
0
 def _multicomplex2(f, fx, x, h):
     n = len(x)
     increments = np.identity(n) * h
     cmplx_wrap = Bicomplex.__array_wrap__
     partials = [
         cmplx_wrap(f(Bicomplex(x + 1j * hi, hi))).imag12
         for hi in increments
     ]
     return np.array(partials)
示例#3
0
 def _multicomplex2(f, fx, x, h):
     """Calculate Hessian with Bicomplex-step derivative approximation"""
     n = len(x)
     ee = np.diag(h)
     hess = np.outer(h, h)
     cmplx_wrap = Bicomplex.__array_wrap__
     for i in range(n):
         for j in range(i, n):
             zph = Bicomplex(x + 1j * ee[i, :], ee[j, :])
             hess[i, j] = cmplx_wrap(f(zph)).imag12 / hess[j, i]
             hess[j, i] = hess[i, j]
     return hess
示例#4
0
 def _multicomplex2(f, fx, x, h):
     z = Bicomplex(x + 1j * h, h)
     return Bicomplex.__array_wrap__(f(z)).imag12