-
-
Notifications
You must be signed in to change notification settings - Fork 215
/
Copy pathindex.html
36 lines (36 loc) · 22.7 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><title>Symbolic metadata · ModelingToolkit.jl</title><script async src="https://www.googletagmanager.com/gtag/js?id=UA-90474609-3"></script><script> window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-90474609-3', {'page_path': location.pathname + location.search + location.hash});
</script><script data-outdated-warner src="../../assets/warner.js"></script><link rel="canonical" href="https://mtk.sciml.ai/stable/basics/Variable_metadata/"/><link href="https://cdnjs.cloudflare.com/ajax/libs/lato-font/3.0.0/css/lato-font.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/juliamono/0.044/juliamono.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/fontawesome.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/solid.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.3/css/brands.min.css" rel="stylesheet" type="text/css"/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.13.11/katex.min.css" rel="stylesheet" type="text/css"/><script>documenterBaseURL="../.."</script><script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.6/require.min.js" data-main="../../assets/documenter.js"></script><script src="../../siteinfo.js"></script><script src="../../../versions.js"></script><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../../assets/themes/documenter-dark.css" data-theme-name="documenter-dark" data-theme-primary-dark/><link class="docs-theme-link" rel="stylesheet" type="text/css" href="../../assets/themes/documenter-light.css" data-theme-name="documenter-light" data-theme-primary/><script src="../../assets/themeswap.js"></script><link href="../../assets/favicon.ico" rel="icon" type="image/x-icon"/></head><body><div id="documenter"><nav class="docs-sidebar"><a class="docs-logo" href="../../"><img src="../../assets/logo.png" alt="ModelingToolkit.jl logo"/></a><div class="docs-package-name"><span class="docs-autofit"><a href="../../">ModelingToolkit.jl</a></span></div><form class="docs-search" action="../../search/"><input class="docs-search-query" id="documenter-search-query" name="q" type="text" placeholder="Search docs"/></form><ul class="docs-menu"><li><a class="tocitem" href="../../">Home</a></li><li><span class="tocitem">Symbolic Modeling Tutorials</span><ul><li><a class="tocitem" href="../../tutorials/ode_modeling/">Composing Ordinary Differential Equations</a></li><li><a class="tocitem" href="../../tutorials/spring_mass/">Component-Based Modeling a Spring-Mass System</a></li><li><a class="tocitem" href="../../tutorials/acausal_components/">Acausal Component-Based Modeling the RC Circuit</a></li><li><a class="tocitem" href="../../tutorials/higher_order/">Automatic Transformation of Nth Order ODEs to 1st Order ODEs</a></li><li><a class="tocitem" href="../../tutorials/tearing_parallelism/">Exposing More Parallelism By Tearing Algebraic Equations in ODESystems</a></li><li><a class="tocitem" href="../../tutorials/nonlinear/">Modeling Nonlinear Systems</a></li><li><a class="tocitem" href="../../tutorials/optimization/">Modeling Optimization Problems</a></li><li><a class="tocitem" href="../../tutorials/stochastic_diffeq/">Modeling with Stochasticity</a></li><li><a class="tocitem" href="../../tutorials/nonlinear_optimal_control/">Nonlinear Optimal Control</a></li><li><a class="tocitem" href="../../tutorials/parameter_identifiability/">Parameter Identifiability in ODE Models</a></li></ul></li><li><span class="tocitem">ModelingToolkitize Tutorials</span><ul><li><a class="tocitem" href="../../mtkitize_tutorials/modelingtoolkitize/">Automatically Accelerating ODEProblem Code</a></li><li><a class="tocitem" href="../../mtkitize_tutorials/modelingtoolkitize_index_reduction/">Automated Index Reduction of DAEs</a></li><li><a class="tocitem" href="../../mtkitize_tutorials/sparse_jacobians/">Automated Sparse Analytical Jacobians</a></li></ul></li><li><span class="tocitem">Basics</span><ul><li><a class="tocitem" href="../AbstractSystem/">The AbstractSystem Interface</a></li><li><a class="tocitem" href="../ContextualVariables/">Contextual Variable Types</a></li><li class="is-active"><a class="tocitem" href>Symbolic metadata</a><ul class="internal"><li><a class="tocitem" href="#Input-or-output"><span>Input or output</span></a></li><li><a class="tocitem" href="#Bounds"><span>Bounds</span></a></li><li><a class="tocitem" href="#Mark-input-as-a-disturbance"><span>Mark input as a disturbance</span></a></li><li><a class="tocitem" href="#Mark-parameter-as-tunable"><span>Mark parameter as tunable</span></a></li><li><a class="tocitem" href="#Probability-distributions"><span>Probability distributions</span></a></li><li><a class="tocitem" href="#Additional-functions"><span>Additional functions</span></a></li><li><a class="tocitem" href="#Index"><span>Index</span></a></li><li><a class="tocitem" href="#Docstrings"><span>Docstrings</span></a></li></ul></li><li><a class="tocitem" href="../Composition/">Composing Models and Building Reusable Components</a></li><li><a class="tocitem" href="../Validation/">Model Validation and Units</a></li><li><a class="tocitem" href="../DependencyGraphs/">Dependency Graphs</a></li><li><a class="tocitem" href="../FAQ/">Frequently Asked Questions</a></li></ul></li><li><span class="tocitem">System Types</span><ul><li><a class="tocitem" href="../../systems/ODESystem/">ODESystem</a></li><li><a class="tocitem" href="../../systems/SDESystem/">SDESystem</a></li><li><a class="tocitem" href="../../systems/JumpSystem/">JumpSystem</a></li><li><a class="tocitem" href="../../systems/NonlinearSystem/">NonlinearSystem</a></li><li><a class="tocitem" href="../../systems/OptimizationSystem/">OptimizationSystem</a></li><li><a class="tocitem" href="../../systems/ControlSystem/">ControlSystem</a></li><li><a class="tocitem" href="../../systems/PDESystem/">PDESystem</a></li></ul></li><li><a class="tocitem" href="../../comparison/">Comparison of ModelingToolkit vs Equation-Based and Block Modeling Languages</a></li><li><a class="tocitem" href="../../internals/">Internal Details</a></li></ul><div class="docs-version-selector field has-addons"><div class="control"><span class="docs-label button is-static is-size-7">Version</span></div><div class="docs-selector control is-expanded"><div class="select is-fullwidth is-size-7"><select id="documenter-version-selector"></select></div></div></div></nav><div class="docs-main"><header class="docs-navbar"><nav class="breadcrumb"><ul class="is-hidden-mobile"><li><a class="is-disabled">Basics</a></li><li class="is-active"><a href>Symbolic metadata</a></li></ul><ul class="is-hidden-tablet"><li class="is-active"><a href>Symbolic metadata</a></li></ul></nav><div class="docs-right"><a class="docs-edit-link" href="https://github.com/SciML/ModelingToolkit.jl/blob/master/docs/src/basics/Variable_metadata.md" title="Edit on GitHub"><span class="docs-icon fab"></span><span class="docs-label is-hidden-touch">Edit on GitHub</span></a><a class="docs-settings-button fas fa-cog" id="documenter-settings-button" href="#" title="Settings"></a><a class="docs-sidebar-button fa fa-bars is-hidden-desktop" id="documenter-sidebar-button" href="#"></a></div></header><article class="content" id="documenter-page"><h1 id="Symbolic-metadata"><a class="docs-heading-anchor" href="#Symbolic-metadata">Symbolic metadata</a><a id="Symbolic-metadata-1"></a><a class="docs-heading-anchor-permalink" href="#Symbolic-metadata" title="Permalink"></a></h1><p>It is possible to add metadata to symbolic variables. The following information can be added (note, it's possible to extend this to user-defined metadata as well)</p><h2 id="Input-or-output"><a class="docs-heading-anchor" href="#Input-or-output">Input or output</a><a id="Input-or-output-1"></a><a class="docs-heading-anchor-permalink" href="#Input-or-output" title="Permalink"></a></h2><p>Designate a variable as either an input or an output using the following</p><pre><code class="language-julia hljs">using ModelingToolkit
@variables u [input=true]
isinput(u)</code></pre><pre class="documenter-example-output"><code class="nohighlight hljs ansi">true</code></pre><pre><code class="language-julia hljs">@variables y [output=true]
isoutput(y)</code></pre><pre class="documenter-example-output"><code class="nohighlight hljs ansi">true</code></pre><h2 id="Bounds"><a class="docs-heading-anchor" href="#Bounds">Bounds</a><a id="Bounds-1"></a><a class="docs-heading-anchor-permalink" href="#Bounds" title="Permalink"></a></h2><p>Bounds are useful when parameters are to be optimized, or to express intervals of uncertainty.</p><pre><code class="language-julia hljs">@variables u [bounds=(-1,1)]
hasbounds(u)</code></pre><pre class="documenter-example-output"><code class="nohighlight hljs ansi">true</code></pre><pre><code class="language-julia hljs">getbounds(u)</code></pre><pre class="documenter-example-output"><code class="nohighlight hljs ansi">(-1, 1)</code></pre><h2 id="Mark-input-as-a-disturbance"><a class="docs-heading-anchor" href="#Mark-input-as-a-disturbance">Mark input as a disturbance</a><a id="Mark-input-as-a-disturbance-1"></a><a class="docs-heading-anchor-permalink" href="#Mark-input-as-a-disturbance" title="Permalink"></a></h2><p>Indicate that an input is not available for control, i.e., it's a disturbance input.</p><pre><code class="language-julia hljs">@variables u [input=true, disturbance=true]
isdisturbance(u)</code></pre><pre class="documenter-example-output"><code class="nohighlight hljs ansi">true</code></pre><h2 id="Mark-parameter-as-tunable"><a class="docs-heading-anchor" href="#Mark-parameter-as-tunable">Mark parameter as tunable</a><a id="Mark-parameter-as-tunable-1"></a><a class="docs-heading-anchor-permalink" href="#Mark-parameter-as-tunable" title="Permalink"></a></h2><p>Indicate that a parameter can be automatically tuned by automatic control tuning apps.</p><pre><code class="language-julia hljs">@parameters Kp [tunable=true]
istunable(Kp)</code></pre><pre class="documenter-example-output"><code class="nohighlight hljs ansi">true</code></pre><h2 id="Probability-distributions"><a class="docs-heading-anchor" href="#Probability-distributions">Probability distributions</a><a id="Probability-distributions-1"></a><a class="docs-heading-anchor-permalink" href="#Probability-distributions" title="Permalink"></a></h2><p>A probability distribution may be associated with a parameter to indicate either uncertainty about it's value, or as a prior distribution for Bayesian optimization.</p><pre><code class="language-julia hljs">using Distributions
d = Normal(10, 1)
@parameters m [dist=d]
hasdist(m)</code></pre><pre><code class="language-julia hljs">getdist(m)</code></pre><h2 id="Additional-functions"><a class="docs-heading-anchor" href="#Additional-functions">Additional functions</a><a id="Additional-functions-1"></a><a class="docs-heading-anchor-permalink" href="#Additional-functions" title="Permalink"></a></h2><p>For systems that contain parameters with metadata like described above have some additional functions defined for convenience. In the example below, we define a system with tunable parameters and extract bounds vectors</p><pre><code class="language-julia hljs">@parameters t
Dₜ = Differential(t)
@variables x(t)=0 u(t)=0 [input=true] y(t)=0 [output=true]
@parameters T [tunable = true, bounds = (0, Inf)]
@parameters k [tunable = true, bounds = (0, Inf)]
eqs = [
Dₜ(x) ~ (-x + k*u) / T # A first-order system with time constant T and gain k
y ~ x
]
sys = ODESystem(eqs, t, name=:tunable_first_order)</code></pre><p class="math-container">\[ \begin{align}
\frac{dx(t)}{dt} =& \frac{k u\left( t \right) - x\left( t \right)}{T} \\
y\left( t \right) =& x\left( t \right)
\end{align}
\]</p><pre><code class="language-julia hljs">p = tunable_parameters(sys) # extract all parameters marked as tunable</code></pre><pre class="documenter-example-output"><code class="nohighlight hljs ansi">2-element Vector{Sym{Real, Base.ImmutableDict{DataType, Any}}}:
k
T</code></pre><pre><code class="language-julia hljs">lb, ub = getbounds(p) # operating on a vector, we get lower and upper bound vectors</code></pre><pre class="documenter-example-output"><code class="nohighlight hljs ansi">(lb = [0, 0], ub = [Inf, Inf])</code></pre><pre><code class="language-julia hljs">b = getbounds(sys) # Operating on the system, we get a dict</code></pre><pre class="documenter-example-output"><code class="nohighlight hljs ansi">Dict{Sym{Real, Base.ImmutableDict{DataType, Any}}, Tuple{Int64, Float64}} with 2 entries:
k => (0, Inf)
T => (0, Inf)</code></pre><h2 id="Index"><a class="docs-heading-anchor" href="#Index">Index</a><a id="Index-1"></a><a class="docs-heading-anchor-permalink" href="#Index" title="Permalink"></a></h2><ul><li><a href="#ModelingToolkit.getbounds-Tuple{Any}"><code>ModelingToolkit.getbounds</code></a></li><li><a href="#ModelingToolkit.getbounds-Tuple{AbstractVector}"><code>ModelingToolkit.getbounds</code></a></li><li><a href="#ModelingToolkit.getbounds-Tuple{ModelingToolkit.AbstractSystem}"><code>ModelingToolkit.getbounds</code></a></li><li><a href="#ModelingToolkit.getdist-Tuple{Any}"><code>ModelingToolkit.getdist</code></a></li><li><a href="#ModelingToolkit.hasbounds-Tuple{Any}"><code>ModelingToolkit.hasbounds</code></a></li><li><a href="#ModelingToolkit.hasdist-Tuple{Any}"><code>ModelingToolkit.hasdist</code></a></li><li><a href="#ModelingToolkit.isdisturbance-Tuple{Any}"><code>ModelingToolkit.isdisturbance</code></a></li><li><a href="#ModelingToolkit.istunable"><code>ModelingToolkit.istunable</code></a></li><li><a href="#ModelingToolkit.tunable_parameters"><code>ModelingToolkit.tunable_parameters</code></a></li></ul><h2 id="Docstrings"><a class="docs-heading-anchor" href="#Docstrings">Docstrings</a><a id="Docstrings-1"></a><a class="docs-heading-anchor-permalink" href="#Docstrings" title="Permalink"></a></h2><article class="docstring"><header><a class="docstring-binding" id="ModelingToolkit.getbounds-Tuple{AbstractVector}" href="#ModelingToolkit.getbounds-Tuple{AbstractVector}"><code>ModelingToolkit.getbounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia hljs">lb, ub = getbounds(p::AbstractVector)</code></pre><p>Return vectors of lower and upper bounds of parameter vector <code>p</code>. Create parameters with bounds like this</p><pre><code class="nohighlight hljs">@parameters p [bounds=(-1, 1)]</code></pre><p>See also <a href="#ModelingToolkit.tunable_parameters"><code>tunable_parameters</code></a>, <a href="#ModelingToolkit.hasbounds-Tuple{Any}"><code>hasbounds</code></a></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/SciML/ModelingToolkit.jl/blob/fd279c0377da50331fe920d6dd62f2816e60b02d/src/variables.jl#L253-L262">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="ModelingToolkit.getbounds-Tuple{Any}" href="#ModelingToolkit.getbounds-Tuple{Any}"><code>ModelingToolkit.getbounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia hljs">getbounds(x)</code></pre><p>Get the bounds associated with symbolc variable <code>x</code>. Create parameters with bounds like this</p><pre><code class="nohighlight hljs">@parameters p [bounds=(-1, 1)]</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/SciML/ModelingToolkit.jl/blob/fd279c0377da50331fe920d6dd62f2816e60b02d/src/variables.jl#L117-L125">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="ModelingToolkit.getbounds-Tuple{ModelingToolkit.AbstractSystem}" href="#ModelingToolkit.getbounds-Tuple{ModelingToolkit.AbstractSystem}"><code>ModelingToolkit.getbounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia hljs">getbounds(sys::ModelingToolkit.AbstractSystem)</code></pre><p>Returns a dict with pairs <code>p => (lb, ub)</code> mapping parameters of <code>sys</code> to lower and upper bounds. Create parameters with bounds like this</p><pre><code class="nohighlight hljs">@parameters p [bounds=(-1, 1)]</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/SciML/ModelingToolkit.jl/blob/fd279c0377da50331fe920d6dd62f2816e60b02d/src/variables.jl#L239-L247">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="ModelingToolkit.getdist-Tuple{Any}" href="#ModelingToolkit.getdist-Tuple{Any}"><code>ModelingToolkit.getdist</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia hljs">getdist(x)</code></pre><p>Get the probability distribution associated with symbolc variable <code>x</code>. If no distribution is associated with <code>x</code>, <code>nothing</code> is returned. Create parameters with associated distributions like this</p><pre><code class="language-julia hljs">using Distributions
d = Normal(0, 1)
@parameters u [dist=d]
hasdist(u) # true
getdist(u) # retrieve distribution</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/SciML/ModelingToolkit.jl/blob/fd279c0377da50331fe920d6dd62f2816e60b02d/src/variables.jl#L190-L203">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="ModelingToolkit.hasbounds-Tuple{Any}" href="#ModelingToolkit.hasbounds-Tuple{Any}"><code>ModelingToolkit.hasbounds</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia hljs">hasbounds(x)</code></pre><p>Determine whether or not symbolic variable <code>x</code> has bounds associated with it. See also <a href="#ModelingToolkit.getbounds-Tuple{AbstractVector}"><code>getbounds</code></a>.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/SciML/ModelingToolkit.jl/blob/fd279c0377da50331fe920d6dd62f2816e60b02d/src/variables.jl#L132-L137">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="ModelingToolkit.hasdist-Tuple{Any}" href="#ModelingToolkit.hasdist-Tuple{Any}"><code>ModelingToolkit.hasdist</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia hljs">hasdist(x)</code></pre><p>Determine whether or not symbolic variable <code>x</code> has a probability distribution associated with it.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/SciML/ModelingToolkit.jl/blob/fd279c0377da50331fe920d6dd62f2816e60b02d/src/variables.jl#L210-L214">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="ModelingToolkit.isdisturbance-Tuple{Any}" href="#ModelingToolkit.isdisturbance-Tuple{Any}"><code>ModelingToolkit.isdisturbance</code></a> — <span class="docstring-category">Method</span></header><section><div><pre><code class="language-julia hljs">isdisturbance(x)</code></pre><p>Determine whether or not symbolic variable <code>x</code> is marked as a disturbance input.</p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/SciML/ModelingToolkit.jl/blob/fd279c0377da50331fe920d6dd62f2816e60b02d/src/variables.jl#L149-L153">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="ModelingToolkit.istunable" href="#ModelingToolkit.istunable"><code>ModelingToolkit.istunable</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia hljs">istunable(x, default = false)</code></pre><p>Determine whether or not symbolic variable <code>x</code> is marked as a tunable for an automatic tuning algorithm.</p><p><code>default</code> indicates whether variables without <code>tunable</code> metadata are to be considered tunable or not.</p><p>Create a tunable parameter by</p><pre><code class="nohighlight hljs">@parameters u [tunable=true]</code></pre><p>See also <a href="#ModelingToolkit.tunable_parameters"><code>tunable_parameters</code></a>, <a href="#ModelingToolkit.getbounds-Tuple{AbstractVector}"><code>getbounds</code></a></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/SciML/ModelingToolkit.jl/blob/fd279c0377da50331fe920d6dd62f2816e60b02d/src/variables.jl#L166-L178">source</a></section></article><article class="docstring"><header><a class="docstring-binding" id="ModelingToolkit.tunable_parameters" href="#ModelingToolkit.tunable_parameters"><code>ModelingToolkit.tunable_parameters</code></a> — <span class="docstring-category">Function</span></header><section><div><pre><code class="language-julia hljs">tunable_parameters(sys, p = parameters(sys); default=false)</code></pre><p>Get all parameters of <code>sys</code> that are marked as <code>tunable</code>.</p><p>Keyword argument <code>default</code> indicates whether variables without <code>tunable</code> metadata are to be considered tunable or not.</p><p>Create a tunable parameter by</p><pre><code class="nohighlight hljs">@parameters u [tunable=true]</code></pre><p>See also <a href="#ModelingToolkit.getbounds-Tuple{AbstractVector}"><code>getbounds</code></a>, <a href="#ModelingToolkit.istunable"><code>istunable</code></a></p></div><a class="docs-sourcelink" target="_blank" href="https://github.com/SciML/ModelingToolkit.jl/blob/fd279c0377da50331fe920d6dd62f2816e60b02d/src/variables.jl#L222-L234">source</a></section></article></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../ContextualVariables/">« Contextual Variable Types</a><a class="docs-footer-nextpage" href="../Composition/">Composing Models and Building Reusable Components »</a><div class="flexbox-break"></div><p class="footer-message">Powered by <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> and the <a href="https://julialang.org/">Julia Programming Language</a>.</p></nav></div><div class="modal" id="documenter-settings"><div class="modal-background"></div><div class="modal-card"><header class="modal-card-head"><p class="modal-card-title">Settings</p><button class="delete"></button></header><section class="modal-card-body"><p><label class="label">Theme</label><div class="select"><select id="documenter-themepicker"><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 0.27.19 on <span class="colophon-date" title="Monday 6 June 2022 22:20">Monday 6 June 2022</span>. Using Julia version 1.7.3.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html>