CDS 101: Principles of Feedback and Control

Lecture 4.1: Linear Systems

21 October 2002

Lecture Reading FAQ Homework CDS 101

Lecture

This lecture gives an introduction to linear control systems. The main properties of linear systems are given and the matrix exponential is used to provide a formula for the output response given an initial condition and input signal. Linearization of nonlinear systems as an approximation of the dynamics is also covered.

Mud card responses [advanced search]:

#!/usr/bin/perl # -*- perl -*- # # htdbsearch.cgi - search for matching files in a database directory # RMM, 16 Mar 97 # # This CGI script searches the description files in a directory for a # against a set of criteria # # This script should be called as # # http://machine/path/htdblist.cgi? # or # http://machine/path/htdblist.cgi?db=&args # # where is the name of the configuration file that defines # all of the information needed to generate the listing. The optional # arguments are: # # _count=NN only list the first NN entries # _tight=1 use tight listing # _ssi=1 don't print header, trailer info (for includs) # # Include the necessary libraries require "cgi-lib.pl"; require "htdblib.pl"; # Parse script arguments if (&htdbinit) { # If the form contains some values, use them to search, and return # the results. if ($in{'_dbconfig'}) { # Generate the context header for the browser print &PrintHeader; # Print out the introductory information for search if (defined &SearchHeader) {&{$SearchHeader}($DBName);} # Summarize the search that was performed $rsltheader = defined &ResultHeader ? \&ResultHeader : htdb::ResultHeader; &{$rsltheader}(%in) if (!$in{_ssi}); # Go through and look for matching files if (not &PrintMatches) { &PrintNoMatches if (!in{ssi}); } # Generate the trailer if (defined &dbtrailer) {$dbtrailer = \&DBTrailer}; if (not $dbtrailer) {$dbtrailer = \&htdb::DBTrailer;} &{$dbtrailer}($DBName) if (!in{ssi}); } else { # Check to see if there is a user function for printing the search form if (defined &SearchForm) {$searchform = \&SearchForm}; if (not $searchform) {$searchform = \&htdb::SearchForm;} # Print out the introductory information for search if (defined &SearchHeader) {&{$SearchHeader}($DBName);} # Print the search form &{$searchform}(%in); } } # # Subroutine for printing the matches that occured # sub PrintMatches { my ($num_found); # Go to the database directory and read the contents chdir $DBPath || die "Can't cd to $DBPath"; opendir(DIR, '.') || die "Can't open $DBPath"; @filenames = readdir(DIR); closedir(DIR); # Check to see if there is a user function for checking matches if (defined &CheckEntry) {$checkentry = \&CheckEntry}; if (not $checkentry) {$checkentry = \&htdb::CheckEntry;} # Check to see if there is a user function for parsing filenames if (defined &ParseFname) {$parsefname = \&ParseFname}; if (not $parsefname) {$parsefname = \&htdb::ParseFname;} # Check to see if there is a user function for printing the entry if (defined &PrintEntry) {$printentry = \&PrintEntry}; if (not $printentry) {$printentry = \&htdb::PrintEntry;} # Check to see if there is a user function for printing the entry if (defined &TightEntry) {$tightentry = \&TightEntry}; if (not $tightentry) {$tightentry = \&htdb::TightEntry;} # Open the list environment used for the results # Print the command to generate a list of elements print ($in{_tight} ? "

\n" : "\n"); return $num_found; } # # Subroutine for alerting the user that no matches occured # sub PrintNoMatches { print "

No matches found

\n"; print "Sorry, no entries match your request. "; print "Please choose some different parameters and try again.

\n"; print $footer; }

Reading Material and Handouts

Handouts from lecture

The following materials were handed out in lecture. These have been updated to include any corrections.

Required reading

Supplemental reading

Homework Set #3

This homework set covers linear control systems. The first problem asks for stability, step and frequency response for some common examples of linear systems. The second problem considers stabilization of an inverted pendulum on a cart, using the local linaerization. The remaining problems (for CDS 110 students) include derivation of discrete time linear systems response functions and derivation of the linearized model for the Caltech ducted fan.

Modifications to the homework (link above is always the latest version):

Frequently asked questions on homework and TA hints:

#!/usr/bin/perl # -*- perl -*- # # htdbsearch.cgi - search for matching files in a database directory # RMM, 16 Mar 97 # # This CGI script searches the description files in a directory for a # against a set of criteria # # This script should be called as # # http://machine/path/htdblist.cgi? # or # http://machine/path/htdblist.cgi?db=&args # # where is the name of the configuration file that defines # all of the information needed to generate the listing. The optional # arguments are: # # _count=NN only list the first NN entries # _tight=1 use tight listing # _ssi=1 don't print header, trailer info (for includs) # # Include the necessary libraries require "cgi-lib.pl"; require "htdblib.pl"; # Parse script arguments if (&htdbinit) { # If the form contains some values, use them to search, and return # the results. if ($in{'_dbconfig'}) { # Generate the context header for the browser print &PrintHeader; # Print out the introductory information for search if (defined &SearchHeader) {&{$SearchHeader}($DBName);} # Summarize the search that was performed $rsltheader = defined &ResultHeader ? \&ResultHeader : htdb::ResultHeader; &{$rsltheader}(%in) if (!$in{_ssi}); # Go through and look for matching files if (not &PrintMatches) { &PrintNoMatches if (!in{ssi}); } # Generate the trailer if (defined &dbtrailer) {$dbtrailer = \&DBTrailer}; if (not $dbtrailer) {$dbtrailer = \&htdb::DBTrailer;} &{$dbtrailer}($DBName) if (!in{ssi}); } else { # Check to see if there is a user function for printing the search form if (defined &SearchForm) {$searchform = \&SearchForm}; if (not $searchform) {$searchform = \&htdb::SearchForm;} # Print out the introductory information for search if (defined &SearchHeader) {&{$SearchHeader}($DBName);} # Print the search form &{$searchform}(%in); } } # # Subroutine for printing the matches that occured # sub PrintMatches { my ($num_found); # Go to the database directory and read the contents chdir $DBPath || die "Can't cd to $DBPath"; opendir(DIR, '.') || die "Can't open $DBPath"; @filenames = readdir(DIR); closedir(DIR); # Check to see if there is a user function for checking matches if (defined &CheckEntry) {$checkentry = \&CheckEntry}; if (not $checkentry) {$checkentry = \&htdb::CheckEntry;} # Check to see if there is a user function for parsing filenames if (defined &ParseFname) {$parsefname = \&ParseFname}; if (not $parsefname) {$parsefname = \&htdb::ParseFname;} # Check to see if there is a user function for printing the entry if (defined &PrintEntry) {$printentry = \&PrintEntry}; if (not $printentry) {$printentry = \&htdb::PrintEntry;} # Check to see if there is a user function for printing the entry if (defined &TightEntry) {$tightentry = \&TightEntry}; if (not $tightentry) {$tightentry = \&htdb::TightEntry;} # Open the list environment used for the results # Print the command to generate a list of elements print ($in{_tight} ? "

\n" : "\n"); return $num_found; } # # Subroutine for alerting the user that no matches occured # sub PrintNoMatches { print "

No matches found

\n"; print "Sorry, no entries match your request. "; print "Please choose some different parameters and try again.

\n"; print $footer; }