Ejemplo n.º 1
0
 def input(self, input_):
     if input_ is None:  # or other checks?
         input_ = empty_array()
     if isinstance(input_, sp.Expr):  # check it's a single dynamicsymbol?
         input_ = Array([input_])
     self.dim_input = len(input_)
     self._inputs = input_
Ejemplo n.º 2
0
 def state(self, state):
     if state is None:  # or other checks?
         state = empty_array()
     if isinstance(state, sp.Expr):
         state = Array([state])
     self.dim_state = len(state)
     self._state = state
Ejemplo n.º 3
0
 def state(self, state):
     if state is None:  # or other checks?
         state = empty_array()
     else:
         raise ValueError("Memoryless system should not have state or " +
                          "state_equation")
     self.dim_state = len(state)
     self._state = state
Ejemplo n.º 4
0
 def update_state_jacobian_function(self):
     if not self.dim_state or self.state_equation == empty_array():
         return
     self.state_jacobian_equation_function = self.code_generator(
         [dynamicsymbols._t] + sp.flatten(self.state) +
         sp.flatten(self.input),
         self.state_jacobian_equation.subs(self.constants_values),
         **self.code_generator_args)
Ejemplo n.º 5
0
 def update_input_jacobian_function(self):
     # TODO: state-less systems should have an input/output jacobian
     if not self.dim_state or self.state_equation == empty_array():
         return
     self.input_jacobian_equation_function = self.code_generator(
         [dynamicsymbols._t] + sp.flatten(self.state) +
         sp.flatten(self.input),
         self.input_jacobian_equation.subs(self.constants_values),
         **self.code_generator_args)
Ejemplo n.º 6
0
 def update_output_equation_function(self):
     if not self.dim_output or self.output_equation == empty_array():
         return
     if self.dim_state:
         self.output_equation_function = self.code_generator(
             [dynamicsymbols._t] + sp.flatten(self.state),
             self.output_equation.subs(self.constants_values),
             **self.code_generator_args)
     else:
         self.output_equation_function = self.code_generator(
             [dynamicsymbols._t] + sp.flatten(self.input),
             self.output_equation.subs(self.constants_values),
             **self.code_generator_args)
Ejemplo n.º 7
0
    def state_equation(self, state_equation):
        if state_equation is None:  # or other checks?
            state_equation = empty_array()
        else:
            assert len(state_equation) == len(self.state)
            assert find_dynamicsymbols(state_equation) <= (set(self.state)
                                                           | set(self.input))
            assert state_equation.atoms(
                sp.Symbol) <= (set(self.constants_values.keys())
                               | set([dynamicsymbols._t]))

        self._state_equation = state_equation
        self.update_state_equation_function()

        self.state_jacobian_equation = grad(self.state_equation, self.state)
        self.update_state_jacobian_function()

        self.input_jacobian_equation = grad(self.state_equation, self.input)
        self.update_input_jacobian_function()
Ejemplo n.º 8
0
    def output_equation(self, output_equation):
        if isinstance(output_equation, sp.Expr):
            output_equation = Array([output_equation])
        if output_equation is None and self.dim_state == 0:
            output_equation = empty_array()
        else:
            if output_equation is None:
                output_equation = self.state

            assert output_equation.atoms(
                sp.Symbol) <= (set(self.constants_values.keys())
                               | set([dynamicsymbols._t]))

            if self.dim_state:
                assert find_dynamicsymbols(output_equation) <= set(self.state)
            else:
                assert find_dynamicsymbols(output_equation) <= set(self.input)

        self.dim_output = len(output_equation)

        self._output_equation = output_equation
        self.update_output_equation_function()