Data-driven control: theory and applications