Main

(:html:)

<iframe width="560" height="315" src="https://www.youtube.com/embed/U7uyj9BaNKg" frameborder="0" allowfullscreen></iframe>

(:htmlend:)
~~* [[Attach:gravity_tanks.pdf|Gravity Drained Tank Problem]]~~

!!!! DAE Integrator and Optimizer

!!!! Source Code

import numpy as np

import matplotlib.pyplot as plt

def tank(c1,c2):

Ac = 2 # m^2

qin = 0.5 # m^3/hr

dt = 0.5 # hr

tf = 10.0 # hr

h1 = 0

h2 = 0

t = 0

ts = np.empty(21)

h1s = np.empty(21)

h2s = np.empty(21)

i = 0

while t<=10.0:

ts[i] = t

h1s[i] = h1

h2s[i] = h2

qout1 = c1 * pow(h1,0.5)

qout2 = c2 * pow(h2,0.5)

h1 = (qin-qout1)*dt/Ac + h1

if h1>1:

h1 = 1

h2 = (qout1-qout2)*dt/Ac + h2

i = i + 1

t = t + dt

# plot data

plt.figure(1)

plt.plot(ts,h1s)

plt.plot(ts,h2s)

plt.xlabel("Time (hrs)")

plt.ylabel("Height (m)")

plt.show()

# call function

tank(0.13,0.20)

Euler's method is used to solve a set of two differential equations in Excel and Python.

* [[Attach:gravity_tanks.pdf|Gravity Drained Tank Problem]]

* [[Attach:gravity_tank_files.zip|Gravity Drained Tank Files]]

(:html:)

<iframe width="560" height="315" src="https://www.youtube.com/embed/ygoohjN_Lww" frameborder="0" allowfullscreen></iframe>

(:htmlend:)

!!!! DAE Integrator and Optimizer
~~This same example problem is also demonstrated with ~~[[Main/ExcelEulers|Spreadsheet Programming]] and in the [[Main/MatlabDynamicSim|Matlab programming language]].

## Solve Differential Equations in Python

## Main.PythonDynamicSim History

Hide minor edits - Show changes to output

Added lines 117-122:

(:htmlend:)

!!!! 4. ODEINT Scale-up for Large Sets of Equations

(:html:)

<iframe width="560" height="315" src="https://www.youtube.com/embed/8kx6vC9gTLo" frameborder="0" allowfullscreen></iframe>

!!!! 4. ODEINT Scale-up for Large Sets of Equations

(:html:)

<iframe width="560" height="315" src="https://www.youtube.com/embed/8kx6vC9gTLo" frameborder="0" allowfullscreen></iframe>

Changed lines 111-121 from:

This ~~5 minute tutorial gives ~~step-by-step instructions on how to simulate dynamic systems. Dynamic systems may have differential and algebraic equations (DAEs) or just differential equations (ODEs) that cause a time evolution of the response. ~~The tutorial covers the same problem in both MATLAB and~~ Python.

* [[Attach:dynamics.zip|Dynamic Simulation Files (dynamics.zip)]]

(:html:)

<iframe width="560" height="315" src="//www.youtube.com/embed/-IDTagajoyA?rel=0" frameborder="0" allowfullscreen></iframe>

(:htmlend:)

----

The Python package Scipy offers several solvers to numerically simulate the solution of sets of differential equations. ~~Below is an example of solving a first-order decay with the APM solver in Python~~.~~ The objective is to fit the differential equation solution to data by adjusting unknown parameters until the model and measured values match.~~

* [[Attach:dynamics.zip|Dynamic Simulation Files (dynamics.zip)]]

(:html:)

<iframe width="560" height="315" src="//www.youtube.com/embed/-IDTagajoyA?rel=0" frameborder="0" allowfullscreen></iframe>

(:htmlend:)

----

The Python package Scipy offers several solvers to numerically simulate the solution of sets of differential equations

to:

This tutorial gives step-by-step instructions on how to simulate dynamic systems. Dynamic systems may have differential and algebraic equations (DAEs) or just differential equations (ODEs) that cause a time evolution of the response. Below is an example of solving a first-order decay with the APM solver in Python. The objective is to fit the differential equation solution to data by adjusting unknown parameters until the model and measured values match.

* [[Attach:dynamic_estimation.zip|Dynamic Estimation Files (dynamic_estimation.zip)]]

* [[Attach:dynamic_estimation.zip|Dynamic Estimation Files (dynamic_estimation.zip)]]

Added lines 63-66:

(:html:)

<iframe width="560" height="315" src="https://www.youtube.com/embed/U7uyj9BaNKg" frameborder="0" allowfullscreen></iframe>

(:htmlend:)

Added lines 7-8:

* [[Attach:gravity_tanks.pdf|Gravity Drained Tank Problem]]

Deleted line 12:

Changed lines 63-100 from:

to:

import numpy as np

import matplotlib.pyplot as plt

from scipy.integrate import odeint

def tank(h,t):

# constants

c1 = 0.13

c2 = 0.20

Ac = 2 # m^2

# inflow

qin = 0.5 # m^3/hr

# outflow

qout1 = c1 * h[0]**0.5

qout2 = c2 * h[1]**0.5

# differential equations

dhdt1 = (qin - qout1) / Ac

dhdt2 = (qout1 - qout2) / Ac

# overflow conditions

if h[0]>=1 and dhdt1>=0:

dhdt1 = 0

if h[1]>=1 and dhdt2>=0:

dhdt2 = 0

dhdt = [dhdt1,dhdt2]

return dhdt

# integrate the equations

t = np.linspace(0,10) # times to report solution

h0 = [0,0] # initial conditions for height

y = odeint(tank,h0,t) # integrate

# plot results

plt.figure(1)

plt.plot(t,y[:,0],'b-')

plt.plot(t,y[:,1],'r--')

plt.xlabel('Time (hrs)')

plt.ylabel('Height (m)')

plt.legend(['h1','h2'])

plt.show()

import matplotlib.pyplot as plt

from scipy.integrate import odeint

def tank(h,t):

# constants

c1 = 0.13

c2 = 0.20

Ac = 2 # m^2

# inflow

qin = 0.5 # m^3/hr

# outflow

qout1 = c1 * h[0]**0.5

qout2 = c2 * h[1]**0.5

# differential equations

dhdt1 = (qin - qout1) / Ac

dhdt2 = (qout1 - qout2) / Ac

# overflow conditions

if h[0]>=1 and dhdt1>=0:

dhdt1 = 0

if h[1]>=1 and dhdt2>=0:

dhdt2 = 0

dhdt = [dhdt1,dhdt2]

return dhdt

# integrate the equations

t = np.linspace(0,10) # times to report solution

h0 = [0,0] # initial conditions for height

y = odeint(tank,h0,t) # integrate

# plot results

plt.figure(1)

plt.plot(t,y[:,0],'b-')

plt.plot(t,y[:,1],'r--')

plt.xlabel('Time (hrs)')

plt.ylabel('Height (m)')

plt.legend(['h1','h2'])

plt.show()

Changed line 18 from:

!!!! Source Code

to:

!!!! Euler's Method Source Code

Added lines 5-8:

Differential equations can be solved with different methods in Python. Below are examples that show how to solve differential equations with (1) Euler's method, (2) the ODEINT function from Scipy.Integrate, and (3) APM Python.

!!!! 1. Discretize with Euler's Method

!!!! 1. Discretize with Euler's Method

Changed lines 61-62 from:

to:

!!!! 2. SciPy.Integrate ODEINT Function

!!!! 3. APM Python DAE Integrator and Optimizer

!!!! 3. APM Python DAE Integrator and Optimizer

Added lines 13-56:

!!!! Source Code

import numpy as np

import matplotlib.pyplot as plt

def tank(c1,c2):

Ac = 2 # m^2

qin = 0.5 # m^3/hr

dt = 0.5 # hr

tf = 10.0 # hr

h1 = 0

h2 = 0

t = 0

ts = np.empty(21)

h1s = np.empty(21)

h2s = np.empty(21)

i = 0

while t<=10.0:

ts[i] = t

h1s[i] = h1

h2s[i] = h2

qout1 = c1 * pow(h1,0.5)

qout2 = c2 * pow(h2,0.5)

h1 = (qin-qout1)*dt/Ac + h1

if h1>1:

h1 = 1

h2 = (qout1-qout2)*dt/Ac + h2

i = i + 1

t = t + dt

# plot data

plt.figure(1)

plt.plot(ts,h1s)

plt.plot(ts,h2s)

plt.xlabel("Time (hrs)")

plt.ylabel("Height (m)")

plt.show()

# call function

tank(0.13,0.20)

Added lines 4-14:

Euler's method is used to solve a set of two differential equations in Excel and Python.

* [[Attach:gravity_tanks.pdf|Gravity Drained Tank Problem]]

* [[Attach:gravity_tank_files.zip|Gravity Drained Tank Files]]

(:html:)

<iframe width="560" height="315" src="https://www.youtube.com/embed/ygoohjN_Lww" frameborder="0" allowfullscreen></iframe>

(:htmlend:)

!!!! DAE Integrator and Optimizer

Changed lines 23-27 from:

to:

!!!! Additional Material

This same example problem is also demonstrated with [[Main/ExcelEulers|Spreadsheet Programming]] and in the [[Main/MatlabDynamicSim|Matlab programming language]]. Another example problem demonstrates how to calculate the concentration of CO gas buildup in a room.

* %list list-page% [[http://apmonitor.com/wiki/index.php/Apps/CarbonMonoxide | Case Study on CO Buildup in a Room]]

This same example problem is also demonstrated with [[Main/ExcelEulers|Spreadsheet Programming]] and in the [[Main/MatlabDynamicSim|Matlab programming language]]. Another example problem demonstrates how to calculate the concentration of CO gas buildup in a room.

* %list list-page% [[http://apmonitor.com/wiki/index.php/Apps/CarbonMonoxide | Case Study on CO Buildup in a Room]]

Changed line 10 from:

<iframe width="560" height="315" src="//www.youtube.com/embed/~~YvjG2LRNtKU~~" frameborder="0" allowfullscreen></iframe>

to:

<iframe width="560" height="315" src="//www.youtube.com/embed/-IDTagajoyA?rel=0" frameborder="0" allowfullscreen></iframe>

Added lines 7-8:

* [[Attach:dynamics.zip|Dynamic Simulation Files (dynamics.zip)]]

Added lines 17-18:

* [[Attach:dynamic_estimation.zip|Dynamic Estimation Files (dynamic_estimation.zip)]]

Added line 20:

<iframe width="560" height="315" src="//www.youtube.com/embed/YvjG2LRNtKU" frameborder="0" allowfullscreen></iframe>

Added lines 1-37:

(:title Solve Differential Equations in Python:)

(:keywords introduction, Python, programming language, differential equations, nonlinear, university course:)

(:description Solve Differential Equations in Python - Problem-Solving Techniques for Chemical Engineers at Brigham Young University:)

This 5 minute tutorial gives step-by-step instructions on how to simulate dynamic systems. Dynamic systems may have differential and algebraic equations (DAEs) or just differential equations (ODEs) that cause a time evolution of the response. The tutorial covers the same problem in both MATLAB and Python.

(:html:)

<iframe width="560" height="315" src="//www.youtube.com/embed/YvjG2LRNtKU" frameborder="0" allowfullscreen></iframe>

(:htmlend:)

----

The Python package Scipy offers several solvers to numerically simulate the solution of sets of differential equations. Below is an example of solving a first-order decay with the APM solver in Python. The objective is to fit the differential equation solution to data by adjusting unknown parameters until the model and measured values match.

(:html:)

(:htmlend:)

This same example problem is also demonstrated with [[Main/ExcelEulers|Spreadsheet Programming]] and in the [[Main/MatlabDynamicSim|Matlab programming language]].

----

(:html:)

<div id="disqus_thread"></div>

<script type="text/javascript">

/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */

var disqus_shortname = 'apmonitor'; // required: replace example with your forum shortname

/* * * DON'T EDIT BELOW THIS LINE * * */

(function() {

var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;

dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';

(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);

})();

</script>

<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>

<a href="http://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>

(:htmlend:)

(:keywords introduction, Python, programming language, differential equations, nonlinear, university course:)

(:description Solve Differential Equations in Python - Problem-Solving Techniques for Chemical Engineers at Brigham Young University:)

This 5 minute tutorial gives step-by-step instructions on how to simulate dynamic systems. Dynamic systems may have differential and algebraic equations (DAEs) or just differential equations (ODEs) that cause a time evolution of the response. The tutorial covers the same problem in both MATLAB and Python.

(:html:)

<iframe width="560" height="315" src="//www.youtube.com/embed/YvjG2LRNtKU" frameborder="0" allowfullscreen></iframe>

(:htmlend:)

----

The Python package Scipy offers several solvers to numerically simulate the solution of sets of differential equations. Below is an example of solving a first-order decay with the APM solver in Python. The objective is to fit the differential equation solution to data by adjusting unknown parameters until the model and measured values match.

(:html:)

(:htmlend:)

This same example problem is also demonstrated with [[Main/ExcelEulers|Spreadsheet Programming]] and in the [[Main/MatlabDynamicSim|Matlab programming language]].

----

(:html:)

<div id="disqus_thread"></div>

<script type="text/javascript">

/* * * CONFIGURATION VARIABLES: EDIT BEFORE PASTING INTO YOUR WEBPAGE * * */

var disqus_shortname = 'apmonitor'; // required: replace example with your forum shortname

/* * * DON'T EDIT BELOW THIS LINE * * */

(function() {

var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;

dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';

(document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);

})();

</script>

<noscript>Please enable JavaScript to view the <a href="http://disqus.com/?ref_noscript">comments powered by Disqus.</a></noscript>

<a href="http://disqus.com" class="dsq-brlink">comments powered by <span class="logo-disqus">Disqus</span></a>

(:htmlend:)