LSR/env/lib/python3.6/site-packages/control/tests/phaseplot_test.py
2020-06-04 17:24:47 +02:00

85 lines
3.0 KiB
Python

#!/usr/bin/env python
#
# phaseplot_test.py - test phase plot functions
# RMM, 17 24 2011 (based on TestMatlab from v0.4c)
#
# This test suite calls various phaseplot functions. Since the plots
# themselves can't be verified, this is mainly here to make sure all
# of the function arguments are handled correctly. If you run an
# individual test by itself and then type show(), it should pop open
# the figures so that you can check them visually.
import unittest
import numpy as np
import scipy as sp
import matplotlib.pyplot as mpl
from control import phase_plot
from numpy import pi
class TestPhasePlot(unittest.TestCase):
def setUp(self):
pass;
def testInvPendNoSims(self):
phase_plot(self.invpend_ode, (-6,6,10), (-6,6,10));
def testInvPendSims(self):
phase_plot(self.invpend_ode, (-6,6,10), (-6,6,10),
X0 = ([1,1], [-1,1]));
def testInvPendTimePoints(self):
phase_plot(self.invpend_ode, (-6,6,10), (-6,6,10),
X0 = ([1,1], [-1,1]), T=np.linspace(0,5,100));
def testInvPendLogtime(self):
phase_plot(self.invpend_ode, X0 =
[ [-2*pi, 1.6], [-2*pi, 0.5], [-1.8, 2.1],
[-1, 2.1], [4.2, 2.1], [5, 2.1],
[2*pi, -1.6], [2*pi, -0.5], [1.8, -2.1],
[1, -2.1], [-4.2, -2.1], [-5, -2.1] ],
T = np.linspace(0, 40, 200),
logtime=(3, 0.7),
verbose=False)
def testInvPendAuto(self):
phase_plot(self.invpend_ode, lingrid = 0, X0=
[[-2.3056, 2.1], [2.3056, -2.1]], T=6, verbose=False)
def testOscillatorParams(self):
m = 1; b = 1; k = 1; # default values
phase_plot(self.oscillator_ode, timepts = [0.3, 1, 2, 3], X0 =
[[-1,1], [-0.3,1], [0,1], [0.25,1], [0.5,1], [0.7,1],
[1,1], [1.3,1], [1,-1], [0.3,-1], [0,-1], [-0.25,-1],
[-0.5,-1], [-0.7,-1], [-1,-1], [-1.3,-1]],
T = np.linspace(0, 10, 100), parms = (m, b, k));
def testNoArrows(self):
# Test case from aramakrl that was generating a type error
# System does not have arrows
# cf. issue #96,
# https://github.com/python-control/python-control/issues/96
def d1(x1x2,t):
x1,x2 = x1x2
return np.array([x2, x2 - 2*x1])
x1x2_0 = np.array([[-1.,1.], [-1.,-1.], [1.,1.], [1.,-1.],
[-1.,0.],[1.,0.],[0.,-1.],[0.,1.],[0.,0.]])
mpl.figure(1)
phase_plot(d1,X0=x1x2_0,T=100)
# Sample dynamical systems - inverted pendulum
def invpend_ode(self, x, t, m=1., l=1., b=0, g=9.8):
import numpy as np
return (x[1], -b/m*x[1] + (g*l/m) * np.sin(x[0]))
# Sample dynamical systems - oscillator
def oscillator_ode(self, x, t, m=1., b=1, k=1, extra=None):
return (x[1], -k/m*x[0] - b/m*x[1])
def suite():
return unittest.TestLoader().loadTestsFromTestCase(TestPhasePlot)
if __name__ == '__main__':
unittest.main()