def test_reset_defaults(self): ct.use_matlab_defaults() ct.reset_defaults() assert not ct.config.defaults['bode.dB'] assert ct.config.defaults['bode.deg'] assert not ct.config.defaults['bode.Hz'] assert ct.config.defaults['freqplot.number_of_samples'] == 1000 assert ct.config.defaults['freqplot.feature_periphery_decades'] == 1.0
def test_reset_defaults(self): ct.use_matlab_defaults() ct.reset_defaults() self.assertEquals(ct.config.bode_dB, False) self.assertEquals(ct.config.bode_deg, True) self.assertEquals(ct.config.bode_Hz, False) self.assertEquals(ct.config.bode_number_of_samples, None) self.assertEquals(ct.config.bode_feature_periphery_decade, 1.0)
def test_reset_defaults(self): ct.use_matlab_defaults() ct.reset_defaults() self.assertEqual(ct.config.defaults['bode.dB'], False) self.assertEqual(ct.config.defaults['bode.deg'], True) self.assertEqual(ct.config.defaults['bode.Hz'], False) self.assertEqual(ct.config.defaults['freqplot.number_of_samples'], None) self.assertEqual( ct.config.defaults['freqplot.feature_periphery_decades'], 1.0)
def test_matlab_bode(self): ct.use_matlab_defaults() # Generate a Bode plot plt.figure() omega = np.logspace(-3, 3, 100) ct.bode_plot(self.sys, omega) # Get the magnitude line mag_axis = plt.gcf().axes[0] mag_line = mag_axis.get_lines() mag_data = mag_line[0].get_data() mag_x, mag_y = mag_data # Make sure the x-axis is in rad/sec and y-axis is in dB np.testing.assert_almost_equal(mag_x[0], 0.001, decimal=6) np.testing.assert_almost_equal(mag_y[0], 20 * log10(10), decimal=3) # Get the phase line phase_axis = plt.gcf().axes[1] phase_line = phase_axis.get_lines() phase_data = phase_line[0].get_data() phase_x, phase_y = phase_data # Make sure the x-axis is in rad/sec and y-axis is in degrees np.testing.assert_almost_equal(phase_x[-1], 1000, decimal=1) np.testing.assert_almost_equal(phase_y[-1], -180, decimal=0) # Override the defaults and make sure that works as well plt.figure() ct.bode_plot(self.sys, omega, dB=True) mag_x, mag_y = (((plt.gcf().axes[0]).get_lines())[0]).get_data() np.testing.assert_almost_equal(mag_y[0], 20 * log10(10), decimal=3) plt.figure() ct.bode_plot(self.sys, omega, Hz=True) mag_x, mag_y = (((plt.gcf().axes[0]).get_lines())[0]).get_data() np.testing.assert_almost_equal(mag_x[0], 0.001 / (2 * pi), decimal=6) plt.figure() ct.bode_plot(self.sys, omega, deg=False) phase_x, phase_y = (((plt.gcf().axes[1]).get_lines())[0]).get_data() np.testing.assert_almost_equal(phase_y[-1], -pi, decimal=2) ct.reset_defaults()
def test_matlab_bode(self): ct.use_matlab_defaults(); # Generate a Bode plot plt.figure() omega = np.logspace(-3, 3, 100) ct.bode_plot(self.sys, omega) # Get the magnitude line mag_axis = plt.gcf().axes[0] mag_line = mag_axis.get_lines() mag_data = mag_line[0].get_data() mag_x, mag_y = mag_data # Make sure the x-axis is in Hertz and y-axis is in dB np.testing.assert_almost_equal(mag_x[0], 0.001 / (2*pi), decimal=6) np.testing.assert_almost_equal(mag_y[0], 20*log10(10), decimal=3) # Get the phase line phase_axis = plt.gcf().axes[1] phase_line = phase_axis.get_lines() phase_data = phase_line[0].get_data() phase_x, phase_y = phase_data # Make sure the x-axis is in Hertz and y-axis is in degrees np.testing.assert_almost_equal(phase_x[-1], 1000 / (2*pi), decimal=1) np.testing.assert_almost_equal(phase_y[-1], -180, decimal=0) # Override the defaults and make sure that works as well plt.figure() ct.bode_plot(self.sys, omega, dB=True) mag_x, mag_y = (((plt.gcf().axes[0]).get_lines())[0]).get_data() np.testing.assert_almost_equal(mag_y[0], 20*log10(10), decimal=3) plt.figure() ct.bode_plot(self.sys, omega, Hz=True) mag_x, mag_y = (((plt.gcf().axes[0]).get_lines())[0]).get_data() np.testing.assert_almost_equal(mag_x[0], 0.001 / (2*pi), decimal=6) plt.figure() ct.bode_plot(self.sys, omega, deg=False) phase_x, phase_y = (((plt.gcf().axes[1]).get_lines())[0]).get_data() np.testing.assert_almost_equal(phase_y[-1], -pi, decimal=2) ct.reset_defaults()
#!/usr/bin/env python3 # -*- coding: utf-8 -*- """ Created on Thu Nov 28 17:30:38 2019 Todos estos códigos requieren comentarios y una limpieza Limpio=NO Comentarios=NO @author: carlos """ import control as ct import sympy as sym import numpy as np import matplotlib.pyplot as plt from scipy import signal from matplotlib.ticker import (MultipleLocator) ct.use_matlab_defaults() K = 2 #Valor inicial a = 2 #Valor inicial ''' primero pasamos las funciones de transferencia usando matematicas simbolicas para asi obtener el vector del numerador y denominador ''' s = sym.symbols('s') Q = sym.expand(K * (s + a)**2) / s G = 1.2 / sym.expand((0.3 * s + 1) * (s + 1) * (1.2 * s + 1)) sym.pprint(Q) sym.pprint(G)