|
20 | 20 | S = ss(matrices_S...) |
21 | 21 | T = ss(matrices_T...) |
22 | 22 | bodeplot([S, T], lab = ["S" "" "T" ""], plot_title = "Bode plot of sensitivity functions", |
23 | | - margin = 5Plots.mm)</code></pre><img src="904a706d.svg" alt="Example block output"/><p>The sensitivity functions obtained this way should be equivalent to the ones obtained with the code below</p><pre><code class="language-julia hljs">using ControlSystemsBase |
| 23 | + margin = 5Plots.mm)</code></pre><img src="f644e425.svg" alt="Example block output"/><p>The sensitivity functions obtained this way should be equivalent to the ones obtained with the code below</p><pre><code class="language-julia hljs">using ControlSystemsBase |
24 | 24 | P = tf(1.0, [1, 1]) |> ss |
25 | 25 | C = 1 # Negative feedback assumed in ControlSystems |
26 | 26 | S = sensitivity(P, C) # or feedback(1, P*C) |
|
70 | 70 | ---------- |
71 | 71 | 1.0s + 2.0 |
72 | 72 |
|
73 | | -Continuous-time transfer function model</code></pre><h2 id="Gain-and-phase-margins"><a class="docs-heading-anchor" href="#Gain-and-phase-margins">Gain and phase margins</a><a id="Gain-and-phase-margins-1"></a><a class="docs-heading-anchor-permalink" href="#Gain-and-phase-margins" title="Permalink"></a></h2><p>Further linear analysis can be performed using the <a href="https://juliacontrol.github.io/ControlSystems.jl/stable/lib/analysis/">analysis methods from ControlSystemsBase</a>. For example, calculating the gain and phase margins of a system can be done using</p><pre><code class="language-julia hljs">margin(P)</code></pre><pre class="documenter-example-output"><code class="nohighlight hljs ansi">(wgm = [NaN;;], gm = [Inf;;], wpm = [NaN;;], pm = [Inf;;])</code></pre><p>(they are infinite for this system). A Nyquist plot can be produced using</p><pre><code class="language-julia hljs">nyquistplot(P)</code></pre><img src="cb8bb4dd.svg" alt="Example block output"/><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.linearize"><code>ModelingToolkit.linearize</code></a></li></ul><article class="docstring"><header><a class="docstring-article-toggle-button fa-solid fa-chevron-down" href="javascript:;" title="Collapse docstring"></a><a class="docstring-binding" id="ModelingToolkit.linearize" href="#ModelingToolkit.linearize"><code>ModelingToolkit.linearize</code></a> — <span class="docstring-category">Function</span><span class="is-flex-grow-1 docstring-article-toggle-button" title="Collapse docstring"></span></header><section><div><pre><code class="language-julia hljs">(; A, B, C, D), simplified_sys = linearize(sys, inputs, outputs; t=0.0, op = Dict(), allow_input_derivatives = false, zero_dummy_der=false, kwargs...) |
| 73 | +Continuous-time transfer function model</code></pre><h2 id="Gain-and-phase-margins"><a class="docs-heading-anchor" href="#Gain-and-phase-margins">Gain and phase margins</a><a id="Gain-and-phase-margins-1"></a><a class="docs-heading-anchor-permalink" href="#Gain-and-phase-margins" title="Permalink"></a></h2><p>Further linear analysis can be performed using the <a href="https://juliacontrol.github.io/ControlSystems.jl/stable/lib/analysis/">analysis methods from ControlSystemsBase</a>. For example, calculating the gain and phase margins of a system can be done using</p><pre><code class="language-julia hljs">margin(P)</code></pre><pre class="documenter-example-output"><code class="nohighlight hljs ansi">(wgm = [NaN;;], gm = [Inf;;], wpm = [NaN;;], pm = [Inf;;])</code></pre><p>(they are infinite for this system). A Nyquist plot can be produced using</p><pre><code class="language-julia hljs">nyquistplot(P)</code></pre><img src="b46654cd.svg" alt="Example block output"/><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.linearize"><code>ModelingToolkit.linearize</code></a></li></ul><article class="docstring"><header><a class="docstring-article-toggle-button fa-solid fa-chevron-down" href="javascript:;" title="Collapse docstring"></a><a class="docstring-binding" id="ModelingToolkit.linearize" href="#ModelingToolkit.linearize"><code>ModelingToolkit.linearize</code></a> — <span class="docstring-category">Function</span><span class="is-flex-grow-1 docstring-article-toggle-button" title="Collapse docstring"></span></header><section><div><pre><code class="language-julia hljs">(; A, B, C, D), simplified_sys = linearize(sys, inputs, outputs; t=0.0, op = Dict(), allow_input_derivatives = false, zero_dummy_der=false, kwargs...) |
74 | 74 | (; A, B, C, D) = linearize(simplified_sys, lin_fun; t=0.0, op = Dict(), allow_input_derivatives = false, zero_dummy_der=false)</code></pre><p>Linearize <code>sys</code> between <code>inputs</code> and <code>outputs</code>, both vectors of variables. Return a NamedTuple with the matrices of a linear statespace representation on the form</p><p class="math-container">\[\begin{aligned} |
75 | 75 | ẋ &= Ax + Bu\\ |
76 | 76 | y &= Cx + Du |
|
130 | 130 | ## Symbolic linearization |
131 | 131 | lsys_sym, _ = ModelingToolkit.linearize_symbolic(cl, [f.u], [p.x]) |
132 | 132 |
|
133 | | -@assert substitute(lsys_sym.A, ModelingToolkit.defaults(cl)) == lsys.A</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/SciML/ModelingToolkit.jl/blob/v9.76.0/src/linearization.jl#L589-L687">source</a></section></article></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../hydraulic/">« Hydraulic 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="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option><option value="catppuccin-latte">catppuccin-latte</option><option value="catppuccin-frappe">catppuccin-frappe</option><option value="catppuccin-macchiato">catppuccin-macchiato</option><option value="catppuccin-mocha">catppuccin-mocha</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.10.2 on <span class="colophon-date" title="Thursday 1 May 2025 19:03">Thursday 1 May 2025</span>. Using Julia version 1.11.5.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> |
| 133 | +@assert substitute(lsys_sym.A, ModelingToolkit.defaults(cl)) == lsys.A</code></pre></div><a class="docs-sourcelink" target="_blank" href="https://github.com/SciML/ModelingToolkit.jl/blob/v9.78.0/src/linearization.jl#L589-L687">source</a></section></article></article><nav class="docs-footer"><a class="docs-footer-prevpage" href="../hydraulic/">« Hydraulic 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="auto">Automatic (OS)</option><option value="documenter-light">documenter-light</option><option value="documenter-dark">documenter-dark</option><option value="catppuccin-latte">catppuccin-latte</option><option value="catppuccin-frappe">catppuccin-frappe</option><option value="catppuccin-macchiato">catppuccin-macchiato</option><option value="catppuccin-mocha">catppuccin-mocha</option></select></div></p><hr/><p>This document was generated with <a href="https://github.com/JuliaDocs/Documenter.jl">Documenter.jl</a> version 1.10.2 on <span class="colophon-date" title="Wednesday 7 May 2025 12:06">Wednesday 7 May 2025</span>. Using Julia version 1.11.5.</p></section><footer class="modal-card-foot"></footer></div></div></div></body></html> |
0 commit comments