{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "This is the table of contents, arranged by topic. \n", "\n", "If you are looking for the use of a particular function, try the [Function index](Function%20index.ipynb).\n", "\n", "There is also a set of [YouTube videos](https://www.youtube.com/channel/UCOf3CPrYPMG4BrgkVPupPqA) linked to the course." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 0. Getting Started\n", "* [Notebook introduction](0_Getting_Started/Notebook%20introduction.ipynb)\n", "* [Extra Python](0_Getting_Started/Extra%20Python.ipynb)\n", "* [Cheatsheet](0_Getting_Started/Cheatsheet.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 1. Dynamics\n", "## 1.1 Modelling\n", "* [Draining cup](1_Dynamics/1_Modelling/Draining%20cup.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.2 Time domain simulation\n", "* [Equation solving tools](1_Dynamics/2_Time_domain_simulation/Equation%20solving%20tools.ipynb)\n", "* [Numeric representation](1_Dynamics/2_Time_domain_simulation/Numeric%20representation.ipynb)\n", "* [Read input from file](1_Dynamics/2_Time_domain_simulation/Read%20input%20from%20file.ipynb)\n", "* [Example: Fed batch bioreactor](1_Dynamics/2_Time_domain_simulation/Fed%20batch%20bioreactor.ipynb)\n", "* [Example: Nonlinear CSTR](1_Dynamics/2_Time_domain_simulation/Nonlinear%20CSTR.ipynb)\n", "* [Example: Mixing system](1_Dynamics/2_Time_domain_simulation/Mixing%20system.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.3 Linear systems\n", "* [Linearisation](1_Dynamics/3_Linear_systems/Linearisation.ipynb)\n", "* [Laplace transforms](1_Dynamics/3_Linear_systems/Laplace%20transforms.ipynb)\n", "* [Convolution](1_Dynamics/3_Linear_systems/Convolution.ipynb)\n", "* [Visualising complex functions](1_Dynamics/3_Linear_systems/Visualising%20complex%20functions.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.4 First and second order system dynamics\n", "* [Standard process inputs](1_Dynamics/4_First_and_second_order_system_dynamics/Standard%20process%20inputs.ipynb)\n", "* [First order systems](1_Dynamics/4_First_and_second_order_system_dynamics/First%20order%20systems.ipynb)\n", "* [Second order systems](1_Dynamics/4_First_and_second_order_system_dynamics/Second%20order%20systems.ipynb)\n", "* [Sinusoidal response](1_Dynamics/4_First_and_second_order_system_dynamics/Sinusoidal%20response.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.5 Complex system dynamics\n", "* [Random response generator](1_Dynamics/5_Complex_system_dynamics/Random%20response%20generator.ipynb)\n", "* [Simulation of arbitrary transfer functions](1_Dynamics/5_Complex_system_dynamics/Simulation%20of%20arbitrary%20transfer%20functions.ipynb)\n", "* [Block diagram simplification](1_Dynamics/5_Complex_system_dynamics/Block%20diagram%20simplification.ipynb)\n", "* [Approximation](1_Dynamics/5_Complex_system_dynamics/Approximation.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.6 Multivariable system representation\n", "* [Transfer function matrices](1_Dynamics/6_Multivariable_system_representation/Transfer%20function%20matrices.ipynb)\n", "* [State space](1_Dynamics/6_Multivariable_system_representation/State%20space.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.7 System identification\n", "* [Regression](1_Dynamics/7_System_identification/Regression.ipynb)\n", "* [Dynamic model parameter estimation](1_Dynamics/7_System_identification/Dynamic%20model%20parameter%20estimation.ipynb)\n", "* [Neural networks](1_Dynamics/7_System_identification/Neural%20networks.ipynb)\n", "* [Identifying discrete-time models](1_Dynamics/7_System_identification/Identifying%20discrete-time%20models.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.8 Frequency domain\n", "* [Fourier series](1_Dynamics/8_Frequency_domain/Fourier%20series.ipynb)\n", "* [Sound and frequency](1_Dynamics/8_Frequency_domain/Sound%20and%20frequency.ipynb)\n", "* [Frequency response plots](1_Dynamics/8_Frequency_domain/Frequency%20response%20plots.ipynb)\n", "* [Asymptotic Bode diagrams](1_Dynamics/8_Frequency_domain/Asymptotic%20Bode%20diagrams.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 1.9 Sampled systems\n", "* [Aliasing](1_Dynamics/9_Sampled_systems/Aliasing.ipynb)\n", "* [Filtering](1_Dynamics/9_Sampled_systems/Filtering.ipynb)\n", "* [The z transform](1_Dynamics/9_Sampled_systems/The%20z%20transform.ipynb)\n", "* [The z domain and continuous systems](1_Dynamics/9_Sampled_systems/The%20z%20domain%20and%20continuous%20systems.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2. Control\n", "\n", "## 2.1 Conventional feedback control\n", "* [Control game](2_Control/1_Conventional_feedback_control/Control%20game.ipynb)\n", "* [PID controller step responses](2_Control/1_Conventional_feedback_control/PID%20controller%20step%20responses.ipynb)\n", "* [Effect of Proportional Control](2_Control/1_Conventional_feedback_control/Effect%20of%20Proportional%20Control.ipynb)\n", "* [PID control on TCLab](tclab/TCLab%20PID.ipynb)\n", "* [Closed loop controlled responses](2_Control/1_Conventional_feedback_control/Closed%20loop%20controlled%20responses.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2.2 Laplace domain analysis of control systems\n", "* [Stability analysis](2_Control/2_Laplace_domain_analysis_of_control_systems/Stability%20analysis.ipynb)\n", "* [SymPy Routh Array](2_Control/2_Laplace_domain_analysis_of_control_systems/SymPy%20Routh%20Array.ipynb)\n", "* [Root locus diagrams](2_Control/2_Laplace_domain_analysis_of_control_systems/Root%20locus%20diagrams.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2.3 PID controller design, tuning and troubleshooting\n", "* [Direct synthesis PID design](2_Control/3_PID_controller_design_tuning_and_troubleshooting/Direct%20synthesis%20PID%20design.ipynb)\n", "* [Optimal control - minimal integral measures](2_Control/3_PID_controller_design_tuning_and_troubleshooting/Optimal%20control%20-%20minimal%20integral%20measures.ipynb)\n", "* [ITAE parameters for FOPDT system](2_Control/3_PID_controller_design_tuning_and_troubleshooting/ITAE%20parameters%20for%20FOPDT%20system.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2.4 Frequency domain analysis of control systems\n", "* [Frequency domain stability](2_Control/4_Frequency_domain_analysis_of_control_systems/Frequency%20domain%20stability.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2.5 Advanced control methods\n", "* [Dead time compensation](2_Control/5_Advanced_control_methods/Dead%20time%20compensation.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2.6 Discrete control and analysis\n", "* [Discrete control](2_Control/6_Discrete_control_and_analysis/Discrete%20control.ipynb)\n", "* [Discrete PI](2_Control/6_Discrete_control_and_analysis/Discrete%20PI.ipynb)\n", "* [Dahlin controller](2_Control/6_Discrete_control_and_analysis/Dahlin%20controller.ipynb)\n", "* [Simple discrete controller simulation](2_Control/6_Discrete_control_and_analysis/Simple%20discrete%20controller%20simulation.ipynb)\n", "* [Noise models](2_Control/6_Discrete_control_and_analysis/Noise%20models.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2.7 Multivariable control\n", "* [Multivariable closed loop transfer functions](2_Control/7_Multivariable_control/Multivariable%20closed%20loop%20transfer%20functions.ipynb)\n", "* [Multivariable stability analysis](2_Control/7_Multivariable_control/Multivariable%20stability%20analysis.ipynb)\n", "* [Multivariable pairing (RGA)](2_Control/7_Multivariable_control/Multivariable%20Pairing.ipynb)\n", "* [Eigenvalues and Eigenvectors](2_Control/7_Multivariable_control/Eigenvalues%20and%20Eigenvectors.ipynb)\n", "* [Decoupling](2_Control/7_Multivariable_control/Decoupling.ipynb)\n", "* [Simple MPC](2_Control/7_Multivariable_control/Simple%20MPC.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 2.8 Control Practice\n", "* [Control valve design](2_Control/8_Control_Practice/Control%20valve%20design.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# Simulation\n", "* [Timing study](Simulation/Timing%20study.ipynb)\n", "* [Hybrid system simulation](Simulation/Hybrid%20system%20simulation.ipynb)\n", "* [Classes](Simulation/Classes.ipynb)\n", "* [Special functions in classes](Simulation/Special%20functions%20in%20classes.ipynb)\n", "* [Object-Oriented simulation](Simulation/Object-Oriented%20simulation.ipynb)\n", "* [Object-Oriented simulation - Discrete](Simulation/Object-Oriented%20simulation%20-%20Discrete.ipynb)\n", "* [Blocksim](Simulation/Blocksim.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# TCLab\n", "* [FOPDT fit](tclab/FOPDT%20fit.ipynb)\n", "* [Interactive PID simulation](tclab/TCLab%20PID.ipynb)\n", "* [Frequency domain](tclab/Frequency%20domain.ipynb)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# tbcontrol\n", "The tbcontrol module contains functions helpful to students learning to solve control problems. It is broken up into submodules." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## symbolic\n", "* `linearise` attempt to linearise a symbolic expression\n", "* `routh` construct a Routh-Hurwitz array\n", "* `pade` pade approximation\n", "* `ss2tf` determine the transfer function version of a state space realisation\n", "* `sampledvalues` invert the Z transform symbolically\n", "* `evaluate_at_times` evaluate a sympy expression at numeric times (useful for plotting responses)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## numeric\n", "* `skogestad_half` find an approximation of a high order system by Skogestad's half rule" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## plotting\n", "* `cross_axis` create an axis in Matplotlib which has spines going through the origin like a Nyquist diagram would" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## loops\n", "* `feedback` calculate the result of having two blocks in a feedback loop" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## responses\n", "Step responses of certain systems\n", "\n", "* `fopdt` first order plus dead time\n", "* `sopdt` second order plus dead time" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.8" } }, "nbformat": 4, "nbformat_minor": 4 }