CFSpy
CFSpy is a package to simulate the output of a control system by means of the Chen-Fliess series.
It provides:
- The list of iterated integrals indexed by words of a certain length or less.
- The list of Lie derivatives indexed by words of a certain length or less.
- A single iterated integral indexed by a given word.
- A single Lie derivative indexed by a given word.
Overview
CFSpy is a Python library that contains the following functions:
| Function | Description |
|---|---|
| iter_int | A function for the numerical computation of a list of iterated integrals |
| iter_lie | A function for the analytical computation of a list of Lie derivatives |
| single_iter_int | A function for the numerical computation of a single iterated integral |
| single_iter_lie | A function for the analytical computation of a single Lie derivative |
CFSpy is used for:
- Simulation of the output of a control systems.
- Reachability analysis of a control system.
Installation
Currently, CFSpy supports releases of Python 3.12.4 onwards.
To install the current release:
$ pip install --upgrade CFSpy
Getting Started
Minimal Example
from CFS import iter_int, iter_lie, single_iter_int, single_iter_lie
import numpy as np
from scipy.integrate import solve_ivp
import matplotlib.pyplot as plt
import sympy as sp
# Define the Lotka-Volterra system
def system(t, x, u1_func, u2_func):
x1, x2 = x
u1 = u1_func(t)
u2 = u2_func(t)
dx1 = -x1*x2 + x1 * u1
dx2 = x1*x2 - x2* u2
return [dx1, dx2]
# Input 1
def u1_func(t):
return np.sin(t)
# Input 2
def u2_func(t):
return np.cos(t)
# Initial condition
x0 = [1/3,2/3]
# Time range
t0 = 0
tf = 3
dt = 0.001
t_span = (t0, tf)
# Simulation of the system
solution = solve_ivp(system, t_span, x0, args=(u1_func, u2_func), dense_output=True)
# Partition of the time interval
t = np.linspace(t_span[0], t_span[1], int((tf-t0)//dt+1))
y = solution.sol(t)
# Define the symbolic variables
x1, x2 = sp.symbols('x1 x2')
x = sp.Matrix([x1, x2])
# Define the system symbolically
g = sp.transpose(sp.Matrix([[-x1*x2, x1*x2], [x1, 0], [0, - x2]]))
# Define the output symbolically
h = x1
# The truncation of the length of the words that index the Chen-Fliess series
Ntrunc = 4
# Coefficients of the Chen-Fliess series evaluated at the initial state
Ceta = np.array(iter_lie(h,g,x,Ntrunc).subs([(x[0], 1/3),(x[1], 2/3)]))
# inputs as arrays
u1 = np.sin(t)
u2 = np.cos(t)
# input array
u = np.vstack([u1, u2])
# List of iterated integral
Eu = iter_int(u,t0, tf, dt, Ntrunc)
# Chen-Fliess series
F_cu = x0[0]+np.sum(Ceta*Eu, axis = 0)
# Graph of the output and the Chen-Fliess series
plt.figure(figsize = (12,5))
plt.plot(t, y[0].T)
plt.plot(t, F_cu, color='red', linewidth=5, linestyle = '--', alpha = 0.5)
plt.xlabel('$t$')
plt.ylabel('$x_1$')
plt.legend(['Output of the system','Chen-Fliess series'])
plt.grid()
plt.show()
For more examples, see the CFSpy demos
Resources
Contributing
All feedback is welcome.
Asking for help
Please reach out if you have any questions:
License
CFSpy is open-source and released under the MIT License.
BibTeX
Feel free to cite my work:
@article{iperezave,
title={CFSpy},
author={Perez Avellaneda, Ivan},
journal={GitHub. Note: https://github.com/iperezav/CFSpy},
volume={1},
year={2024}
}
Release files for CFSpy 1.2.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| cfspy-1.2.3.tar.gz | 9.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| cfspy-1.2.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 22.6 kB
Release files / cfspy-1.2.3.tar.gz
| Download URL | cfspy-1.2.3.tar.gz |
|---|---|
| Size | 9.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
be8ddb31d76589934e297ce054dd0b9b9eb4ce9b463d2d83ade4e271b43c9907
|
|
BLAKE2b-256 checksum How to use checksums |
7ce724f46d4489f7ea02bee84bb008b682ffbc2da3d5ca3c661f324f1651446d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.3
|
Release files / cfspy-1.2.3-py3-none-any.whl
| Download URL | cfspy-1.2.3-py3-none-any.whl |
|---|---|
| Size | 12.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
a749ffb64637e4d9eff6898e234d9af5319af55aec3f4b8010895c6622b3c2a8
|
|
BLAKE2b-256 checksum How to use checksums |
d9183b57765d1e64464ce24883a7176904970c96afd41b90ca3c0ba3e3574486
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.3
|