def sin(X): try: y = ADnum(np.sin(X.val), der=np.cos(X.val) * X.der) y.graph = X.graph if X not in y.graph: y.graph[X] = [] y.graph[X].append((y, 'sin')) return y except AttributeError: return np.sin(X)
def arccos(X): try: y = ADnum(np.arccos(X.val), der=-1 / np.sqrt(1 - X.val**2) * X.der) y.graph = X.graph if X not in y.graph: y.graph[X] = [] y.graph[X].append((y, 'arccos')) return y except AttributeError: return np.arccos(X)
def sec(X): try: y = ADnum(1 / np.cos(X.val), der=np.tan(X.val) / np.cos(X.val) * X.der) y.graph = X.graph if X not in y.graph: y.graph[X] = [] y.graph[X].append((y, 'sec')) return y except AttributeError: return 1 / np.cos(X)
def cot(X): try: y = ADnum(1 / np.tan(X.val), der=-1 / (np.sin(X.val)**2) * X.der) y.graph = X.graph if X not in y.graph: y.graph[X] = [] y.graph[X].append((y, 'cot')) return y except AttributeError: return 1 / np.tan(X)
def sqrt(X): try: y = ADnum(np.sqrt(X.val), der=X.der / (2 * np.sqrt(X.val))) y.graph = X.graph if X not in y.graph: y.graph[X] = [] y.graph[X].append((y, 'sqrt')) return y except AttributeError: return np.sqrt(X)
def log(X): try: y = ADnum(np.log(X.val), der=1 / X.val * X.der) y.graph = X.graph if X not in y.graph: y.graph[X] = [] y.graph[X].append((y, 'log')) return y except AttributeError: return np.log(X)
def tanh(X): try: y = ADnum(np.tanh(X.val), der=1 / (np.cosh(X.val)**2) * X.der) y.graph = X.graph if X not in y.graph: y.graph[X] = [] y.graph[X].append((y, 'tanh')) return y except AttributeError: return np.tanh(X)
def arctan(X): try: y = ADnum(np.arctan(X.val), der=1 / (1 + X.val**2) * X.der) y.graph = X.graph if X not in y.graph: y.graph[X] = [] y.graph[X].append((y, 'arctan')) return y except AttributeError: return np.arctan(X)
def csc(X): try: y = ADnum(1 / np.sin(X.val), der=(-1 / np.tan(X.val)) * (1 / np.sin(X.val)) * X.der) y.graph = X.graph if X not in y.graph: y.graph[X] = [] y.graph[X].append((y, 'csc')) return y except: return 1 / np.sin(X)