def test_syn_ss_sol_simulate(self): """Verifies that dyn_ss_sol mathes a simulation""" for roll in np.linspace(math.radians(-20), math.radians(20), num=11): for u in np.linspace(1, 30, num=10): A, B = create_dyn_state_matrices(u, self.VM) # Convert to discrete time system ss = StateSpace(A, B, np.eye(2), np.zeros((2, 2))) ss = ss.sample(0.01) for sa in np.linspace(math.radians(-20), math.radians(20), num=11): inp = np.array([[sa], [roll]]) # Simulate for 1 second x1 = np.zeros((2, 1)) for _ in range(100): x1 = ss.A @ x1 + ss.B @ inp # Compute steady state solution directly x2 = dyn_ss_sol(sa, u, roll, self.VM) np.testing.assert_almost_equal(x1, x2, decimal=3)
#Velocidade Real df = pd.read_csv('file.csv') velocidadeReal = df['Velocidade'].tolist() #modelo do sistema A = np.array([[-R / L, -K / L], [K / J, -b / J]]) B = np.array([[1 / L, 0], [0, -1 / J]]) C = np.array([0, 1]) D = np.array([0, 0]) sys = StateSpace(A, B, C, D) #discretizando o modelo dsys = sys.sample(dt) #Setando os dados que serao usados Samples = len(velocidadeReal) tempo = np.arange(0, (Samples + 1) * dt, dt) P = np.array([[0.1389, 0], [0, 0.0389]]) #Sendo Q a covariancia do ruido do preocesso. O que representa a incerteza do modelo Q = np.array([[0.1, 0], [0, 0.1]]) #Sendo R ruido na medicao R = [0.1] #Imagina-se os estados iniciais como 0