UNPKG

scalar-autograd

Version:

Scalar-based reverse-mode automatic differentiation in TypeScript.

50 lines (49 loc) 1.73 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.ValueTrig = void 0; const Value_1 = require("./Value"); class ValueTrig { static sin(x) { const s = Math.sin(x.data); return Value_1.Value.make(s, x, null, (out) => () => { if (x.requiresGrad) x.grad += Math.cos(x.data) * out.grad; }, `sin(${x.label})`); } static cos(x) { const c = Math.cos(x.data); return Value_1.Value.make(c, x, null, (out) => () => { if (x.requiresGrad) x.grad += -Math.sin(x.data) * out.grad; }, `cos(${x.label})`); } static tan(x) { const t = Math.tan(x.data); return Value_1.Value.make(t, x, null, (out) => () => { if (x.requiresGrad) x.grad += (1 / (Math.cos(x.data) ** 2)) * out.grad; }, `tan(${x.label})`); } static asin(x) { const s = Math.asin(x.data); return Value_1.Value.make(s, x, null, (out) => () => { if (x.requiresGrad) x.grad += (1 / Math.sqrt(1 - x.data * x.data)) * out.grad; }, `asin(${x.label})`); } static acos(x) { const c = Math.acos(x.data); return Value_1.Value.make(c, x, null, (out) => () => { if (x.requiresGrad) x.grad += (-1 / Math.sqrt(1 - x.data * x.data)) * out.grad; }, `acos(${x.label})`); } static atan(x) { const a = Math.atan(x.data); return Value_1.Value.make(a, x, null, (out) => () => { if (x.requiresGrad) x.grad += (1 / (1 + x.data * x.data)) * out.grad; }, `atan(${x.label})`); } } exports.ValueTrig = ValueTrig;