kmath/kmath-core/space.kscience.kmath.expressions/-d-s-compiler/index.html

185 lines
20 KiB
HTML

<!doctype html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1" charset="UTF-8">
<title>DSCompiler</title>
<link href="../../../images/logo-icon.svg" rel="icon" type="image/svg"><script>var pathToRoot = "../../../";</script> <script>const storage = localStorage.getItem("dokka-dark-mode")
if (storage == null) {
const osDarkSchemePreferred = window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
if (osDarkSchemePreferred === true) {
document.getElementsByTagName("html")[0].classList.add("theme-dark")
}
} else {
const savedDarkMode = JSON.parse(storage)
if(savedDarkMode === true) {
document.getElementsByTagName("html")[0].classList.add("theme-dark")
}
}
</script>
<script type="text/javascript" src="../../../scripts/sourceset_dependencies.js" async></script>
<link href="../../../styles/style.css" rel="Stylesheet">
<link href="../../../styles/jetbrains-mono.css" rel="Stylesheet">
<link href="../../../styles/main.css" rel="Stylesheet">
<link href="../../../styles/prism.css" rel="Stylesheet">
<link href="../../../styles/logo-styles.css" rel="Stylesheet">
<script type="text/javascript" src="../../../scripts/clipboard.js" async></script>
<script type="text/javascript" src="../../../scripts/navigation-loader.js" async></script>
<script type="text/javascript" src="../../../scripts/platform-content-handler.js" async></script>
<script type="text/javascript" src="../../../scripts/main.js" defer></script>
<script type="text/javascript" src="../../../scripts/prism.js" async></script>
<script type="text/javascript" src="../../../scripts/symbol-parameters-wrapper_deferred.js" defer></script></head>
<body>
<div class="navigation-wrapper" id="navigation-wrapper">
<div id="leftToggler"><span class="icon-toggler"></span></div>
<div class="library-name">
<a href="../../../index.html">
<span>kmath</span> </a> </div>
<div>0.3.1-dev-RC
</div>
<div class="pull-right d-flex">
<div class="filter-section" id="filter-section">
<button class="platform-tag platform-selector common-like" data-active="" data-filter=":kmath-core:dokkaHtmlPartial/commonMain">common</button>
</div>
<button id="theme-toggle-button"><span id="theme-toggle"></span></button>
<div id="searchBar"></div>
</div>
</div>
<div id="container">
<div id="leftColumn">
<div id="sideMenu"></div>
</div>
<div id="main">
<div class="main-content" data-page-type="classlike" id="content" pageids="kmath-core::space.kscience.kmath.expressions/DSCompiler///PointingToDeclaration//244675578">
<div class="breadcrumbs"><a href="../../index.html">kmath-core</a><span class="delimiter">/</span><a href="../index.html">space.kscience.kmath.expressions</a><span class="delimiter">/</span><span class="current">DSCompiler</span></div>
<div class="cover ">
<h1 class="cover"><span><span>DSCompiler</span></span></h1>
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":kmath-core:dokkaHtmlPartial/commonMain"><div class="symbol monospace"><span class="token keyword">class </span><a href="index.html">DSCompiler</a><span class="token operator">&lt;</span><span class="token keyword"></span><a href="index.html">T</a><span class="token punctuation">, </span><span class="token keyword">out </span><a href="index.html">A</a><span class="token operator"> : </span><a href="../../space.kscience.kmath.operations/-algebra/index.html">Algebra</a><span class="token operator">&lt;</span><span class="token keyword"></span><a href="index.html">T</a><span class="token operator">&gt;</span><span class="token operator">&gt;</span><span class="clearfix"><span class="floating-right">(<a href="https://github.com/SciProgCentre/kmath/tree/master/kmath-core/src/commonMain/kotlin/space/kscience/kmath/expressions/DSCompiler.kt#L56">source</a>)</span></span></div><p class="paragraph">Class holding "compiled" computation rules for derivative structures.</p><p class="paragraph">This class implements the computation rules described in Dan Kalman's paper <a href="http://www1.american.edu/cas/mathstat/People/kalman/pdffiles/mmgautodiff.pdf">Doubly Recursive Multivariate Automatic Differentiation</a>, Mathematics Magazine, vol. 75, no. 3, June 2002. However, to avoid performances bottlenecks, the recursive rules are "compiled" once in an unfolded form. This class does this recursion unrolling and stores the computation rules as simple loops with pre-computed indirection arrays.</p><p class="paragraph">This class maps all derivative computation into single dimension arrays that hold the value and partial derivatives. The class does not hold these arrays, which remains under the responsibility of the caller. For each combination of number of free parameters and derivation order, only one compiler is necessary, and this compiler will be used to perform computations on all arrays provided to it, which can represent hundreds or thousands of different parameters kept together with all their partial derivatives.</p><p class="paragraph">The arrays on which compilers operate contain only the partial derivatives together with the 0<sup>th</sup> derivative, i.e., the value. The partial derivatives are stored in a compiler-specific order, which can be retrieved using methods <a href="get-partial-derivative-index.html">getPartialDerivativeIndex</a> and <a href="get-partial-derivative-orders.html">getPartialDerivativeOrders</a>. The value is guaranteed to be stored as the first element (i.e., the <a href="get-partial-derivative-index.html">getPartialDerivativeIndex</a> method returns 0 when called with 0 for all derivation orders and <a href="get-partial-derivative-orders.html">getPartialDerivativeOrders</a> returns an array filled with 0 when called with 0 as the index).</p><p class="paragraph">Note that the ordering changes with number of parameters and derivation order. For example given 2 parameters x and y, df/dy is stored at index 2 when derivation order is set to 1 (in this case the array has three elements: f, df/dx and df/dy). If derivation order is set to 2, then df/dy will be stored at index 3 (in this case the array has six elements: f, df/dx, df/dxdx, df/dy, df/dxdy and df/dydy).</p><p class="paragraph">Given this structure, users can perform some simple operations like adding, subtracting or multiplying constants and negating the elements by themselves, knowing if they want to mutate their array or create a new array. These simple operations are not provided by the compiler. The compiler provides only the more complex operations between several arrays.</p><p class="paragraph">Derived from <a href="https://github.com/apache/commons-math/blob/924f6c357465b39beb50e3c916d5eb6662194175/commons-math-legacy/src/main/java/org/apache/commons/math4/legacy/analysis/differentiation/DSCompiler.java">Commons Math's <code class="lang-kotlin">DSCompiler</code></a>.</p><h4 class="">See also</h4><div class="table"><div class="table-row" data-filterable-current=":kmath-core:dokkaHtmlPartial/commonMain" data-filterable-set=":kmath-core:dokkaHtmlPartial/commonMain"><div class="main-subrow keyValue "><div class=""><span class="inline-flex"><div><a href="../-d-s/index.html"><span><span>DS</span></span></a></div></span></div><div></div></div></div></div></div></div>
</div>
<div class="tabbedcontent">
<div class="tabs-section" tabs-section="tabs-section"><button class="section-tab" data-active="" data-togglable="CONSTRUCTOR,TYPE,FUNCTION,PROPERTY">Members</button></div>
<div class="tabs-section-body">
<div data-togglable="FUNCTION">
<h2 class="">Functions</h2>
<div class="table"><a data-name="1990267529%2FFunctions%2F244675578" anchor-label="getPartialDerivativeIndex" id="1990267529%2FFunctions%2F244675578" data-filterable-set=":kmath-core:dokkaHtmlPartial/commonMain"></a>
<div class="table-row" data-filterable-current=":kmath-core:dokkaHtmlPartial/commonMain" data-filterable-set=":kmath-core:dokkaHtmlPartial/commonMain">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="get-partial-derivative-index.html"><span>get</span><wbr><span>Partial</span><wbr><span>Derivative</span><wbr><span><span>Index</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="1990267529%2FFunctions%2F244675578"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":kmath-core:dokkaHtmlPartial/commonMain"><div class="symbol monospace"><span class="token keyword"></span><span class="token keyword">fun </span><a href="get-partial-derivative-index.html"><span class="token function">getPartialDerivativeIndex</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter "><span class="token keyword">vararg </span>orders<span class="token operator">: </span><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a></span></span><span class="token punctuation">)</span><span class="token operator">: </span><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a></div><div class="brief "><p class="paragraph">Get the index of a partial derivative in the array.</p></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="1142903135%2FFunctions%2F244675578" anchor-label="getPartialDerivativeOrders" id="1142903135%2FFunctions%2F244675578" data-filterable-set=":kmath-core:dokkaHtmlPartial/commonMain"></a>
<div class="table-row" data-filterable-current=":kmath-core:dokkaHtmlPartial/commonMain" data-filterable-set=":kmath-core:dokkaHtmlPartial/commonMain">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="get-partial-derivative-orders.html"><span>get</span><wbr><span>Partial</span><wbr><span>Derivative</span><wbr><span><span>Orders</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="1142903135%2FFunctions%2F244675578"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":kmath-core:dokkaHtmlPartial/commonMain"><div class="symbol monospace"><span class="token keyword"></span><span class="token keyword">fun </span><a href="get-partial-derivative-orders.html"><span class="token function">getPartialDerivativeOrders</span></a><span class="token punctuation">(</span><span class="parameters "><span class="parameter ">index<span class="token operator">: </span><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a></span></span><span class="token punctuation">)</span><span class="token operator">: </span><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int-array/index.html">IntArray</a></div><div class="brief "><p class="paragraph">Get the derivation orders for a specific index in the array.</p></div></div></div>
</div>
</div>
</div>
</div>
</div>
</div>
<div data-togglable="PROPERTY">
<h2 class="">Properties</h2>
<div class="table"><a data-name="-1937517222%2FProperties%2F244675578" anchor-label="algebra" id="-1937517222%2FProperties%2F244675578" data-filterable-set=":kmath-core:dokkaHtmlPartial/commonMain"></a>
<div class="table-row" data-filterable-current=":kmath-core:dokkaHtmlPartial/commonMain" data-filterable-set=":kmath-core:dokkaHtmlPartial/commonMain">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="algebra.html"><span><span>algebra</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="-1937517222%2FProperties%2F244675578"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":kmath-core:dokkaHtmlPartial/commonMain"><div class="symbol monospace"><span class="token keyword"></span><span class="token keyword">val </span><a href="algebra.html">algebra</a><span class="token operator">: </span><a href="index.html">A</a></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="-438036574%2FProperties%2F244675578" anchor-label="freeParameters" id="-438036574%2FProperties%2F244675578" data-filterable-set=":kmath-core:dokkaHtmlPartial/commonMain"></a>
<div class="table-row" data-filterable-current=":kmath-core:dokkaHtmlPartial/commonMain" data-filterable-set=":kmath-core:dokkaHtmlPartial/commonMain">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="free-parameters.html"><span>free</span><wbr><span><span>Parameters</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="-438036574%2FProperties%2F244675578"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":kmath-core:dokkaHtmlPartial/commonMain"><div class="symbol monospace"><span class="token keyword"></span><span class="token keyword">val </span><a href="free-parameters.html">freeParameters</a><span class="token operator">: </span><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a></div><div class="brief "><p class="paragraph">Number of free parameters.</p></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="1015481652%2FProperties%2F244675578" anchor-label="order" id="1015481652%2FProperties%2F244675578" data-filterable-set=":kmath-core:dokkaHtmlPartial/commonMain"></a>
<div class="table-row" data-filterable-current=":kmath-core:dokkaHtmlPartial/commonMain" data-filterable-set=":kmath-core:dokkaHtmlPartial/commonMain">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="order.html"><span><span>order</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="1015481652%2FProperties%2F244675578"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":kmath-core:dokkaHtmlPartial/commonMain"><div class="symbol monospace"><span class="token keyword"></span><span class="token keyword">val </span><a href="order.html">order</a><span class="token operator">: </span><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a></div><div class="brief "><p class="paragraph">Derivation order.</p></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="988163383%2FProperties%2F244675578" anchor-label="size" id="988163383%2FProperties%2F244675578" data-filterable-set=":kmath-core:dokkaHtmlPartial/commonMain"></a>
<div class="table-row" data-filterable-current=":kmath-core:dokkaHtmlPartial/commonMain" data-filterable-set=":kmath-core:dokkaHtmlPartial/commonMain">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="size.html"><span><span>size</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="988163383%2FProperties%2F244675578"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":kmath-core:dokkaHtmlPartial/commonMain"><div class="symbol monospace"><span class="token keyword"></span><span class="token keyword">val </span><a href="size.html">size</a><span class="token operator">: </span><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int/index.html">Int</a></div><div class="brief "><p class="paragraph">Get the array size required for holding partial derivatives' data.</p></div></div></div>
</div>
</div>
</div>
</div>
<a data-name="2134548592%2FProperties%2F244675578" anchor-label="sizes" id="2134548592%2FProperties%2F244675578" data-filterable-set=":kmath-core:dokkaHtmlPartial/commonMain"></a>
<div class="table-row" data-filterable-current=":kmath-core:dokkaHtmlPartial/commonMain" data-filterable-set=":kmath-core:dokkaHtmlPartial/commonMain">
<div class="main-subrow keyValue ">
<div class=""><span class="inline-flex">
<div><a href="sizes.html"><span><span>sizes</span></span></a></div>
<span class="anchor-wrapper"><span class="anchor-icon" pointing-to="2134548592%2FProperties%2F244675578"></span>
<div class="copy-popup-wrapper "><span class="copy-popup-icon"></span><span>Link copied to clipboard</span></div>
</span></span></div>
<div>
<div class="title">
<div class="platform-hinted " data-platform-hinted="data-platform-hinted"><div class="content sourceset-dependent-content" data-active="" data-togglable=":kmath-core:dokkaHtmlPartial/commonMain"><div class="symbol monospace"><span class="token keyword"></span><span class="token keyword">val </span><a href="sizes.html">sizes</a><span class="token operator">: </span><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-array/index.html">Array</a><span class="token operator">&lt;</span><span class="token keyword"></span><a href="https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-int-array/index.html">IntArray</a><span class="token operator">&gt;</span></div><div class="brief "><p class="paragraph">Number of partial derivatives (including the single 0 order derivative element).</p></div></div></div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
</div>
<div class="footer">
<span class="go-to-top-icon"><a href="#content" id="go-to-top-link"></a></span><span>© 2023 Copyright</span><span class="pull-right"><span>Generated by </span><a href="https://github.com/Kotlin/dokka"><span>dokka</span><span class="padded-icon"></span></a></span>
</div>
</div>
</div>
</body>
</html>