elementary API
elementary パッケージは、Dual[T] が実装する arithmetic の解析的トレイトのためのファサードです。Dual、Sqrt、SqrtChecked、Exponential、Logarithmic、Trigonometric、Constants を再エクスポートします。これらのトレイトに対してジェネリックなコードを書き、それを微分したい場合にインポートします。微分規則は dual API に記載されています。
インポート
import {
"Luna-Flow/autodiff/elementary",
}
再エクスポートされる型
Dual
双対数型です。
pub using @dual {type Dual}
解析的トレイト
| トレイト | メソッド | Dual[T] 上の接成分 |
|---|---|---|
Sqrt | sqrt | |
SqrtChecked | sqrt_checked | 、チェック付き |
Exponential | exp, exp2 | , |
Logarithmic | ln, log2, log10 | , , |
Trigonometric | sin, cos, tan | , , |
Constants | pi, tau, e |
Sqrt
チェックなしの平方根です。
pub using @arithmetic {trait Sqrt}
SqrtChecked
Result[Self, ArithmeticError] を返す平方根です。checked API を参照してください。
pub using @arithmetic {trait SqrtChecked}
Exponential
exp と exp2。exp2 は を使うため、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
、、。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)
}