elementary API

elementary パッケージは、Dual[T] が実装する arithmetic の解析的トレイトのためのファサードです。Dual、Sqrt、SqrtChecked、Exponential、Logarithmic、Trigonometric、Constants を再エクスポートします。これらのトレイトに対してジェネリックなコードを書き、それを微分したい場合にインポートします。微分規則は dual API に記載されています。

ソース:src/elementary/alias.mbt。

インポート

import {
  "Luna-Flow/autodiff/elementary",
}

再エクスポートされる型

Dual

双対数型です。

pub using @dual {type Dual}

解析的トレイト

トレイトメソッドDual[T] 上の接成分
Sqrtsqrtb/(2a)b/(2\sqrt a)
SqrtCheckedsqrt_checkedb/(2a)b/(2\sqrt a)、チェック付き
Exponentialexp, exp2b eab\,e^a, b 2aln⁡2b\,2^a\ln 2
Logarithmicln, log2, log10b/ab/a, b/(aln⁡2)b/(a\ln 2), b/(aln⁡10)b/(a\ln 10)
Trigonometricsin, cos, tanbcos⁡ab\cos a, −bsin⁡a-b\sin a, b/cos⁡2ab/\cos^2 a
Constantspi, tau, e00

Sqrt

チェックなしの平方根です。

pub using @arithmetic {trait Sqrt}

SqrtChecked

Result[Self, ArithmeticError] を返す平方根です。checked API を参照してください。

pub using @arithmetic {trait SqrtChecked}

Exponential

exp と exp2。exp2 は ln⁡2\ln 2 を使うため、Dual[T] のインスタンスには T : Exponential + Logarithmic + IntegralHomomorphism + Mul が必要です。

pub using @arithmetic {trait Exponential}

Logarithmic

ln、log2、log10。Dual[T] のインスタンスには T : Logarithmic + IntegralHomomorphism + Mul + Div が必要です。

pub using @arithmetic {trait Logarithmic}

Trigonometric

sin、cos、tan。Dual[T] のインスタンスには T : Trigonometric + Mul + Neg + Div が必要です。

pub using @arithmetic {trait Trigonometric}

Constants

π\pi、τ=2π\tau = 2\pi、ee。Dual[T] 上では接成分 0 の定数です。

pub using @arithmetic {trait Constants}
fn[T : @elementary.Trigonometric + @elementary.Exponential + Mul] damped(x : T) -> T {
  @elementary.Exponential::exp(x) * @elementary.Trigonometric::sin(x)
}

test "analytic traits on dual numbers" {
  let y = damped(@elementary.Dual::variable(0.0))
  assert_eq(y.value(), 0.0)
  assert_eq(y.tangent(), 1.0) // e^0 (sin 0 + cos 0)
  let tau : @elementary.Dual[Double] = @elementary.Constants::tau()
  assert_eq(tau.tangent(), 0.0)
}