Appendix H: Control System Computational Aids



Similar documents
Statistics for Experimenters

AC : MATHEMATICAL MODELING AND SIMULATION US- ING LABVIEW AND LABVIEW MATHSCRIPT

Phasors. Phasors. by Prof. Dr. Osman SEVAİOĞLU Electrical and Electronics Engineering Department. ^ V cos (wt + θ) ^ V sin (wt + θ)

DCMS DC MOTOR SYSTEM User Manual

WESTMORELAND COUNTY PUBLIC SCHOOLS Integrated Instructional Pacing Guide and Checklist Computer Math

Arena Tutorial 1. Installation STUDENT 2. Overall Features of Arena

Mathematical Modeling and Engineering Problem Solving

TS2Mascot. Introduction. System Requirements. Installation. Interactive Use

Solving ODEs in Matlab. BP205 M.Tremont

Programming Interviews Exposed: Secrets to Landing Your Next Job

Scicos is a Scilab toolbox included in the Scilab package. The Scicos editor can be opened by the scicos command

ALGORITHMS AND FLOWCHARTS. By Miss Reham Tufail

19 LINEAR QUADRATIC REGULATOR

Understanding Poles and Zeros

15.1. Integration as the limit of a sum. Introduction. Prerequisites. Learning Outcomes. Learning Style

COVERS ALL TOPICS IN LEVEL I CFA EXAM REVIEW CFA LEVEL I FORMULA SHEETS

OPTIMAL DISPATCH OF POWER GENERATION SOFTWARE PACKAGE USING MATLAB

Cooling and Euler's Method

Graph Analysis and Visualization

3.1 State Space Models

EQUATIONS and INEQUALITIES

Fundamentals of Financial Planning and Management for mall usiness

Prentice Hall Mathematics: Algebra Correlated to: Utah Core Curriculum for Math, Intermediate Algebra (Secondary)

Analysis of Financial Time Series

dspace DSP DS-1104 based State Observer Design for Position Control of DC Servo Motor

Pipeliner CRM Phaenomena Guide Add-In for MS Outlook Pipelinersales Inc.

Exam 1 Sample Question SOLUTIONS. y = 2x

Manual Software SPECTRO3-MONITORING V5.0

StarWind iscsi SAN Software: Installing StarWind on Windows Server 2008 R2 Server Core

UPS System Capacity Management Configuration Utility

Introduction to Matlab

Using Casio Graphics Calculators

TASKE Call Center Management Tools

Scheduling in SAS 9.4 Second Edition


Engineering Sciences 22 Systems Summer 2004

iw Document Manager Cabinet Converter User s Guide

Electromagnetism Laws and Equations

HyperFS PC Client Tools

Elo 1725L 17 Touch Screen Monitor Installation Guide. Product Name: Elo 1725L 17- inch Monitor

Matlab and Simulink. Matlab and Simulink for Control

While You Were Sleeping - Scheduling SAS Jobs to Run Automatically Faron Kincheloe, Baylor University, Waco, TX

The Fourier Analysis Tool in Microsoft Excel

CROWNPEAK C# API SYSTEM CONFIGURATION GUIDE VERSION 3.0.1

ARIS Education Package Process Design & Analysis Installation Guide. Version 7.2. Installation Guide

Citrix EdgeSight for Load Testing User s Guide. Citrix EdgeSight for Load Testing 3.8

IMPLEMENTATION OF A TIME TABLE GENERATOR USING VISUAL BASIC.NET

WatchManager Data Backup

TEACHING AUTOMATIC CONTROL IN NON-SPECIALIST ENGINEERING SCHOOLS

SAP BusinessObjects Business Intelligence (BI) platform Document Version: 4.1, Support Package Report Conversion Tool Guide

USB 3.0 CDR Model White Paper Revision 0.5

Software License Registration Guide

StarWind iscsi SAN: Configuring Global Deduplication May 2012

Nonlinear Systems and Control Lecture # 15 Positive Real Transfer Functions & Connection with Lyapunov Stability. p. 1/?

Citrix EdgeSight for Load Testing User s Guide. Citrx EdgeSight for Load Testing 2.7

Mathematics 2540 Paper 5540H/3H

Using Excel and VBA CHANDAN SENGUPTA SECOND EDITION. WILEY John Wiley & Sons, Inc.

Linear Equations and Inequalities

Debugging Multi-threaded Applications in Windows

Signal Processing First Lab 01: Introduction to MATLAB. 3. Learn a little about advanced programming techniques for MATLAB, i.e., vectorization.

Visual Basic Programming. An Introduction

SIMULATION SOFTWARE AND NUMERICAL ISSUES. Alexander L. Pugh Massachusetts Institute of Technology, Cambridge, USA

Driving a Time-based Simulation from MATLAB for Custom Calculations and Control

Mutual Inductance and Transformers F3 3. r L = ω o

ESD.36 System Project Management. Lecture 6. - Introduction to Project Dynamics. Instructor(s) Dr. James Lyneis. Copyright 2012 James M Lyneis.

EECE 460 : Control System Design

ab = c a If the coefficients a,b and c are real then either α and β are real or α and β are complex conjugates

Frequency Response of FIR Filters

How-To Guide. SigCard1 (With Microsoft Access) Demo. Copyright Topaz Systems Inc. All rights reserved.

A Microsoft Access Based System, Using SAS as a Background Number Cruncher David Kiasi, Applications Alternatives, Upper Marlboro, MD

Intermediate Value Theorem, Rolle s Theorem and Mean Value Theorem

PULSE Automation programming in Visual Basic. From BK training lectures arranged by Jiří Tůma & Radovan Zadražil

Machine Learning and Data Mining. Regression Problem. (adapted from) Prof. Alexander Ihler

Abstract. Introduction. System Requirement. GUI Design. Paper AD

Feith Rules Engine Version 8.1 Install Guide

UNICORN 6.4. Administration and Technical Manual

AMATH 352 Lecture 3 MATLAB Tutorial Starting MATLAB Entering Variables

Introduction to Bode Plot

ECE 3510 Final given: Spring 11

Euler s Method and Functions

Analog Devices Welcomes Hittite Microwave Corporation NO CONTENT ON THE ATTACHED DOCUMENT HAS CHANGED

ADP Workforce Now V3.0

File and Printer Sharing with Microsoft Windows

Use the Microsoft Office Word Add-In to Create a Source Document Template for Microsoft Dynamics AX 2012 WHITEPAPER

Feith Document Database Version 8.1 Install Guide

SAP CCMS Monitors Microsoft Windows Eventlog

JEROME COMMUNICATIONS SOFTWARE (JCS) INSTALLATION and OPERATION MANUAL V1.02 for Windows XP

UNICORN 7.0. Administration and Technical Manual

Keystone 600N5 SERVER and STAND-ALONE INSTALLATION INSTRUCTIONS

While You Were Sleeping - Scheduling SAS Jobs to Run Automatically Faron Kincheloe, Baylor University, Waco, TX

Math Assignment 6

Series and Parallel Resistive Circuits

TOOLS OF MONTE CARLO SIMULATION IN INVENTORY MANAGEMENT PROBLEMS

Troubleshooting File and Printer Sharing in Microsoft Windows XP

Snapshot Reports for 800xA User Guide

Oracle Process Manufacturing PhysicalInventory

Chapter 27 Using Predictor Variables. Chapter Table of Contents

A QTI editor integrated into the netuniversité web portal using IMS LD

Transcription:

E1BAPP08 11/02/2010 11:56:59 Page 1 Appendix H: Control System Computational Aids H.1 Step Response of a System Represented in State Space In this section we will discuss how to obtain the step response of systems represented in state space. We will begin by discussing how state equations can be used to program a digital computer and progress to a computer program that you can use to perform step-response simulations. Using State Equations for Computer Simulations One advantage of state equations is the ability to use this representation to simulate control systems on the digital computer. This section is devoted to demonstrating this concept. Consider the system represented in state-space by Eqs. (H.1). _x 1 _x 2 ¼ 0 1 2 3 yt ðþ¼½2 3Š x 1 ð0þ 1 ¼ x 2 ð0þ 2 x 1 x 2 x1 x 2 þ 0 1 ut ðþ ðh:1aþ ðh:1bþ ðh:1cþ This system is represented in phase-variable form and has a unit step input, u(t). We are about to formulate a solution for the system output, y(t), by numerically integrating the differential equation on the digital computer. We will use a method called Euler s approximation, where the area to be integrated is approximated as a rectangle. The solution obtained on the computer is an actual time waveform plot rather than the closed-form expression we arrived at via the Laplace transform. Writing the state equations explicitly, we have dx 1 dt dx 2 dt ¼ x 2 ¼ 2x 1 3x 2 þ 1 ðh:2aþ ðh:2bþ 1

E1BAPP08 11/02/2010 11:56:59 Page 2 2 Appendix H: Control System Computational Aids If we approximate dx by Dx and dt by Dt, and multiply through by Dt Dx 1 ¼ x 2 Dt ðh:3aþ Dx 2 ¼ ð 2x 1 3x 2 þ 1ÞDt ðh:3bþ We can say that the value at the next interval for either state variable is approximately the current value plus the change. Thus, x 1 ðt þ DtÞ ¼ x 1 ðþþdx t 1 x 2 ðt þ DtÞ ¼ x 2 ðþþdx t 2 ðh:4aþ ðh:4bþ Finally, from the output equation (H.1b), y(t) at the next time interval, y(t + Dt), is ytþ ð Dt Þ ¼ 2x 1 ðt þ DtÞþ3x 2 ðt þ DtÞ ðh:5þ Let us see how this would work on the digital computer. From the problem statement, x 1 and x 2 begin at t ¼ 0 with values 1 and 2, respectively. If we assume a Dt interval of 0.1 second 1, the change in x 1 and x 2 from 0 to 0.1 second is found from Eqs. (H.3) to be, Dx 1 ¼ x 2 ð0þdt ¼ 0:2 ðh:6aþ Dx 2 ¼½ 2x 1 ð0þ 3x 2 ðþþ1 0 ŠDt ¼ 0:5 ðh:6bþ from which the state variables at t ¼ 0.1 second are found from Eqs. (H.4) to be x 1 ð0:1þ ¼ x 1 ð0þþdx 1 ¼ 0:8 x 2 ð0:1þ ¼ x 2 ð0þþdx 2 ¼ 1:5 ðh:7aþ ðh:7bþ Finally, the output at t ¼ 0.1 second is calculated from Eq. (H.5) to be, yð0:1þ ¼ 2x 1 ð0:1þþ3x 2 ð0:1þ ¼ 2:9 ðh:8þ The values of the state variables at t ¼ 0.1 second are used to calculate the values of the state variables and the output at the next interval of time, t ¼ 0.2 second. Once again the changes in x 1 and x 2 are, Dx 1 ¼ x 2 ð0:1þdt ¼ 0:15 ðh:9aþ Dx 2 ¼ ½ 2x 1 ð0:1þ 3x 2 ð0:1þþ1šdt ¼ 0:39 ðh:9bþ from which the state variables at t ¼ 0.2 second are found to be x 1 ð0:2þ ¼ x 1 ð0:1þþdx 1 ¼ 0:65 ðh:10aþ x 2 ð0:2þ ¼ x 2 ð0:1þþdx 2 ¼ 1:11 ðh:10bþ 1 Dt is selected to be small and, initially, at least an order of magnitude less than the system s time constants. In order to determine, empirically, how small Dt should be, the value of Dt can be successively reduced after each response has been calculated by the computer until the difference between the current response and the previous response is negligible. If Dt is too large, then error results from inaccurately representing the area under the state variable curve. If Dt is too small, then round-off error will accumulate during the computation because of the numerous calculations.

E1BAPP08 11/02/2010 11:56:59 Page 3 H.1 Step Response of a System Represented in State Space 3 FIGURE H.1 State variables and output for the system of Eqs. H.1 Finally, the output at t ¼ 0.2 second is calculated as, yð0:2þ ¼ 2x 1 ð0:2þþ3x 2 ð0:2þ ¼ 2:03 ðh:11þ The results are summarized in Figure H.1. Continuing in like manner until t ¼ t f, the maximum desired time, the response for 0 t t f can be obtained. Computer Program for Step Response In this subsection we will design a computer program that simulates a system s step response using state equations. The code was developed using Visual Basic 1 Version 6 and converted to a stand-alone application that runs on a PC 2. The resulting application, recommended for readers who do not have access to MATLAB 1,canbe found in the Appendix H folder on www.wiley.com/college/nise 3. To run the setup program, open the folder labeled Step Response inside the Appendix H folder and double-click on setup icon. For directions on running the program see the README file inside the Appendix H folder. Let us now summarize the design of the step response software. First, we enumerate the software requirements as follows: 1. The user will input (1) system order, (2) components of the system, input, and output matrix. 2. The user will input the initial conditions. 3. The user will input the following plot parameters: (1) iteration interval, (2) plot interval, and (3) maximum time. 4. The program will plot the step response as well as listing the response data. 5. The program will replot the step response after allowing the user to change the initial conditions as well as the plot parameters without reentering the system. The program plots the step response of a system represented in state space and permits the user to choose an iteration interval. A helpful technique of finding the iteration interval is to run the program with successively diminishing iteration 2 Visual Basic is a registered trademark of Microsoft Corporation. 3 MATLAB is a registered trademark of The MathWorks, Inc.

E1BAPP08 11/02/2010 11:57:1 Page 4 4 Appendix H: Control System Computational Aids Start System: Input x = Ax + Bu; y = Cx a 11 a 12 0 1 A = a 21 a = 22 2 3 b 1 B = b 2 = 0 1 ; C = [ 2 3] Initial state vector: x(0) = [1 2] Iteration interval: ΔT = 0.001 second Plot interval: 0.1 second Maximum time: 2 seconds Maximum amplitude: 4 Store plot point No Solve state equations for next point Δ x 1 = (a 11 x 1 + a 12 x 2 + b 1 ) ΔT; Δx 2 = (a 21 x 1 + a 22 x 2 + b 2 ) ΔT x 1 = x 1 +Δx 1; x 2= x 2 +Δx 2 ; y = c 1 x 1 + c 2 x 2 Yes Time to store plot point? No Maximum time exceeded? Yes Plot FIGURE H.2 Flow-chart for step response program End intervals until reaching an iteration interval below which there is no appreciable change in the results. Another parameter the user can select is the print interval which allows the user to print at a larger time interval than the iteration interval. The execution time of the program is also an input parameter. The user should choose a time for which the output has already reached a steady-state value. A simplified flow-chart for the program is shown in Figure H.2 and uses the system of Eqs. (H.1). Code Module We now present a sample implementation of the flow-chart of Figure H.2. The routine can run independently, as part of a Visual Basic Code Module, or tailored to another programming language or other machines, such as hand-held calculators.

E1BAPP08 11/02/2010 11:57:2 Page 5 H.1 Step Response of a System Represented in State Space 5 The routine can obtain its input variable values through the Visual Basic GUI interface, as presented in the sample run below, or through another program written to pass this code the input variables. The same is true of the output variables. In the sample run below, output variables are passed to the Visual Basic GUI interface for display, but could just as well be passed to another program. We now list the sample subroutine, which we call CalcStateSpace: ********** Input Variables************** Although the following arrays are being dimensioned for a 100th order system, only a portion of the array, defined by the sys_order variable, is used. Public X(100) As Single Public A(100, 100) As Single Public B(100) As Single Public C(100) As Single Public PRNT_Int Public sys_order Public DELTAT Public MAXTIME X vector input. A matrix Input. B matrix Input. C vector Input Print interval input. System order input. Delta time input. Total run-time input. ************** Output Variables*********************** Public DELTAX (1000) As Single Array holding the time for each point calculated. Public Y (1000) As Single Array holding the output response value for each point calculated. **************Subroutine CalcStateSpace*************** Public Sub CalcStateSpace () On Error GoTo errorhandle *************Store initial value for plot************* Let cx=0 For i=1 To sys_order cx=cx + C(i-1)*X(i - 1) Next i Y(0)=cx ******************** Start plot loop****************** For K=1 To CInt(MAXTIME/PRNT_Int) Step 1 Index for Printing interval **************** Start iteration loop****************** For n=1 To CInt (PRNT_Int/DELTAT) Step 1 Index for iteration interval For i=1 To sys_order Let ax=0 For j=1 To sys_order ax=ax + A(i - 1, j - 1)*X(j - 1) Next j DELTAX (i - 1)=(ax+B (i - 1))*DELTAT Calculate delta X1 Next i

E1BAPP08 11/02/2010 11:57:2 Page 6 6 Appendix H: Control System Computational Aids For i = 1 To sys_order X(i - 1) = X(i - 1) + DELTAX (i - 1) Calculate next x Next i Let cx = 0 For i = 1 To sys_order cx=cx+c(i-l)*x(i-1) Next I Next n ***************** End iteration loop****************** Y(K) = cx Next K ***************** End plot loop*********************** Exit Sub errorhandle: message = "System Error: " + Err.Description MsgBox (message) On Error GoTo 0 End Sub As an example, data entry and results for the code shown above are via a graphical user interface (GUI) developed in Visual Basic 6 and produced by the stand-alone application enclosed in this folder. Figure H.3 shows the GUI interface for data entry using the system of Eqs. H.1 as an example. Figure H.4 shows the output window for the example. FIGURE H.3 Step response program: GUI interface for data entry;

E1BAPP08 11/02/2010 11:57:3 Page 7 H.2 Root Locus and Frequency Response 7 FIGURE H.4 Step response program: output window H.2 Root Locus and Frequency Response In this section we will develop a computer program that can be used as an alternative to MATLAB to search for points on the root locus and obtain magnitude and phase frequency response data. The code was developed using Visual Basic 1 Version 6 and converted to a stand-alone application that runs on a PC. The resulting application, recommended for readers who do not have access to MATLAB, can be found in the Appendix H folder on this CD-ROM. To run the setup program, open the folder labeled Root Locus inside the Appendix H folder and double-click on setup icon. For directions on running the program see the README file inside the Root Locus folder. The program also can be adapted to hand-help calculators. Let us now summarize the design of the step response software. First, we enumerate the software requirements as follows: 1. The user will input the number of open-loop poles and zeros. 2. The user will input the values of the open-loop poles and zeros. 3. The user will select polar or Cartesian coordinates for the test point. 4. The user will input the coordinates of the test point. 5. The user will initiate the calculation. 6. The program will display the angle and magnitude of the open-loop transfer function at the test point as well as the gain. 7. The user can change the open-loop poles and zeros and the test point before initiating another calculation. A simplified flow-chart for the program is shown in Figure H.5. Code Module We now present a sample implementation of the flow-chart of Figure H.5. The routine can run independently, as part of a Visual Basic Code Module, or tailored to another programming language or other machines, such as hand-held calculators. The routine can obtain its input variable values through the Visual Basic GUI interface, as presented in the sample run below, or through another program written to pass this code the input variables. The same is true of the output variables. In the

E1BAPP08 11/02/2010 11:57:5 Page 8 8 Appendix H: Control System Computational Aids Start Input number of poles Input number of zeros Input coordinates of poles Input coordinates of zeros Select polar or Cartesian coordinates for test point Input test point Begin calculation Give error message Test point= pole or zero? Yes Angle = zero angles - poles angles Gain = Π pole lengths / Π zero lengths Magnitude = 1 / Gain FIGURE H.5 Flow-chart for root locus and frequency response program End sample run below, output variables are passed to the Visual Basic GUI interface for display, but could just as well be passed to another program. We now list the sample subroutine, which we call RootLocusCalc: ************************* Input Variables ************************* Public Polar True or False. Determines if input test point is interpreted as polar coordinates (Polar = True or Cartesian Coordinates (Polar = False). Public testaval Public testbval Public NumPolesVal Public NumZerosVal Test point x coordinate (Polar = False) or test point magnitude (Polar = True). Test point y coordinate (Polar = False) or test point angle (Polar = True). Number of poles in system (0 to 10). Number of Zeros in system (0 to 10).

E1BAPP08 11/02/2010 11:57:6 Page 9 H.2 Root Locus and Frequency Response 9 The following variables have enough space for 10 poles, but only the number of data points referred to by NumPolesVal are stored in the array starting at the 0th element. Public RLPoleRe (10) Stores each open-loop poles s real part. Public RLPoleI (10) Stores each open-loop poles s imaginary part. The following variables have enough space for 10 zeros, but only the number of data points referred to by NumZerosVal are stored in the array starting at the 0th element. Public RLZeroRe(10) Public RLZeroIm(10) Stores each open-loop zero s real part. Stores each open-loop zero s imaginary part. ************************** Output Variables ************************** Public RLKval Returns the Gain at the given test point. Public RLMagVal Returns the magnitude at the given test point. Public RLAngleVal Returns the angle in degrees at the given test point. Public ErrorFlag If this variable is set to True, then an error occurred during calculation and the output data is disregarded. ********************** Subroutine RootLocusCalc ********************** Const pi = 3.14159265358979 Public Sub RootLocusCalc () Dim deltax As Single Dim deltay As Single ErrorFlag = False RecGain = 1 angle = 0 If Polar = True Then Convert polar test point to Cartesian. testreval = testaval * Cos(testBVal * pi/180) testimval = testaval * Sin(testBVal * pi/180) Else Test point is Cartesian - use as is. testreval = testaval testimval = testbval End If ForK = 0 To NumPolesVal - 1 ReVal= RLPoleRe(K) ImVal= RLPoleI(K) deltax = testreval - ReVal deltay = testimval - ImVal If Abs(deltaX) < 0.0000000001 And_ Abs(deltaY) < 0.0000000001 Then MsgBox ("ERROR: Test point is the same as an"&_ "open-loop pole. Enter new test point.") ErrorFlag = 1 GoTo exitrootlocus Else

E1BAPP08 11/02/2010 11:57:6 Page 10 10 Appendix H: Control System Computational Aids RecGain = RecGain * CartToMag (deltax, deltay) angle = angle - CartToAngle (deltax, deltay) End If Next K ForK=0ToNumZerosVal-1 ReVal =RLZeroRe(K) ImVal= RLZeroIm(K) deltax = testreval - ReVal deltay = testimval - ImVal If Abs(deltaX) < 0.0000000001 And_ Abs(deltaY) < 0.0000000001 Then MsgBox ("ERROR: Test point is the same as an"&_ "open-loop zero. Enter new test point.") ErrorFlag = 1 GoTo exitrootlocus Else RecGain = RecGain/CartToMag(deltaX, deltay) angle = angle + CartToAngle(deltaX, deltay) End If Next K angle = angle * 180/pi angle = (angle/360 - Fix(angle/360)) * 360 exitrootlocus: IfErrorFlag<>1Then RLKval = RecGain RLMagVal = 1/RecGain RLAngleVal = angle End If End Sub *********************Function CartToMag********************* Public Function CartToMag(X As Single, Y As Single) As Single CartToMag = Sqr(Abs(X ^ 2 + Y ^ 2)) End Function ********************* Function CartToAngle ********************* Public Function CartToAngle (deltax, deltay) As Single IfdeltaX=0Thenangle = pi/2 _ Else angle = Atn(Abs(deltaY)/Abs(deltaX)) If deltay >= 0 And deltax >= 0 Then angle = angle If deltay >= 0 And deltax < 0 Then angle = (pi - angle) IfdeltaY<0AnddeltaX <= 0 Then angle = -(pi - angle) If deltay < 0 And deltax > 0 Then angle = -angle CartToAngle = angle End Function Data entry and results for the code shown above are via a graphical user interface (GUI) developed in Visual Basic 6 and produced by the stand-alone application included in the Appendix H folder. Figure H.6 shows the GUI interface for data entry and results using Gs ðþ¼ ðs þ 1Þ and a test point ¼ 2 + j3 as an example. ssþ ð 3Þðs þ 5Þ

E1BAPP08 11/02/2010 11:57:6 Page 11 H.2 Root Locus and Frequency Response 11 FIGURE H.6 Root locus program: GUI interface for data entry and results

E1BAPP08 11/02/2010 11:57:7 Page 12 Acknowledegment: The author wants to express appreciation to Alan H. Nise for the programming and GUI design of the Step Response Program and the Root Locus and Frequency Response Utility. These programs were based upon the original programs published in Control Systems Engineering, 2nd ed. Copyright # 2011 by John Wiley & Sons, Inc. Founded in 1807, John Wiley & Sons, Inc. has been a valued source of knowledge and understanding for more than 200 years, helping people around the world meet their needs and fulfill their aspirations. Our company is built on a foundation of principles that include responsibility to the communities we serve and where we live and work. In 2008, we launched a Corporate Citizenship Initiative, a global effort to address the environmental, social, economic, and ethical challenges we face in our business. Among the issues we are addressing are carbon impact, paper specifications and procurement, ethical conduct within our business and among our vendors, and community and charitable support. For more information, please visit our website: www.wiley.com/go/citizenship. No part of this publication may be reproduced, stored in a retrieval system or transmitted in any form or by any means, electronic, mechanical, photocopying recording, scanning or otherwise, except as permitted under Sections 107 or 108 of the 1976 United States Copyright Act, without either the prior written permission of the Publisher or authorization through payment of the appropriate per-copy fee to the Copyright Clearance Center, 222 Rosewood Drive, Danvers, MA 01923, (978) 750-8400, fax (978) 646-8600. Requests to the Publisher for permission should be addressed to the Permissions Department, John Wiley & Sons, Inc., 111 River Street, Hoboken, NJ 07030-5774, (201) 748-6011, fax (201) 748-6008 or online at http://www.wiley.com/go/permissions. Evaluation copies are provided to qualified academics and professionals for review purposes only, for use in their courses during the next academic year. These copies are licensed and may not be sold or transferred to a third party. Upon completion of the review period, please return the evaluation copy to Wiley. Return instructions and a free of charge return shipping label are available at www.wiley.com/go/returnlabel. Outside of the United States, please contact your local representative. ISBN 13 978-0470-54756-4 Printed in the United States of America. 10 9 8 7 6 5 4 3 2 1