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)
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)
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
def _multicomplex2(f, fx, x, h): z = Bicomplex(x + 1j * h, h) return Bicomplex.__array_wrap__(f(z)).imag12