An Engineers Guide to MATLAB : With Applications

4 downloads 0 Views 10MB Size Report
Chapter 5 Function Creation and Selected Matlab Functions now includes the ... of the book, we have created M files of all the numbered examples in each chapter ..... atan2(y, x) is the four-quadrant version, which must be used when the signs ...... sion for the curvature for a deltoid whose parametric equations are given by6.
An Engineer’s Guide to MATLAB®

This page intentionally left blank

An Engineer’s Guide to MATLAB® With Applications from Mechanical, Aerospace, Electrical, Civil, and Biological Systems Engineering Third Edition Edward B. Magrab Department of Mechanical Engineering, University of Maryland, College Park, MD

Shapour Azarm Department of Mechanical Engineering, University of Maryland, College Park, MD

Balakumar Balachandran Department of Mechanical Engineering, University of Maryland, College Park, MD

James H. Duncan Department of Mechanical Engineering, University of Maryland, College Park, MD

Keith E. Herold Fischell Department of Bioengineering, University of Maryland, College Park, MD

Gregory C. Walsh Leica Geosystems, Inc., San Ramon, CA

Prentice Hall Boston Columbus Indianapolis New York San Francisco Upper Saddle River Amsterdam Cape Town Dubai London Madrid Milan Munich Paris Montreal Toronto Delhi Mexico City Sao Paulo Sydney Hong Kong Seoul Singapore Taipei Tokyo

VP/Editorial Director, Engineering/Computer Science: Marcia J. Horton Assistant/Supervisor: Dolores Mars Senior Editor: Tacy Quinn Associate Editor: Dee Bernhard Director of Marketing: Margaret Waples Senior Marketing Manager: Tim Galligan Marketing Assistant: Mack Patterson Senior Managing Editor: Scott Disanno Project Manager: Greg Dulles Senior Operations Supervisor: Alan Fischer Production Manager: Wanda Rockwell Creative Director: Jayne Conte Cover Designer: Bruce Kenselaar Cover Art: Getty Images, Inc. Media Editor: Daniel Sandin Composition: Integra Printer/Binder: Courier Companies, Inc.

Credits and acknowledgments borrowed from other sources and reproduced, with permission, in this textbook appear on appropriate pages within text.

MATLAB and Simulink are registered trademarks of The Mathworks, Inc., 3 Apple Hill, Natick MA 01760-2098.

Copyright © 2011, 2005, 2000 Pearson Education, Inc., publishing as Prentice Hall, One Lake Street, Upper Saddle River, New Jersey 07458. All rights reserved. Manufactured in the United States of America. This publication is protected by Copyright, and permission should be obtained from the publisher prior to any prohibited reproduction, storage in a retrieval system, or transmission in any form or by any means, electronic, mechanical, photocopying, recording, or likewise. To obtain permission(s) to use material from this work, please submit a written request to Pearson Education, Inc., Permissions Department, One Lake Street, Upper Saddle River, New Jersey 07458.

Many of the designations by manufacturers and seller to distinguish their products are claimed as trademarks. Where those designations appear in this book, and the publisher was aware of a trademark claim, the designations have been printed in initial caps or all caps.

Library of Congress Cataloging in Publication Data

ISBN 13: 978-0-13-199110-1 ISBN 10: 0-13-199110-8

For June Coleman Magrab

This page intentionally left blank

Contents List of Examples Preface to Third Edition 1

Introduction Edward B. Magrab 1.1

1.2

1.3 1.4 1.5

2

2.7

xxi 1

Introduction 1 1.1.1 Organization of the Book and Its Goals 2 1.1.2 Some Suggestions on How to Use MATLAB 2 1.1.3 Book Notation Conventions 3 The MATLAB Environment 3 1.2.1 Introduction 3 1.2.2 Preliminaries—Command Window Management 5 1.2.3 Executing Expressions from the MATLAB Command Window—Basic MATLAB Syntax 8 1.2.4 Clarification and Exceptions to MATLAB’S Syntax 11 1.2.5 MATLAB Functions 14 1.2.6 Creating Scripts and Executing Them from the MATLAB Editor 19 Online Help 29 The Symbolic Toolbox 32 Summary of Functions Introduced in Chapter 1 41 Exercises 42

Vectors and Matrices Edward B. Magrab 2.1 2.2 2.3 2.4 2.5 2.6

xv

51

Introduction 51 Definitions of Matrices and Vectors 52 Creation of Vectors 53 Creation of Matrices 64 Dot Operations 83 Mathematical Operations with Matrices 92 2.6.1 Addition and Subtraction 92 2.6.2 Multiplication 92 2.6.3 Determinants 101 2.6.4 Matrix Inverse 104 2.6.5 Solution of a System of Equations 107 Summary of Functions Introduced in Chapter 2 112 Exercises 113 vii

viii

3

Contents

Data Input/Output Edward B. Magrab 3.1

3.2

3.3 3.4 3.5 3.6

4

Strings and Annotated Output 127 3.1.1 Creating Strings 127 3.1.2 Converting Numerical Values to Strings and Displaying Them 130 Entering Data with input 135 3.2.1 Entering a Scalar with input 135 3.2.2 Entering a String with input 136 3.2.3 Entering a Vector with input 137 3.2.4 Entering a Matrix with input 137 Input/Output Data Files 137 Cell Arrays 141 Input Microsoft Excel Files 143 Summary of Functions Introduced in Chapter 3 144 Exercises 145

Program Flow Control Edward B. Magrab 4.1 4.2

4.3

5

127

Introduction—The Logical Operator 148 Control of Program Flow 151 4.2.1 Branching—If Statement 151 4.2.2 Branching—Switch Statement 154 4.2.3 For Loop 155 4.2.4 While Loop 162 4.2.5 Early Termination of Either a for or a while Loop Summary of Functions Introduced in Chapter 4 166 Exercises 167

148

166

Function Creation and Selected MATLAB Functions Edward B. Magrab 5.1

5.2

Introduction 173 5.1.1 Why Use Functions 173 5.1.2 Naming Functions 174 5.1.3 Length of Functions 174 5.1.4 Debugging Functions 174 User-Defined Functions 175 5.2.1 Introduction 175 5.2.2 Function File 175 5.2.3 Subfunctions 181 5.2.4 Anonymous Functions 183 5.2.5 inline 184 5.2.6 Comparison of the Usage of Subfunctions, Anonymous Functions, and inline 185

172

Contents

5.3 5.4

5.5

5.6 5.7

6

ix

User-Defined Functions, Function Handles, and feval 186 MATLAB Functions that Operate on Arrays of Data 187 5.4.1 Introduction 187 5.4.2 Fitting Data with Polynomials—polyfit/polyval 188 5.4.3 Fitting Data with spline 190 5.4.4 Interpolation of Data—interp1 192 5.4.5 Numerical Integration—trapz 193 5.4.6 Area of a Polygon—polyarea 195 5.4.7 Digital Signal Processing—fft and ifft 196 MATLAB Functions that Require User-Defined Functions 201 5.5.1 Zeros of Functions—fzero and roots/poly 202 5.5.2 Numerical Integration—quadl and dblquad 207 5.5.3 Numerical Solutions of Ordinary Differential Equations—ode45 212 5.5.4 Numerical Solutions of Ordinary Differential Equations—bvp4c 217 5.5.5 Numerical Solutions of Delay Differential Equations—dde23 231 5.5.6 Numerical Solutions of One-Dimensional Parabolic–Elliptic Partial Differential Equations—pdepe 233 5.5.7 Local Minimum of a Function—fminbnd 235 5.5.8 Numerical Solutions of Nonlinear Equations—fsolve 238 Symbolic Solutions and Converting Symbolic Expressions into Functions 240 Summary of Functions Introduced in Chapter 5 246 Exercises 247

2D Graphics Edward B. Magrab 6.1 6.2

6.3

Introduction: Graphics Management 266 Basic 2D Plotting Commands 269 6.2.1 Introduction 269 6.2.2 Changing a Graph’s Overall Appearance 281 6.2.3 Special Purpose Graphs 281 6.2.4 Reading, Displaying, and Manipulating Digital Images Graph Annotation and Enhancement 291 6.3.1 Introduction 291 6.3.2 Axes and Curve Labels, Figure Titles, Legends, and Text Placement 291 6.3.3 Filling Regions 294 6.3.4 Greek Letters, Mathematical Symbols, Subscripts, and Superscripts 296 6.3.5 Altering the Attributes of Axes, Curves, Text, and Legends 299 6.3.6 Positioning One Figure Inside Another Figure 304

265

288

x

Contents

6.4 6.5

7

Lines in 3D 338 Surfaces 341 Summary of Functions Introduced in Chapter 7 Exercises 370

338

369

Engineering Statistics Edward B. Magrab 8.1 8.2

8.3 8.4 8.5

8.6

8.7

9

318

3D Graphics Edward B. Magrab 7.1 7.2 7.3

8

6.3.7 Interactive Plotting Tools 306 6.3.8 Animation 307 Examples 309 Summary of Functions Introduced in Chapter 6 Exercises 319

Descriptive Statistical Quantities 377 Probability Distributions 383 8.2.1 Discrete Distributions 383 8.2.2 Continuous Distributions 387 Confidence Intervals 397 Hypothesis Testing 401 Linear Regression 404 8.5.1 Simple Linear Regression 404 8.5.2 Multiple Linear Regression 408 Design of Experiments 415 8.6.1 Single-Factor Experiments: Analysis of Variance 415 8.6.2 Multiple-Factor Factorial Experiments 419 Summary of Functions Introduced in Chapter 8 435 Exercises 436

Dynamics and Vibrations Balakumar Balachandran 9.1

9.2

377

Dynamics of Particles and Rigid Bodies 446 9.1.1 Planar Pendulum 446 9.1.2 Orbital Motions 447 9.1.3 Principal Moments of Inertia 450 9.1.4 Stability of a Rigid Body 451 Single-Degree-of-Freedom Vibratory Systems 454 9.2.1 Introduction 454 9.2.2 Linear Systems: Free Oscillations 456 9.2.3 Linear Systems: Forced Oscillations 462 9.2.4 Nonlinear Systems: Free Oscillations 469 9.2.5 Nonlinear Systems: Forced Oscillations 478

445

Contents

9.3

9.4

9.5

10

Systems with Multiple Degrees of Freedom 481 9.3.1 Two-Degree-of-Freedom Systems: Free and Forced Oscillations 481 9.3.2 Natural Frequencies and Mode Shapes 495 Free and Forced Vibrations of Euler–Bernoulli and Timoshenko Beams 499 9.4.1 Natural Frequencies and Mode Shapes of Euler–Bernoulli and Timoshenko Beams 499 9.4.2 Forced Oscillations of Euler–Bernoulli Beams 509 Summary of Functions Introduced in Chapter 9 513 Exercises 514

Control Systems Gregory C. Walsh 10.1

10.2

10.3

10.4

10.5

10.6

11

xi

524

Introduction to Control System Design 525 10.1.1 Tools for Controller Design 527 10.1.2 Naming and File Conventions 528 Representation of Systems in MATLAB 528 10.2.1 State–Space Models 530 10.2.2 Transfer-Function Representation 535 10.2.3 Discrete-Time Models 538 10.2.4 Block Diagrams and SIMULINK 542 10.2.5 Conversion Between Representations 546 Response of Systems 547 10.3.1 Estimating Response from Systems 548 10.3.2 Estimating Response from Poles and Zeros 551 10.3.3 Estimating Systems from Response 558 Design Tools 560 10.4.1 Design Criteria 561 10.4.2 Design Tools 564 Design Examples 573 10.5.1 Notch Control of a Flexible Pointer 574 10.5.2 PID Control of a Magnetic Suspension System 582 10.5.3 Lead Control of an Inverted Pendulum 589 10.5.4 Control of a Magnetically Suspended Flywheel 596 Summary of Functions Introduced in Chapter 10 605 Exercises 606

Fluid Mechanics James H. Duncan 11.1

Hydrostatics 614 11.1.1 Pressure Distribution in the Standard Atmosphere 11.1.2 Force on a Planar Gate 616

614

615

xii

Contents

11.2

11.3

11.4 11.5

12

Heat Transfer Keith E. Herold 12.1

12.2

12.3

13

Internal Viscous Flow 621 11.2.1 Laminar Flow in a Horizontal Pipe with Circular Cross Section 621 11.2.2 Downward Turbulent Flow in a Vertical Pipe 622 11.2.3 Three Connected Reservoirs 624 External Flow 626 11.3.1 Boundary Layer on an Infinite Plate Started Suddenly from Rest 626 11.3.2 Blasius Boundary Layer 628 11.3.3 Potential Flow 631 11.3.4 Joukowski Airfoils 636 Open Channel Flow 641 Biological Flows 646 Exercises 648

659

Conduction Heat Transfer 660 12.1.1 Transient Heat Conduction in a Semi-Infinite Slab with Surface Convection 660 12.1.2 Transient Heat Conduction in an Infinite Solid Cylinder with Convection 662 12.1.3 Transient One-Dimensional Conduction with a Heat Source 664 Convection Heat Transfer 668 12.2.1 Internal Flow Convection: Pipe Flow 668 12.2.2 Thermal Boundary Layer on a Flat Plate: Similarity Solution 672 12.2.3 Natural Convection Similarity Solution 677 Radiation Heat Transfer 682 12.3.1 Radiation View Factor: Differential Area to Arbitrary Rectangle in Parallel Planes 682 12.3.2 View Factor Between Two Rectangles in Parallel Planes 685 12.3.3 Enclosure Radiation with Diffuse Gray Walls 687 12.3.4 Transient Radiation Heating of a Plate in a Furnace 690 Exercises 692

Optimization Shapour Azarm 13.1

13.2 13.3

Definition, Formulation, and Graphical Solution 13.1.1 Introduction 703 13.1.2 Graphical Solution 703 Linear Programming 706 Binary Integer Programming 709

702 703

Contents

13.4

13.5

13.6 13.7 13.8

14

xiii

Nonlinear Programming: Unconstrained and Curve Fitting 710 13.4.1 Unconstrained Optimization 710 13.4.2 Curve Fitting: One Independent Variable 713 13.4.3 Curve Fitting: Several Independent Variables 715 Nonlinear Programming: Constrained Single Objective 719 13.5.1 Constrained Single-Variable Method 719 13.5.2 Constrained Multivariable Method 721 13.5.3 Quadratic Programming 730 13.5.4 Semi-Infinitely Constrained Method 732 Multiobjective Optimization 736 Genetic Algorithm-Based Optimization 742 Summary of Functions Introduced in Chapter 13 751 Exercises 752

Biological Systems: Transport of Heat, Mass, and Electric Charge Keith E. Herold 14.1

14.2

14.3

Index

769

Heat Transfer in Biological Systems 770 14.1.1 Heat Transfer in Perfused Tissue 770 14.1.2 Thermal Conductivity Determination 773 Mass Transfer in Biological Systems 775 14.2.1 Bicarbonate Buffer System 775 14.2.2 Carbon Dioxide Transport in Blood 778 14.2.3 Oxygen Transport in Blood 779 14.2.4 Perfusion Bioreactor 782 14.2.5 Supply of Oxygen to a Spherical Tumor 786 14.2.6 Krogh Cylinder Model of Tissue Oxygenation 789 Charge Transport in Biological Systems 796 14.3.1 Hodgkin–Huxley Neuron Model 796 14.3.2 Hodgkin–Huxley Gating Parameters 797 14.3.3 Hodgkin–Huxley Model with Step Function Input 802 14.3.4 Action Potential 804 Exercises 807

813

This page intentionally left blank

List of Examples Chapter 1 1.1 1.2 1.3 1.4

Usage of MATLAB functions 18 Flow in a circular channel 27 Determination of curvature 37 Maximum response amplitude of a single-degree-of-freedom system 39

Chapter 2 2.1 2.2 2.3 2.4 2.5 2.6 2.7 2.8 2.9 2.10 2.11 2.12 2.13 2.14 2.15 2.16 2.17 2.18 2.19 2.20 2.21 2.22 2.23 2.24

Analysis of the elements of a vector 64 Creation of a special matrix 74 Rearrangement of submatrices of a matrix 75 Vector exponentiation 84 Creation of matrix elements 86 Polar to Cartesian coordinates 87 Summing a series 88 Approximation to the normal cumulative distribution function 89 Convergence of a series 90 Evaluation of the hyperbolic secant 91 Polar to Cartesian coordinates revisited 95 Mode shape of a circular membrane 96 A solution to the Laplace equation 97 Summation of a Fourier series 100 Eigenvalues of an oscillating spring-mass system 102 Transformation of a polynomial 103 Equation of a straight line determined from two distinct points 104 Inverse of a matrix 105 Symbolic inverse of a matrix 106 Solution of a system of equations 108 Temperatures in a slab 109 Current flowing in an electrical resistor circuit 110 Static deflection of a clamped square plate 110 Symbolically obtained Euler transformation matrix 111

Chapter 4 4.1 4.2 4.3 4.4

Fatigue strength factors 153 Selecting one of four views of a surface 155 Creation of a sequentially numbered matrix 156 Dot multiplication of matrices 157

xv

xvi

List of Examples

4.5 4.6 4.7 4.8 4.9 4.10 4.11 4.12 4.13 4.14 4.15

Analysis of the amplitude response of a two degree-of-freedom system 157 Example 2.2 revisited 158 Total interest of a loan 159 Equivalent implementation of find 160 Equivalent implementation of cumsum 161 Specification of the elements of an array 161 Sorting a vector of numerical values in ascending order 162 Ensuring that data are input correctly 162 Convergence of a series 163 Approximation to p 164 Multiple root finding using interval halving 164

Chapter 5 5.1 5.2 5.3 5.4 5.5 5.6 5.7 5.8 5.9 5.10 5.11 5.12 5.13 5.14 5.15 5.16 5.17 5.18 5.19 5.20 5.21 5.22 5.23 5.24 5.25 5.26

Neuber’s constant for the notch sensitivity of steel 189 Fitting data to an exponentially decaying sine wave 190 First zero crossing of an exponentially decaying sine wave 192 Area of an exponentially decaying sine wave 193 Length of a line in space 194 Fourier transform of a sine wave 198 Cross correlation of two pulses 200 Lowest five natural frequency coefficients of a clamped beam 206 Zero of a function expressed as a series 207 Determination of area and centroid 208 Area of an exponentially decaying sine wave revisited 209 Response of a single degree-of-freedom system to a ramp force—numerical solution 209 Probability of two correlated variables 211 Natural convection along a heated vertical plate 214 Pendulum absorber 215 Displacement of a uniformly loaded Euler beam 222 Displacement of a uniformly loaded Euler beam with an overhang 223 Displacement of an Euler beam subjected to a point load 226 Displacement of an Euler beam with a step change in cross section 227 Lowest natural frequency coefficient of an Euler beam clamped at both ends 229 Machine tool chatter in turning 232 Response of a single degree-of-freedom system to a ramp force 237 Inverse kinematics 239 Intersection of a parabola and an ellipse 239 Inverse Laplace transform 241 Evaluation of a convolution integral and its characteristics 242

List of Examples

5.27 5.28 5.29

Symbolic solution of algebraic equations 243 Symbolic solution of a differential equation 244 Symbolic solution used by several different functions

xvii

245

Chapter 6 6.1 6.2 6.3 6.4 6.5 6.6 6.7 6.8

Response of a single degree-of-freedom system to periodic forcing 305 Animation of a slider–crank mechanism 308 Polar plot: far field radiation pattern of a sound source 309 Displaying and labeling multiple curves: notch sensitivity for steel 311 Stability of a loaded structure 312 Nontraditional histogram 313 Frequency response functions of a two degree-of-freedom system 315 Sudoku: Drawing squares 317

Chapter 7 7.1 7.2 7.3 7.4 7.5 7.6 7.7 7.8

Drawing wire-frame boxes 339 Sine wave drawn on the surface of a cylinder 341 Drawing wire-frame boxes: coloring the box surfaces 357 Intersection of a cylinder and a sphere and the highlighting of their intersection 358 Natural frequencies of a beam hinged at both ends and restrained by a spring at an interior point 359 Enhancing 2D graphs with 3D objects 361 Generation of planes and their projections 363 Rotation and translation of 3D objects: Euler angles 366

Chapter 8 8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 8.10 8.11 8.12

Determination of several statistical quantities 379 Probability of getting airplanes airborne 385 Adequacy of hospital resources 387 Verification of the normality of data 391 Normal distribution approximation to the Poisson and binomial distributions 393 Verification that data can be represented by a Weibull distribution 395 Two-sided confidence limits 399 Test for statistical significance of the mean and the variance 402 Regression analysis 406 Multiple regression analysis 411 Single-factor analysis of variance 417 Two-factor analysis of variance 421

xviii

List of Examples

8.13 8.14 8.15

Three-factor analysis of variance: stiffness of fiberglass–epoxy beams 423 Analysis of a 24 factorial experiment 429 Analysis of a 24 factorial experiment with one replicate 432

Chapter 9 9.1 9.2 9.3 9.4 9.5 9.6 9.7 9.8 9.9 9.10 9.11 9.12 9.13 9.14 9.15 9.16 9.17 9.18 9.19 9.20 9.21

Orbital motions for different initial conditions 448 Principal moments of inertia 450 Stability of a rigid body 452 Oscillations of a single degree-of-freedom system for given initial velocity and initial displacement 457 Estimate of damping factor from the logarithmic decrement 459 Machine Tool Chatter 460 Estimation of natural frequency and damping factor for a damped oscillator 464 Curve fitting of the amplitude–response function 464 Single-degree-of-freedom system subjected to periodic pulse train forcing 466 System with nonlinear spring 469 System with Coulomb damping 472 System with piecewise linear springs 475 Two-degree-of-freedom system subjected to an initial velocity 485 Impulse and step responses of a two-degree-offreedom system 486 Amplitude–response function of a two-degree-of-freedom system 489 Optimal parameters for a vibration absorber 491 Half sine wave base excitation of a two-degree-of-freedom system 493 Natural frequencies and mode shapes of a three-degree-of-freedom system 496 Natural frequencies and mode shapes of a four-degree-of-freedom system 497 Natural frequencies and modes shapes of Euler–Bernoulli and Timoshenko beams with attachments 504 Impulse response of an Euler–Bernoulli beam 511

Chapter 10 10.1 10.2 10.3 10.4 10.5

State–space model of a servomotor 531 Step response of a servomotor 534 Conversion of a continuous-time model to a discrete-time model Tracking error of a motor control system 549 Response of a DC motor to initial conditions 550

540

List of Examples

10.6 10.7 10.8 10.9 10.10

xix

Step response of first-order system to a range of pole locations Step response of second-order system to a range of pole locations 552 Effects of zeros near poles of a second order system 556 Masking of modal dynamics 557 Controller design to meet rise time and percentage overshoot criteria 565

551

Chapter 11 11.1 11.2 11.3 11.4 11.5 11.6 11.7 11.8 11.9 11.10 11.11 11.12 11.13

Temperature and pressure variation as a function of altitude Properties of a reservoir 618 Laminar flow in a pipe that is started from rest 621 Flow rate in a pipe 623 Flow rates from three connected reservoirs 625 Acceleration of a liquid layer 627 Laminar boundary layer on a flat plate 630 Streamline pattern using contour 633 Direct calculation of streamlines 634 Flow over a Joukowski airfoil 638 Uniform channel with an overfall 642 Reservoir discharge 644 Laminar pulsatile flow in a pipe 646

Chapter 12 12.1 12.2 12.3 12.4 12.5 12.6 12.7 12.8 12.9 12.10

Transient heat conduction time and temperature distributions in a semi-infinite solid 661 Transient heat conduction in an infinite solid cylinder with convection 663 One-dimensional transient heat transfer with source 666 Heat transfer coefficient for laminar flow in a pipe 670 Heat transfer from a flat plate: Blasius formulation 674 Natural convection along a heated plate 679 View factor for a differential area and a finite rectangle in parallel planes 683 View factor between two parallel rectangles 686 Total heat transfer rate of a rectangular enclosure 689 Transient radiation heating of a plate in a furnace 691

Chapter 13 13.1 13.2 13.3 13.4 13.5 13.6

Equilibrium position of a two-spring system 703 Production planning 707 Oil refinery profits 708 Loading of a knapsack 709 Equilibrium position of a two-spring system revisited Bottom of a bottle 712

711

615

xx

List of Examples

13.7 13.8 13.9 13.10 13.11 13.12 13.13 13.14 13.15 13.16 13.17 13.18 13.19 13.20 13.21 13.22 13.23

Stress–strain relationship 714 Stress–strain relationship revisited 716 Semiempirical P–v–T relationship 716 Mineral exploration 717 Piping cost in a plant 720 Maximum volume of a closed box 720 Two-bar truss 722 Helical compression spring 723 Gear reducer 727 Production planning revisited 731 Planar two-link manipulator 733 Vibrating platform 738 Production planning revisited 741 Loading of a knapsack revisited: single objective with binary variables 744 Two-bar truss revisited: single objective with continuous variables 745 Two-bar truss revisited: multiobjectives with continuous variables 747 Two-bar truss revisited: single objective with continuous and discrete variables 748

Chapter 14 14.1 14.2 14.3 14.4 14.5 14.6 14.7 14.8 14.9 14.10

Ablation of a spherical tumor 770 Determination of the thermal conductivity of a biological material 774 Carbonic acid titration curve 777 Blood calculations 780 Perfusion bioreactor 784 Oxygen diffusion in a small tumor 787 Krogh cylinder model with a parabolic blood velocity profile Display of Hodgkin–Huxley gating parameters 799 Step input to Hodgkin–Huxley model 802 Hodgkin–Huxley action potential 805

792

Preface to Third Edition In going from the previous edition to this third edition, we have made many significant changes. A new chapter, “Biological Systems: Transport of Heat, Mass, and Electric Charge,” has been added. To make room for this new material, Chapter 8, “Machine Design,” of the previous edition has been removed. In Chapter 1,“Introduction,” more details on the setup of user preferences and the use of the MATLAB editor are provided, and the number of exercises has been significantly increased. Also, the Symbolic toolbox has been moved to this chapter. In Chapter 5, “Function Creation and Selected MATLAB Functions,” the section dealing with the differential equation solvers now includes the delay differential equations solver (dde23) and the one-dimensional parabolic–elliptic partial differential equations solver (pdepe). In addition, the range of examples for the ordinary differential equations solver bvp4c has been expanded to better illustrate its wide applicability. Chapter 6, “2D Graphics,” contains twice the number of special-purpose graph functions, more material on the enhancement of graphs, and several new examples replacing those used in the second edition. Chapter 9, “Vibrations,” has been extensively revised and expanded to include a wider range of applications. Chapter 13 “Optimization,” has also been expanded to demonstrate the use of the new Genetic Algorithm and Direct Search toolbox. Overall, the book has been “refreshed” to reflect the authors’ collective experiences with MATLAB, to introduce the new enhancements that are available in the MATLAB editor, and to include some of the new functions that have been introduced since the last edition. Overall, the examples, exercises, and MATLAB functions presented in the book have been increased by more than 25%. The book now contains 190 numbered examples, almost 300 exercises, and more than 375 MATLAB functions that are illustrated. The programs in this edition have been run on Version 2009a.

NEW TO THE EDITION • Text was revised and tested throughout for the latest version of the software: release 2009a • A new chapter has been added: Biological Systems: Transport of Heat, Mass, and Electric Charge • 25% increase in number of examples, exercises, and Matlab functions • Range of applications increased to include biology and electrical engineering • Chapter 5 Function Creation and Selected Matlab Functions now includes the delay differential equations solver (dde23) and the one-dimensional parabolicelliptic partial differential equations solver (pdepe). xxi

xxii

Preface to Third Edition

• Expanded coverage in Chapter 9 Vibrations gives a wider range of applications. • Chapter 13 Optimization has been expanded to demonstrate the use of the new Genetic Algorithm and Direct Search toolbox. We have also created additional resources for the instructor and for the user. In addition to a solution manual that is available to instructors, we also provide a set of PowerPoint slides covering the material presented in Chapters 1–7. For the user of the book, we have created M files of all the numbered examples in each chapter. These ancillary materials can be accessed from the publisher’s Web site. E. B. MAGRAB S. AZARM B. BALACHANDRAN J. H. DUNCAN K. E. HEROLD G. C. WALSH College Park, MD

1 Introduction Edward B. Magrab

1.1 Introduction 1 1.1.1 Organization of the Book and Its Goals 2 1.1.2 Some Suggestions on How to Use MATLAB 2 1.1.3 Book Notation Conventions 3 1.2 The MATLAB Environment 3 1.2.1 Introduction 3 1.2.2 Preliminaries—Command Window Management 5 1.2.3 Executing Expressions from the MATLAB Command Window—Basic MATLAB Syntax 8 1.2.4 Clarification and Exceptions to MATLAB’s Syntax 11 1.2.5 MATLAB Functions 14 1.2.6 Creating Scripts and Executing Them from the MATLAB Editor 19 1.3 Online Help 29 1.4 The Symbolic Toolbox 32 1.5 Summary of Functions Introduced in Chapter 1 41 Exercises 42 The characteristics of the MATLAB environment and MATLAB’s basic syntax are introduced.

1.1 INTRODUCTION MATLAB, which derives its name from Matrix Laboratory, is a computing language devoted to processing data in the form of arrays of numbers. MATLAB integrates computation and visualization into a flexible computer environment, and provides 1

2

Chapter 1

Introduction

a diverse family of built-in functions that can be used in a straightforward manner to obtain numerical solutions to a wide range of engineering problems. 1.1.1 Organization of the Book and Its Goals The primary goal of this book is to enable the reader to generate readable, compact, and verifiably correct MATLAB programs that obtain numerical solutions to a wide range of physical and empirical models and display the results with fully annotated graphics. The book can be used in several ways: • To learn MATLAB • As a companion to engineering texts • As a reference for obtaining numerical solutions to a wide range of engineering problems • As a source of applications of a wide variety of MATLAB solution techniques The level of the book assumes that one has some fluency in calculus, linear algebra, and engineering mathematics, can employ the engineering approach to problem solving, and has some experience in using mathematical models to predict the response of elements, devices, and systems. These qualities play an important role in creating programs that function correctly. The book has two interrelated parts.The first part consists of Chapters 1–7, which introduces the fundamentals of MATLAB syntax and commands and structured programming techniques. The second part, consisting of Chapters 8–14, makes extensive use of the first seven chapters to obtain numerical solutions to engineering problems for a wide range of topics. In several of these topical areas, MATLAB toolboxes are used extensively to minimize programming complexity so that one can obtain numerical solutions to engineering problems of varying degrees of difficulty. In particular, we illustrate the use of the Controls toolbox in Chapters 9 and 10, Simulink in Chapter 10, the Optimization toolbox in Chapter 13, the Statistics toolbox in Chapter 8, and the Symbolic toolbox in Chapters 1–5 and 9. 1.1.2 Some Suggestions on How to Use MATLAB Listed below are some suggestions on how to use the MATLAB environment to effectively create MATLAB programs. • Write scripts and functions in a text editor and save them as M-files. This will save time, save the code, and greatly facilitate the debugging process, especially if the MATLAB Editor is used. • Use the Help files extensively. This will minimize errors caused by incorrect syntax and by incorrect or inappropriate application of a MATLAB function. • Attempt to minimize the number of expressions comprising a program. This usually leads to a trade-off between readability and compactness, but it can

Section 1.2

The MATLAB Environment

3

encourage the search for MATLAB functions and procedures that can perform some of the programming steps faster and more directly. • When practical, use graphical output as a program is being developed. This usually shortens the code development process by identifying potential coding errors and can facilitate the understanding of the physical process being modeled or analyzed. • Most importantly, verify by independent means that the output from the program is correct. 1.1.3 Book Notation Conventions In order to facilitate the recognition of the significance of variable names and the origin of numerical values; that is, whether they are input values or output results, the following font conventions are employed. Variable/Function Name User-created variable MATLAB function MATLAB reserved word User-created function

Font Times Roman Courier Courier Times Roman Bold

Example ExitPressure, a2, sig cosh(x), pi for, switch, while BeamRoots(a, x, k)

Numerical Value Provided in program Output to command window or to a graphical display

Font Times Roman Helvetica

Example 5.672 5.672

1.2 THE MATLAB ENVIRONMENT 1.2.1 Introduction When the MATLAB program is launched, four windows appear as shown in Figure 1.1. The upper right-hand window is the Workspace window, which displays a list of the variables that the user has currently defined and their properties. The center window is the MATLAB Command window. The lower right-hand window is the Command History window, which displays all entries made in the command window during each session. A session is the interval between the start of MATLAB and its termination. The time and date appear before each list in this window to indicate when these entries began being recorded. It is a convenient way to review past sessions and to recapture previously used commands. The command histories are maintained until it is cleared using the Clear Command History selection from the Edit menu. Similar choices exist for the Workspace and for the Command windows. These latter two clearing operations will be discussed subsequently. The left-hand window displays the files in the current directory. To bring up the MATLAB Editor/Debugger, which provides the preferred means to create and run programs, one clicks on the white rectangular icon that

4

Chapter 1

Figure 1.1

Introduction

MATLAB default windows.

appears under File in the left uppermost corner of the window. This results in the configuration shown in Figure 1.2. Other windows can be employed and can be accessed from the View menu. To eliminate any of the windows, simply close it by clicking on the * in its respective upper right-hand corner. One way to configure these windows is to use only the command window and the editor window and to call up the other windows when needed. One such configuration of these two windows is shown in Figure 1.3. Upon restarting MATLAB, the system will remember this configuration and this arrangement of the windows will appear.

Figure 1.2

MATLAB default windows and the Editor.

Section 1.2

The MATLAB Environment

5

Figure 1.3 MATLAB command window (left) and the Editor (right) after closing the command history, current directory, and workspace windows and opening the Editor.

1.2.2 Preliminaries—Command Window Management During any MATLAB session—that is, during any time until the program is exited— MATLAB retains in its memory the most recently obtained values of all variables defined by each expression that has been either typed in the command window or evaluated from a script file, unless the clear function is invoked. The clearing of the variables in the workspace can also be obtained by selecting Clear Workspace from the Edit pull-down menu, as shown in Figure 1.4. The clear function deletes all the variables from memory. The numerical values most recently assigned to these variables are accessible anytime during the session (provided that clear hasn’t been used) by simply typing the variable’s name or by using it in an expression. Typing performed in the MATLAB command window remains in the window and can be accessed by scrolling back until the scrolling memory has been exceeded, at which point the earliest entered information has been lost. However, the expressions evaluated from the execution of a script file are not available in the command window, although the variable names and their numerical values are available as indicated in the preceding paragraph. This record of previously typed expressions in the command window can be removed by going to the Edit pull-down menu at the top of the MATLAB command window and selecting Clear Command Window, which clears the MATLAB command window, but does not delete the variables, which have to be removed by using clear. Refer to Figure 1.4. One could also clear the command window by typing clc in the command window. In addition, the copy and paste icons can be used either to reproduce previously typed expressions in the current (active) line in the MATLAB command window or to paste MATLAB expressions from the MATLAB command window into the Editor or vice versa.

6

Chapter 1

Figure 1.4

Introduction

Edit pull-down menu selections.

For a listing of what variables have been created since the last application of clear, one either types whos in the MATLAB command window or goes to the pull-down View menu and selects Workspace, which opens a window with this information. Either method reveals the names of the variables, their size, the number of bytes of storage that each variable uses, and their class: double (8 byte numerical value), which is discussed in Chapter 2; string (literal), which is discussed in Section 3.1; symbolic, which is discussed in Section 1.4; cell, which is discussed in Section 3.4; or function, which is discussed in Section 5.2. The Workspace window can be unlocked from its default location by clicking on the icon next to the * in its upper right-hand corner. When one is done with the window, it can be minimized so that this information is readily available for the next time. To make the numbers that appear in the command window more readable, MATLAB offers several options with the format function. Two functions that are particularly useful are format compact and format long e The former removes empty (blank) lines and the latter provides a toggle from the default format of 5 digits to a format with 16 digits plus a 3-digit exponent.The format long e option is useful when debugging scripts that produce numbers that either change by very small amounts or vary over a wide range. To toggle back to the default settings, one types the command format short

Section 1.2

The MATLAB Environment

Figure 1.5

7

Preferences menu selection for command window format.

These attributes can also be changed by selecting Preferences from the File pulldown menu and selecting Command Window as shown in Figure 1.5. The changes are then made by selecting the desired format from the list of available formats. The different formats that are available are listed in Table 1.1. Two keyboard entries that are very useful are ¿c (Ctrl and c simultaneously) ¿ and p (Ctrl and p simultaneously). Application of ¿p places in the MATLAB TABLE 1.1 Examples of the Command Window format Options

Option

Display number 7 1

Display 0 6 number 6 1

short long short e long e short g long g short eng long eng rational hex bank

444.4444 4.444444444444445e+002 4.4444e+002 4.444444444444445e+002 444.44 444.444444444444 444.4444e+000 444.444444444444e+000 4000/9 407bc71c71c71c72 444.44

0.0044 0.004444444444444 4.4444e-003 4.444444444444444e-003 0.0044444 0.00444444444444444 4.4444e-003 4.44444444444444e-003 1/225 3f723456789abcdf 0.00

8

Chapter 1

Introduction

command window the last entry typed from the keyboard, which can then be implemented by pressing Enter. In addition, prior to pressing Enter, one can modify the expression. If Enter is not pressed and instead ¿p is entered again, then the next most recently typed entry replaces the most recent entry, and so on. This same result can be obtained using the up-arrow ( c ) and down-arrow ( T ) keys. The application of ¿c either aborts a running program or exits a paused program. 1.2.3 Executing Expressions from the MATLAB Command Window—Basic MATLAB Syntax MATLAB permits the user to create variable names with a length of up to sixtythree alphanumeric characters, with the characters after the sixty-third being ignored. Each variable name must start with either an uppercase or lowercase letter, which can then be followed by any combination of uppercase and lowercase letters, numbers, and the underscore character (_). No blank spaces may appear between these characters. Variable names are case sensitive, so a variable named junk is different from junK. There are two commonly used conventions: one that uses the underscore and the other that uses capital letters. For example, if the exit pressure is a quantity that is being evaluated, then two possible definitions that could be defined in a MATLAB command line, script, or function are exit_pressure and ExitPressure. There are, however, several variable names called keywords that are explicitly reserved for MATLAB as part of its programming language. These keywords, which are listed in Table 1.2, may never be used as variable names. The usage of most of these keywords will be given in the subsequent chapters. Creating suitable variable names is a trade-off between easily recognizable and descriptive identifiers and readability of the resulting expressions. If the expression has many variable names, then short variable names are preferable. This becomes increasingly important as the grouping of the symbols becomes more complex. Shorter names tend to decrease errors caused by the improper grouping of terms and the placement of arithmetic operators. In addition, one can neither use Greek letters literally as variable names nor can one use subscripts and superscripts. However, one can spell the Greek letter or can simply precede the subscript by the underscore character. For example, one could represent sr as sigma_r and c3 as c3 or c_3. TABLE 1.2 Keywords Reserved Explicitly for the MATLAB Programming Language

break case catch continue else elseif end for function

global if otherwise persistent return switch try while

Section 1.2

The MATLAB Environment

9

We shall illustrate the two ways in which one can evaluate expressions in MATLAB: one from the command window and the other from the Editor. When using the command window, one must define one or more variables at the prompt ( 7 7 ). MATLAB requires that all variables, except those defined as symbolic quantities and used by the Symbolic toolbox, be assigned numerical values prior to being used in an expression. The assignment operator is the equal sign ( = ). Typing the variable name, an equal sign, the numerical value(s), and then Enter performs the assignment. Thus, if we wish to assign three variables p, x, and k the values 7.1, 4.92, and -1.7, respectively, then the following interaction in the MATLAB command window is obtained. » p = 7.1 p= 7.1000 » x = 4.92 x= 4.9200 » k = -1.7 k= -1.7000

User types and hits Enter System response User types and hits Enter System response User types and hits Enter System response

This command window interaction was obtained using format compact. In order to suppress the system’s response, one places a semicolon (;) as the last character of the expression. Thus, typing each of the following three expressions on their respective lines followed by Enter, gives » p = 7.1; » x = 4.92; » k = -1.7; »

MATLAB also lets one place several expressions on one line, a line being terminated by Enter. In this case, each expression is separated by either a comma (,) or a semicolon (;). When a comma is used, the system echoes the input. Thus, if the following is typed, p = 7.1, x = 4.92, k = -1.7

then the system responds with p= 7.1000 x= 4.9200 k= -1.7000 »

The use of semicolons instead of the commas would have suppressed this output.

10

Chapter 1

Introduction

Arithmetic Operators The five arithmetic operators to perform addition, subtraction, multiplication, division, and exponentiation are +, -, *, /, and ¿, respectively. For example, the mathematical expression t = a

k 1 b 1 + px

can be written in MATLAB as t = (1/(1+p*x)) ¿k when p, x, and k are scalar quantities. The quantities p, x, and k must be assigned numerical values prior to the execution of this statement. If this has not been done, then an error message to that effect will appear. Assuming that the quantities p, x, and k were those entered previously in the command window and not cleared, the system returns t= 440.8779

Mathematical Operations Hierarchy The parentheses in the MATLAB expression for t have to be used so that the mathematical operations are performed on the proper collections of quantities in their proper order within each set of parentheses. There is a hierarchy and a specific order that MATLAB uses to compute arithmetic statements. One can take advantage of this to minimize the number of parentheses. However, parentheses that are unnecessary from MATLAB’s point of view can still be used to remove visual ambiguity and to make the expression easier to understand. The parentheses are the highest level in the hierarchy, followed by exponentiation,1 then by multiplication and division, and finally by addition and subtraction. Within each set of parentheses and within each level of hierarchy, MATLAB performs its operations from left to right. Consider the examples shown in Table 1.3 involving the scalar quantities c, d, g, and x. The MATLAB function sqrt(x) takes the square root of its argument x. Notice that in the first row of Table 1.3 the parentheses around the quantity x + 2 are required. If they weren’t used; that is, the relation was written as 1-d*c^x+2 then, we would have coded the expression 1 - dcx + 2. The same reasoning is true for the exponent in the third row of the table. In the third row, notice that the form 2*c^(x+2)/d 1

The matrix transpose, which is discussed in Section 2.2, is also on the same level as exponentiation. The matrix transpose symbol in MATLAB is the apostrophe (').

Section 1.2

The MATLAB Environment

11

TABLE 1.3 Examples of MATLAB Syntax: All Quantities Are Scalars

Mathematical expression

MATLAB expression

1 - dcx + 2 dcx + 2 (2/d)cx + 2 (dcx + 2)/g2.7

1 -d*c¿(x +2) d*c¿x +2 or 2+d*c¿x (2/d)*c¿(x +2) or 2/d*c¿(x +2) or 2*c¿(x +2)/d (d*c¿x+2)/g¿2.7 sqrt(d*c¿x+2) or (d*c¿x+2)¿0.5

2dcx + 2

is correct because of the hierarchy rules. The innermost set of parenthesis is (x + 2) and is computed first. Then, exponentiation is performed, because this is the next highest level of the computational order. Next, the multiplications and divisions are performed from left to right, because the three quantities, 2, the result of cx + 2, and d are all on the same hierarchical level: multiplication and division. 1.2.4 Clarification and Exceptions to MATLAB’s Syntax Scalars versus Arrays MATLAB considers all variables as arrays of numbers; therefore, when using the five arithmetic operators (+, -, *, /, and ¿), these operations have to obey the rules of linear algebra. These rules are discussed in Section 2.6. When the variables are scalar quantities, that is, when they are arrays of one element (one row and one column), the usual rules of algebra apply. However, one can operate on arrays of numbers and suspend the rules of linear algebra by using dot operations, which are discussed in Section 2.5. Dot operations provide a means of performing a sequence of arithmetic operations on arrays of the same size on an array element by array element basis. When using the dot operators, the multiplication, division, and exponentiation operators become .*, ./, and .¿, respectively. Blanks In an arithmetic expression, the use of blanks can be employed with no consequence. Variable names on the right-hand side of the equal sign must be separated by one of the five arithmetic operators, a comma (,), or a semicolon (;). There are two exceptions to this usage of blanks. The first is when one represents a complex number z = a + jb or z = a + ib, where i = j = 1-1. Consider the following script a = 2; b = 3; z = a +1j*b % or a+b*1j which upon execution gives z= 2.0000 + 3.0000i

The number 1 that precedes the j is not required, but it is strongly recommended by MATLAB that it be used for increased speed and robustness. Notice that the

12

Chapter 1

Introduction

program used j, but the system responded with an i, showing the system’s equivalent treatment of these two quantities. Also, note that j was not defined previously; therefore, MATLAB assumes that it is equal to 1-1. However, when a and b are replaced with numerical values directly in the expression, no arithmetic operator is required. Thus, the script a = 2; b = 3; z = (a+1j*b)*(4-7j) upon execution gives z = 29.0000 – 2.0000i

In this usage, the j (or i) must follow the number without a space. The second exception is when we express a number in exponential form such as x = 4.56 * 10-2. This number can be expressed as either x = 0.0456 or x = 4.56*10^-2 or as x = 4.56e-2 The last expression is the exponential form. Notice that no arithmetic operator is placed between the last digit of the magnitude and the ‘e’. The maximum number of digits that can follow the ‘e’ is 3. Thus, if we desired the quantity x2 and we used the exponential form, the script would be x2 = 4.56e-2^2 which upon execution displays to the command window x2 = 0.0021

If the value of x were 4.56 * 102, the implied ‘ + ’ sign may be omitted; that is, the square of x can be written as either x = 4.56e2^2 or x = 4.56e+2^2 System Assignment of Variable Names When the command window is used as a calculator and no assignment of the expression has been made, MATLAB will always assign the answer to the variable named

Section 1.2

The MATLAB Environment

13

ans. For example, let us assume that one wants to determine the value of the cosine of p/3. We simply type in the command window2 cos(pi/3) and the system will respond with ans = 0.5000

The variable ans can now be used as one would use any other variable name. If we now want to add 2 to the previous result, then we would type in the command window ans+2 and the system would respond with ans = 2.5000

Thus, ans has been assigned the new value of 2.5. The previous value of ans ( = 0.5) is no longer available. Complex Numbers MATLAB permits one to mix real and complex numbers without any special operation on the part of the user. Thus, if one types in the command window z = 4 + sqrt(-4) then the system would display z= 4.0000 + 2.0000i

As another example, consider the evaluation of the expression ii, which is obtained by typing in the command window z = i^i The execution of this expression gives z= 0.2079

since ii = (epi/2)i = e-p/2 = 0.2079.

2

In the command window, the alphanumeric characters will appear in the same font. We are using different fonts to enhance the readability of the expressions as mentioned in Section 1.1.3.

14

Chapter 1

Introduction

TABLE 1.4 Some Elementary MATLAB Functions

Mathematical function

MATLAB expression

ex ex - 1 x 66 1 1x ln(x) or loge(x) log10(x) ƒxƒ signum(x) loge(1 +x) x 66 1 n! All prime numbers … n

exp(x) expm1(x) sqrt(x)a log(x)b log10(x) abs(x) sign(x) log1p(x) factorial(n)c primes(n)

If x is an array with each element in the array 7 0, use realsqrt(x) to increase computational speed. b If x is an array with each element in the array 7 0, use reallog(x) to increase computational speed. c 15 digits accuracy for n … 21; for larger n, only the a

magnitude and the 15 most significant digits will be correct.

1.2.5 MATLAB Functions MATLAB provides a large set of elementary functions and specialized mathematical functions. Some of the elementary functions and some built-in constants are listed in Tables 1.4, 1.5, and 1.6. In Tables 1.4 and 1.5, x can be a real or complex scalar, a vector, or a matrix; the quantity n is a real positive integer. The definitions of vectors and matrices and their creation in MATLAB are given in Sections 2.3 and 2.4. In Table 1.7, we have listed the relational operators that are used in MATLAB. Several MATLAB functions are available to round decimal numbers to the nearest integer value using different rounding criteria. These functions are fix, round, ceil, and floor. The results of the different operations performed by these four functions are summarized in Table 1.8.

TABLE 1.5 MATLAB Trigonometric and Hyperbolic Functions

Trigonometric

Hyperbolic

Function

(x in radians)

(x in degrees)

Inverse

sine cosine tangent secant cosecant cotangent

sin(x) cos(x) tan(x) sec(x) csc(x) cot(x)

sind(x) cosd(x) tand(x) secd(x) cscd(x) cotd(x)

asin(x) acos(x) atan(x)† asec(x) acsc(x) acot(x)



Inverse sinh(x) cosh(x) tanh(x) sech(x) csch(x) coth(x)

asinh(x) acosh(x) atanh(x) asech(x) acsch(x) acoth(x)

atan2(y, x) is the four-quadrant version, which must be used when the signs of y and x can each be positive or negative.

Section 1.2

The MATLAB Environment

15

TABLE 1.6 Some MATLAB Constants and Special Quantities

Mathematical quantity or operation

MATLAB expression

p 1-1

pi i or j

Floating point relative accuracy q 0/0, 0* q , q / q Largest floating-point number before overflow Smallest floating-point number before underflow

eps

Comments

inf NaN realmax

3.141592653589793 Used to indicate a complex quantity as a + 1j*b, where a and b are real. The distance from 1.0 to the next largest floating-point number ( L2.22 * 10 - 16) Indicates an undefined mathematical operation. L1.7977e+308

realmin

L2.2251e-308

TABLE 1.7 MATLAB Relational Operators

Conditional

Mathematical symbol

MATLAB symbol

equal not equal less than greater than less than or equal greater than or equal

= Z 6 7 … Ú

== ~= 6 7 6= 7=

TABLE 1.8 MATLAB Decimal-to-Integer Conversion Functions

MATLAB function

x

y

Description

y = fix(x)

2.7 -1.9 2.49 - 2.51j

2.0000 -1.0000 2.0000 - 2.0000i

Round toward zero

y = round(x)

2.7 -1.9 2.49 - 2.51j

3.0000 -2.0000 2.0000 - 3.0000i

Round to nearest integer

y = ceil(x)

2.7 -1.9 2.49 - 2.51j

3.0000 -1.0000 3.0000 - 2.0000i

Round toward infinity

y = floor(x)

2.7 -1.9 2.49 - 2.51j

2.0000 -2.0000 2.0000 - 3.0000i

Round toward minus infinity

16

Chapter 1

Introduction

TABLE 1.9 MATLAB Complex Number Manipulation Functions

MATLAB function

z

y

Description

z = complex(a, b)

a +b*j

-

3 +4j 3 +4j 3 +4j 3 +4j a +b*j

5 3 -4j 3 4 atan2(b, a)

Form complex number; a and b real Absolute value: 2a2 + b2 Complex conjugate Real part Imaginary part Phase angle in radians: -p…y …p

y y y y y

= = = = =

abs(z) conj(z) real(z) imag(z) angle(z)

There are also several MATLAB functions that are used to create and manipulate complex numbers. These are complex, abs, conj, real, imag, and angle. The operations of these six functions are summarized in Table 1.9. Lastly, in Table 1.10, we have listed several specialized mathematical functions and elementary descriptive statistical functions. Additional MATLAB functions for various classes of mathematical operations are given in subsequent chapters. Numerous MATLAB array creation and manipulation functions are summarized in Table 2.1. MATLAB functions that can

TABLE 1.10 Several Specialized Mathematical Functions and Descriptive Statistical Functions*

Mathematical function

MATLAB Expression

Description

Specialized mathematics Ai(x), Bi(x) Iv(x) Jv(x) Kv(x) Yv(x) B(x,w) K(m), E(m)

airy(0,x), airy(2,x) besseli(nu, x) besselj(nu, x) besselk(nu, x) bessely(nu, x) beta(x, w) ellipke(m)

erf(x), erfc(x)

erf(x), erfc(x)

E1(z) ≠(a) Pm n (x)

expint(x) gamma(a) legendre(n, x)

Airy functions Modified Bessel function of first kind Bessel function of first kind Modified Bessel function of second kind Bessel function of second kind Beta function Complete elliptic integrals of first and second kind Error function and complementary error function Exponential integral Gamma function Associated Legendre function

Descriptive Statistics maximum value of x m median minimum value of x mode s or s s2 or s2

max(x) mean(x) median(x) min(x) mode(x) std(x) var(x)

Largest element(s) in an array of values Average or mean value of array of values Median value of an array of values Smallest element(s) in an array of values Most frequent values in an array of values Standard deviation of an array of values Variance of an array of values

*See Tables 8.2 and 8.21 for additional statistical functions.

Section 1.2

The MATLAB Environment

17

be used to create and manipulate string expressions (literals) are summarized in Table 3.1 and those that can be used to analyze data arrays and mathematical expressions are summarized in Table 5.4. Lastly, MATLAB functions that are used to create 2D and 3D graphic displays are summarized in Tables 6.15 and 7.10, respectively. Specialized functions that are used to model and analyze control systems are summarized in Table 10.1. Functions that deal with optimization of systems are summarized in Table 13.8, and those that deal with statistics are summarized in Table 8.21. Functions that are used by the Symbolic toolbox are summarized in Table 1.12. In addition to the five arithmetic operators (+, -, *, /, and ¿) that were discussed previously, there are several other symbols that are reserved by MATLAB to have special meaning. These are listed in Table 1.11 and their usage is discussed in Chapters 1–5.

TABLE 1.11

Special Characters and a Summary of Their Usage†

Character

Name

Usage

.

Period

(a) Decimal point. (b) Part of arithmetic operators to indicate a special type of vector or matrix operation, called the dot operation, such as c = a.*b. (c) Delimiter in a structure, such as name.first.

,

Comma

(a) Separator within parentheses of matrix elements such as b(2,7) and functions such as besselj(1, x) or brackets creating vectors such as v = [1, x] or the output of function arguments such as [x, s] = max(a). (b) Placed at the end of an expression when several expressions appear on one line.

;

Semicolon

(a) Suppresses display of the results when placed at end of an expression. (b) Indicates the end of a row in matrix creation statement such as m = [x y z; a b c].

:

Colon

(a) Separator in the vector creation expression x = a:b:c. (b) For a matrix z, it indicates “all rows” when written as z(:,k) or “all columns” when written as z(k,:).

()

Parentheses

(a) Denotes subscript of an element of matrix z, where z(j, k) 4 zjk is the element in row j and column k . (b) Delimiters in mathematical expressions such as a¿(b+c). (c) Delimiters for the arguments of functions, such as sin(x).

[]

Brackets

Creates an array of numbers, either a vector or a matrix, or an array of strings (literals).

{}

Braces

Creates a cell array.

%

Percentage

Comment delimiter; used to indicate the beginning of a comment wherein MATLAB ignores everything to its right. The exception is when it is used inside a pair of single quotes to define a string such as a = 'p = 14 % of the total'. (Continued)

18

Chapter 1

Introduction

TABLE 1.11 (Continued )

Character

Name

Usage

%%

Percentage

Used to delimit the start and end of a cell in the MATLAB Editor, which is a portion of program code.

%{ %}

Percentage and brace

Used to enclose a block of contiguous comment lines. Comments placed between these delimiters do not have to be preceded by a %. However, no text can be placed on the line containing these delimiters.



Quote or Apostrophe

(a) ‘Expression’ indicates that Expression is a string (literal). (b) Indicates the transpose of a vector or matrix. If the vector or matrix is complex, then, in addition, the complex conjugate of each element is taken.

Á

Ellipsis

Continuation of a MATLAB expression to the next line. Used to create code that is more readable.

Blank

Context dependent: either ignored, indicates a delimiter in a data creation statement such as c = [a b], is a character in a string statement, or is a delimiter in an optional form of certain MATLAB functions such as syms a b and format long.

@

At sign

Constructs a function handle by placing @ before a function name, such as @FunctionName.

\

Backslash

(a) A mathematical operator to perform certain matrix operations. (b) A character that is used to display Greek letters and mathematical symbols in graph annotation.



See Table 4.1 for a list of logical operators.

Overloading Although the choice of variable names is virtually unlimited, one should avoid choosing names that are the same as those used for MATLAB’s built-in functions or for user-created functions. MATLAB permits one to overload a built-in function name. For example, the following expression is a valid MATLAB expression cos = a+b*x^2; However, since ‘cos’ is also the name used for the cosine function, cos(x), this is a poor choice for a variable name and it is strongly recommended that such redefinitions be avoided. An exception to this recommendation is when all quantities in one’s program are real variables. In this case, overloading i and j will not cause any unexpected results. Example 1.1

Usage of MATLAB functions

To illustrate the use of the MATLAB’s built-in functions, consider the following expression to be evaluated at x = 0.1 and a = 0.5: y = 2 ƒ e - px - sinx/ cosha - ln e(x + a) ƒ

Section 1.2

The MATLAB Environment

19

This expression is evaluated with the following script: x = 0.1; a = 0.5; y = sqrt(abs(exp(-pi*x)-sin(x)/cosh(a)-log(x+a))) where the MATLAB function pi = p. Upon execution, the following result is displayed in the command window: y= 1.0736

1.2.6 Creating Scripts and Executing Them from the MATLAB Editor3 A script file is a file that contains a list of commands, each of which will be operated on as if it were typed at the command line in the command window. A script file is created in a word processor, a text editor, or the MATLAB Editor/Debugger, and saved as a text file with the suffix “.m”. Such files are called M-files. If a word processor or text editor is used, then the file is executed by typing the file name without the suffix “.m” in the MATLAB command window. If the MATLAB Editor is used, one can use the previous method or can click on the Save and Run icon on the top of the Editor’s window as shown in Figure 1.6. However, before one can use this icon, the file must be saved the first time by using the Save As option from the File pull-down menu.The filenaming convention is the same as that for variable names: It must start with an upper or lower case letter followed by up to sixty-two contiguous alphanumeric characters and the underscore character. No blank spaces are allowed in file names. (This is different from what is allowed by the Windows operating system.) When the MATLAB Editor/Debugger is used, an “.m” suffix will be affixed to the file name. Another form of a file created in the Editor is the function file. These functions are created because one of MATLAB’s built-in functions requires them or one wants to use them to better manage the programming task. Functions differ from scripts in that they allow a structured approach to managing the programming task.They differ from expressions entered at the command line in that MATLAB allots them their own private workspace and they have formally defined input–output relationships within the MATLAB environment. Functions are discussed in Chapter 5.

Save and Run icon

Figure 1.6

3

Save and Run (execute) icon in the Editor.

In terms of execution time, functions generally run faster than scripts. Functions are introduced in Chapter 5, where from that point forward, scripts are used less frequently.

20

Chapter 1

Introduction

Script files are usually employed in those cases where: 1. 2. 3. 4. 5. 6.

The program will contain more than a few lines of code. The program will be used again. A permanent record is desired. It is expected that occasional upgrading will be required. Substantial debugging is required. One wants to transfer the listing to another person or organization. A script or a function typically has the following attributes:

1. Documentation, which at a minimum indicates the: Purpose and operations performed Programmer’s name Date originated Date(s) revised Description of the input variable names: number, meaning, and type (class) Description of the output variable names: number, meaning, and type (class) 2. Input, which for those quantities that are entered externally, includes numerous checks to ensure that all input values have the qualities required for the script/function to work properly. 3. Initialization, where the appropriate variables are assigned their initial values. 4. Computation, where the numerical evaluations are performed. 5. Output, where the results are presented as annotated graphical and/or numerical quantities. The MATLAB Editor The MATLAB Editor has several features that make it especially suitable for creating scripts and functions files. Converting Executable Code to Comment Statements During program development, one can convert one or more lines of code to comment statements and convert them back to executable statements. This switching from commented quantities to executable code is done with the cursor; one highlights the lines to be converted, goes to the Text pull-down menu on top of the window, and then selects the appropriate action—comment or uncomment— as shown in Figure 1.7. Visual Aids When creating program flow control structures as described in Chapter 4, one can indent lines of code to improve readability. This can be done in two ways. One is to go to the Text pull-down menu and select Smart Indent, as shown in Figure 1.7. The second way is to use the cursor to highlight the lines of code that are to be indented and press ¿i (Ctrl and i simultaneously). An example of these actions is shown in Figure 1.8.

Section 1.2

The MATLAB Environment

Figure 1.7

21

Text pull-down menu in the Editor.

The Editor also employs a color scheme. Keywords appear in blue, letters and numbers appearing between a pair of apostrophes are in violet, and comments appear in green. These features also are indicated in Figure 1.8. Parentheses Grouping The Editor also keeps track of open and closed parentheses when typing a line of code. Every time a closed parenthesis is typed, the appropriate open parenthesis to the left is momentarily highlighted or underscored. This can be of great aid in verifying the grouping of terms.

Comment in green

Keywords in blue

Smart indent

Figure 1.8

Color visual aids and “smart” indenting in the Editor.

String in violet

22

Chapter 1

Introduction

M-Lint In addition to the features mentioned above, the Editor also has a realtime syntax evaluator called M-Lint. When this feature is enabled, all syntax errors are detected as the code is being entered into the Editor. In other words, all syntax errors will be detected prior to executing the program. M-Lint is activated by going to Preferences, selecting M-Lint, and as shown in Figure 1.9, checking the box that enables the notification of warnings and error messages. Then, one clicks on Apply at the bottom of the window. In Figure 1.10, we have shown a very small program in which we have deliberately typed an expression that will generate a warning and another expression that contains an error. These errors are brought to our attention with color-coded horizontal bars in the right-hand column of the window. The top bar is orange, which indicates a warning. For this type of error, the program will execute. We see that in this case, line five does not end with a semicolon. For line six, the bar is red, which indicates that until the error is corrected, the program will not execute. To determine the error, one places the cursor over the bar, and the error message is displayed. In this case, it is indicating that a parenthesis is missing. The overall error status of the program is given by a colored square at the top of the right-hand column: green for no errors or warnings; orange for warnings, but no errors; and red for errors that prohibit program execution. In long programs, these bars do not necessarily align themselves with the line that contains the error. One has to place the cursor over each bar to determine the line number to which it is referring.

Figure 1.9

Enabling M-Lint from the Preferences menu.

Section 1.2

The MATLAB Environment

23

Red square

Orange bar

Red bar With cursor placed on red bar, this error message is displayed.

Figure 1.10 An example of M-Lint detecting two errors. In the error message, the designation “imbalance” refers to the omission of a right-most parenthesis, whose location has been underscored with a red line (darker shade). The message associated with the orange bar (lighter shade) indicates the omission of a semicolon at the end of the expression.

Cells The last feature of the Editor that we shall discuss is the ability to define blocks of code in a program, which are called cells, such that each cell can then be run independently of any other cell in a program or of any other line of code in the program. The cells are delineated by a pair of percentage signs (%%), one pair placed prior to the first line of code and one pair placed after the last line of the code. The cell feature is activated by clicking on Cell and selecting Enable Cell Mode, as shown in Figure 1.11. When the cell mode has been enabled, a set of additional icons appear

Figure 1.11 Enabling the cell feature of the Editor.

24

Chapter 1

Introduction

Run the highlighted cell

Run the highlighted cell and advance to the next cell

Highlighted cell

Second cell Third cell

Figure 1.12 Program with three cells. The cell denoted Part 1 has been selected.

as shown in Figure 1.12. In Figure 1.12, we have written a small program that has three parts. Each part is delineated with a pair of parentheses to indicate the extent of the three cells. The first cell, designated as Part 1, has been selected by clicking the cursor anywhere in the region between the parentheses pairs. This results in the area being highlighted with a light tan background. There are two ways to evaluate this cell as indicated in Figure 1.12. Recommendation Because of the features mentioned above and because of the seamless integration of the Editor and its features with the rest of MATLAB, it is strongly recommended that the reader create all programs, no matter how small, in the Editor and then run them directly from the Editor. It is also recommended that one keep M-Lint enabled. Executing Programs In order to execute script files and function files, MATLAB must be provided with the path to the directory in which the files reside.The path information is entered by going to the File pull-down menu and selecting Set Path. This opens the Set Path window shown in Figure 1.13. One then clicks on the Add Folder text box and chooses the folder in which the file will reside as shown in Figure 1.14. Before leaving the Path Browser, it is suggested that Save be selected; this saves the path for the next time MATLAB is used. If one attempts to execute a script from the Editor that is not in the current path, MATLAB will ask, via the pop-up window shown in Figure 1.15, if the current path should be changed to the one in which the file resides. If the answer is yes, one clicks on the Change Directory icon. One can also set the current path name by clicking the icon in the command window shown in Figure 1.16. This brings up a directory browser that permits one to select a directory as the current directory. After a selection is made, the system also changes the directories that will appear in the Editor when either Open, Save, or Save As is selected in the File pull-down menu.

Section 1.2

The MATLAB Environment

25

Figure 1.13 Set Path window.

If either a script or a function requires the user to enter a numerical value (or a series of numerical values if the quantity is either a vector or a matrix, as discussed in Sections 2.3 and 2.4) from the MATLAB command window, then the script (or function) file contains the statement VariableName = input('Any message')

Figure 1.14 Pop-up window used to locate a directory.

26

Chapter 1

Introduction

Figure 1.15 Pop-up window used to change current path to path of file to be executed.

where input is a MATLAB function and Any message is displayed in the MATLAB command window. After this expression is executed, the response typed, and Enter pressed, the value (or series of values) entered is assigned to VariableName. Other methods of data entry are given in Section 3.3, and further clarifications of the usage of input are given in Section 3.2. There are several ways of getting program results to the command window. The first is simply to omit the semicolon (;) at the end of an expression. In this case, MATLAB displays in the command window the variable’s name followed by an equal sign, and then skips to the next line and displays the value(s) of the variable. This method is useful during debugging. When output values are to be annotated for clarity, one uses either disp or

Clicking on this icon brings up the Browser.

Figure 1.16 Accessing the Browser window to change current path (directory).

Section 1.2

The MATLAB Environment

27

fprintf which are discussed in Section 3.1.2. It is good practice when creating scripts to start each script with the functions clc and clear. This clears all variables created previously and also clears the command window. In addition, when one has created graphics, which appear in separate windows as discussed in Section 6.1, one should close them using close all. Lastly, when global variables have been created, as discussed in Section 5.2.2, one should use clear global. The more inclusive function clear all also clears global variables. Thus, in general, each program should start with the following functions: clear % or clear all clc clear global % not required if clear all is used close all We shall now summarize this material with an example, and we shall show what the command window and the workspace window look like after the program has been executed. Example 1.2

Flow in a circular channel

The flow rate Q in m3/s in an open channel of circular cross-section shown in Figure 1.17 is given by4 Q =

3/2 23/2D5/2 c 1g (u - 0.5 sin(2u))

8 1 sinu (1 - cosu)5/2

where g = 9.8 m/s2 is the gravitational constant and Dc is given by Dc =

d (1 - cosu) 2

If we assume that d = 2 m and u = 60° = p/3, then the MATLAB script is that shown in Figure 1.18a and repeated below for clarity. g = 9.8; d = 2; th = pi/3; % Input Dc = d/2*(1-cos(th)); Qnum = 2^(3/2)*Dc^(5/2)*sqrt(g)*(th-0.5*sin(2*th))^(3/2); Qden = 8*sqrt(sin(th))*(1-cos(th))^(5/2); Q = Qnum/Qden % m^3/s

d/2



d/2

Dc

Figure 1.17 Circular channel. 4

T. G. Hicks, Mechanical Engineering Formulas: Pocket Guide, McGraw Hill, NY, 2003, p. 254.

28

Chapter 1

Introduction

(a)

(b) Figure 1.18 (a) Editor window for the script for Example 1.1, and (b) workspace and command windows.

After clicking the Save and Run icon in the Editor, the answer, Q = 0.5725, is displayed in the command window. Upon execution of the script file, the Workspace window is populated as shown in Figure 1.18b. It displays a record of the seven variables that have been created: Dc, Q, Qnum, Qden, g, d, and th. Since all the commands have been issued from the Editor, the Command History window is empty and has not been displayed. As a final comment, the form of the definitions of the various quantities appearing in the script was chosen to make the independent calculations used to verify the script both easier to perform and easier to compare with what the script gives. During the debugging stage, each quantity should be calculated independently and be compared to those computed by the script by temporarily omitting the semicolon at the end of each expression.

Section 1.3

Online Help

29

1.3 ONLINE HELP MATLAB has a complete online help capability, which can be accessed in several ways. One way is to click on the question mark (?) icon on the toolbar of the command window. This opens the Help window shown in Figure 1.19. It should be minimized, rather than closed, after each use so that it is readily available. Going to the Help pull-down menu shown in Figure 1.20 also brings up the window shown in Figure 1.19, except that it opens at specific locations depending on what has been selected. If MATLAB Help is selected, then the same starting point as selecting the question mark (?) appears. If Using the Desktop is selected, then it opens the right-hand window to the section titled Desktop, as shown in Figure 1.21. If Using the Command Window is selected, then it opens the right-hand window to the section titled Running Functions — Command Window and History as shown in Figure 1.22. If one wants specific information about a particular MATLAB function and the name of that function is known, then the Index tab in the left-hand window is clicked and the command is typed in the blank area as shown in Figure 1.23 and Enter pressed. If enter is not pressed, the function name is selected. In either case, the information in the right-hand window is displayed. Another way to obtain access to information about a specific function is to type in the MATLAB command window help FunctionName

Figure 1.19 Help window.

30

Chapter 1

Introduction

Figure 1.20 Help pull-down menu.

where FunctionName is the name of the function about which information is sought. Almost the same information that appears from using the Index search in the Help window is obtained, only in a less elegant format. Usually, the Command window

Figure 1.21 Help window when Using the Desktop has been selected from the Help pull-down menu.

Section 1.3

Online Help

Figure 1.22 Help window when Using the Command Window has been selected from the Help pull-down menu.

Figure 1.23 Using Index in the Help window when the function name is known.

31

32

Chapter 1

Introduction

Type search entry and press Enter

Figure 1.24 Using Search when the function name is not known.

version of Help does not include equations and all the information that is available in the Help window. When the name of a function is not known, one uses the Search portion of the Help window. As shown in Figure 1.24, one types in one or more descriptive words, clicks on the Go button, and clicks on the line that appears to contain the best match to one’s search criteria. Not infrequently, one has to click on additional lines until the specific information that is being sought is found, as shown in Figure 1.24.

1.4 THE SYMBOLIC TOOLBOX The Symbolic Math toolbox provides the capability of manipulating symbols to perform algebraic, matrix, and calculus operations symbolically. When one couples the results obtained from symbolic operations with the creation of functions, one has a means of numerically evaluating symbolically obtained expressions. This method is discussed in Section 5.6. In this section, we will introduce several of the basic operations that one can do with the Symbolic Math toolbox and then illustrate where this toolbox can be useful in engineering applications. We will illustrate by example the Symbolic toolbox syntax, variable precision arithmetic, means of obtaining a Taylor series expansion, performing differentiation and integration, taking limits, substituting one expression for another, and obtaining

Section 1.4

The Symbolic Toolbox

33

the inverse Laplace transform. We will then summarize the use of many of these results with two examples. Additional uses of the Symbolic toolbox are given in Examples 2.19 and 2.24, and Examples 5.25–5.28. Syntax The shorthand way to create the symbolic variables a, b, and c is with syms a b c where a, b, and c are now symbolic variables. The spaces between the variable names are the delimiters. If the variables are restricted to being real variables, then we modify this statement as syms a b c real These symbols can be intermixed with nonsymbolic variable names, numbers, and MATLAB functions, with the result being a symbolic expression. Consider the relation f = 11.92e - a + b/d 2

Assuming that d = 4.2, the script to represent this expression symbolically is syms a b d = 4.2; f = 11.92*exp(-a^2)+b/d which upon execution displays f= (5*b)/21 + 298/(25*exp(a^2))

where f is a symbolic object. Notice that 21/5 = 4.2 and 298/25 = 11.92. Numbers in a symbolic expression are always converted to the ratio of two integers. If the decimal representation of numbers is desired, then one uses vpa(f, n) where f is the symbolic expression and n is the number of digits. Thus, to revert to the decimal notation with five decimal digits, the script becomes syms a b d = 4.2; f = vpa(11.92*exp(-a^2)+b/d, 5) The execution of this script gives the symbolic expression f= 0.2381*b+11.92/exp(1.0*a^2)

34

Chapter 1

Introduction

Variable Precision Arithmetic The symbolic toolbox can also be used to calculate quantities with more than 15 digits of accuracy by using vpa in the following manner. vpa('Expression', n) where Expression is a valid MATLAB symbolic relation and n is the desired number of digits of precision. To illustrate the use of this function, consider the evaluation of the following expression y = 32! - e100 The script to evaluate this relation with 50 digits of precision is y = vpa('factorial(32)-exp(100)', 50) The execution of this script gives y= -26881171155030517550432725348582123713611118.773742

If variable precision arithmetic had not been used, the result would be y = -2.688117115503052 : 1043. Differentiation and Integration Differentiation is performed with the function5 diff(f, x, n) where f = f(x) is a symbolic expression, x is the variable with which differentiation is performed, and n is the number of differentiations to be performed; for example, when n = 2 the second derivative is obtained. We illustrate this function by taking the derivative of bcos(bt), first with respect to t and then with respect to b. The script is syms b t dt = diff(b*cos(b*t), t, 1) db = diff(b*cos(b*t), b, 1) Upon execution of this script, we obtain dt = -b^2*sin(b*t) db = cos(b*t)-b*t*sin(b*t) 5

It is noted that diff is also a MATLAB function that is used in nonsymbolic computations as discussed in Example 5.5.

Section 1.4

The Symbolic Toolbox

35

Integration is performed with the function int(f, x, c, d) where f = f(x) is a symbolic expression, x is the variable of integration, c is the lower limit of integration, and d the upper limit. When c and d are omitted, the application of int results in the indefinite integral of f(x). Let us illustrate the use of int by integrating the results of the differentiation performed in the previous script. Thus, syms b t f = b*cos(b*t); dt = diff(f, t, 1); db = diff(f, b, 1); it = int(dt, t) ib = int(db, b) The execution of the script results in it = b*cos(b*t) ib = b*cos(b*t)

Limits One can take the limit of a symbolic expression as the independent variable approaches a specified value. The function that does this computation is limit(f, x, z) where f = f(x) is the symbolic function whose limit is to be determined and x is the symbolic variable that is to assume the limiting value z. To illustrate the use of this function, consider the expression Lim a

a: q

2a + b b 3a - 4

The script is syms a b Lim = limit((2*a+b)/(3*a-4), a, inf) where inf stands for infinity (recall Table 1.6). The execution of this script gives Lim = 2/3

For another example, consider the limit Lim a1 +

x: q

y x b x

36

Chapter 1

Introduction

The script to determine this limit is syms y x Lim = limit((1+y/x)^x, x, inf) Upon execution, we obtain Lim = exp(y)

In other words, the limit is ey. Substitution If one wants to substitute one expression b for another expression a, then the following function is used subs(f, a, b) where f = f(a). The substitution function is frequently used to convert solutions to a more readable form. We shall illustrate its use in the examples that follow. Taylor Series Expansion An n-term Taylor series expansion of a function f(x) about the point a is obtained with taylor(f, n, a, x) where the quantities in this function correspond to those in the expression n-1

k a (x - a)

k=0

f (k)(a) k!

To illustrate this function, consider a four-term expansion of cosu about uo. The script is syms x tho Tay = taylor(cos(x), 4, tho, x) Upon execution, we obtain Tay = cos(tho) - (cos(tho)*(tho - x)^2)/2 - (sin(tho)*(tho - x)^3)/6 + sin(tho)*(tho - x)

Inverse Laplace Transform If the Laplace transform of a function f(t) is F(s), where s is the Laplace transform parameter, then the inverse Laplace transform is obtained from ilaplace(F, s, t) To illustrate this function, consider the expression F(s) =

1 s + 2zs + 1 2

Section 1.4

The Symbolic Toolbox

37

where 0 6 z 6 1.The inverse Laplace transform is obtained from the following script. syms s t z f = ilaplace(1/(s^2+2*z*s+1), s, t) The execution of this script gives f= sinh(t*(z^2 - 1)^(1/2))/(exp(t*z)*(z^2 - 1)^(1/2))

To simplify this expression, we make use of the following change of variables by noting that (z¿2 - 1)¿(1/2) : 2z2 - 1 = j21 - z2 = jr Then, a simplified expression can be obtained by modifying the original script as follows: syms s t z r f = ilaplace(1/(s^2+2*z*s+1), s, t) [Nu De] = numden(f); fNu = subs(Nu,(z^2-1)^(1/2), i*r); fDe = subs(De,(z^2-1)^(1/2), i*r); pretty(simple(fNu/fDe)) Upon execution, we obtain exp(-t z) sin(r t) ——————— r

where we used numden to isolate the numerator and denominator of the resulting inverse Laplace transform in order to perform the substitutions and we used pretty to place the output in a form that more closely represents standard algebraic notation. We shall now illustrate the usage of these symbolic operations with two different examples. In each of these examples, we shall see that an effective way to use the symbolic operations is to use them interactively. This interaction with the toolbox’s functions is equivalent to performing a series of manual algebraic and calculus operations with the objective of putting the final result into a compact irreducible form.

Example 1.3

Determination of curvature

The curvature k of a plane curve with Cartesian parametric equations x = x(t) and y = y(t) is given by k =

x¿y– - y¿x–

A x¿ 2 + y¿ 2 B 3/2

38

Chapter 1

Introduction

where the prime denotes the derivative with respect to t. Let us determine an expression for the curvature for a deltoid whose parametric equations are given by6 x = 2b cost + b cos2t y = 2b sint - b sin2t The script to obtain the curvature is syms t a b x = 2*b*cos(t)+b*cos(2*t); y = 2*b*sin(t)-b*sin(2*t); xp = diff(x, t, 1); xpp = diff(x, t, 2); yp = diff(y, t, 1); ypp = diff(y, t, 2); n = xp*ypp-yp*xpp; d = xp^2+yp^2; n = factor(simple(n)) d = factor(simple(d)) The execution of this script gives n= 4*b^2*(cos(3*t) - 1) d= (-8)*b^2*(cos(3*t) - 1)

The functions simple and factor are used to reduce n and d to their simplest forms. In addition, the numerator and denominator of k are treated separately until all simplifications are completed; then they are combined to form the final expression. This result can be simplified further when the following trigonometric identity is used 1 - cosa = 2 sin2(a/2) Then, cos(3*t) - 1 : cos3t - 1 = -2 sin2(3t /2) = -Z To make this change, we employ subs as follows: syms x t y a b c x = 2*b*cos(t) +b*cos(2*t); y = 2*b*sin(t)-b*sin(2*t); xp = diff(x, t, 1); xpp = diff(x, t, 2); yp = diff(y, t, 1); ypp = diff(y, t, 2); n = xp*ypp-yp*xpp; d = xp^2+yp^2; n = factor(simple(n));

6

E. W. Weisstein, CRC Concise Encyclopedia of Mathematics, Chapman & Hall, Boca Raton, FL, 2003, pp. 697–698.

Section 1.4

The Symbolic Toolbox

39

d = factor(simple(d)); n = collect(subs(n, 'cos(3*t) - 1', '-Z')) d = collect(subs(d, 'cos(3*t) - 1', '-Z')) The execution of this script gives n= (-4)*Z*b^2 d= 8*Z*b^2

From this point on, it is easier to complete the algebra manually. Thus, k =

Example 1.4

n -4Zb2 -1 -1 -1 = = = = 3/2 2 3/2 2 8b sin(3t/2) d 4b12Z 4b24 sin (3t/2) A 8Zb B

Maximum response amplitude of a single-degree-of-freedom system

The nondimensional response y(t) of a single-degree-of-freedom system whose mass is subjected to a suddenly applied and maintained force of unit magnitude at t = 0 is given by7 y(t) =

t e - jt ejh sin C r(t - h) D dh r L0

where r = 21 - z2 and 0 6 j 6 1. We shall first obtain a symbolic solution to this integral and then from that result determine the earliest time greater than zero when y(t) is a maximum. The script to evaluate this integral is syms t z n r arg = exp(z*n)*sin(r*(t-n)); yt = exp(-z*t)*int(arg, n, 0, t)/r Upon execution, we have yt = -(z*sin(r*t) + r*(cos(r*t) - exp(t*z)))/(r*exp(t*z)*(r^2 + z^2))

This result can be simplified further by noting that z¿2 + r¿2 : z2 + r2 = z2 + 1 - z2 = 1 and by using the following identity a sinx ; b cosx = 2a2 + b2 sin(x ; w) where w = tan - 1b/a Thus, r*cos(r*t) + z*sin(r*t) : z sinrt + 21 - z2 cosrt : 2z2 + 1 - z2 sin(rt + w) = sin(rt + w) 7

B. Balachandran and E. B. Magrab, Vibrations, 2nd ed., Cengage Learning, Toronto, ON, 2009, p. 301.

40

Chapter 1

Introduction

where w = tan - 1

21 - z2 z

Thus, the previous script is modified to reflect these relations by using subs as shown below. syms t z n r p arg = exp(z*n)*sin(r*(t-n)); yt = exp(-z*t)*int(arg, n, 0, t)/r; yt = subs(yt, z^2+r^2, 1); yt = simple(subs(yt, (z*sin(r*t) + r*(cos(r*t) - exp(t*z))), (sin(r*t+p)r*exp(z*t)))) The execution of this script results in yt = (r - sin(p + r*t)/exp(t*z))/r

Expressing this result in its traditional format, we have y(t) = 1 -

e - zt 21 - z

2

sin A t21 - z2 + w B

We now determine the time at which y(t) is the maximum by determining the earliest time greater than zero at which dy/dt = 0. This determination is accomplished by using diff as follows: syms t z n r p arg = exp(z*n)*sin(r*(t-n)); yt = exp(-z*t)*int(arg, n, 0, t)/r; yt = subs(yt, z^2+r^2, 1); yt = simple(subs(yt, (z*sin(r*t) + r*(cos(r*t) - exp(t*z))), (sin(r*t+p)r*exp(z*t)))) dydt = simple(diff(yt, t, 1)) The execution of this script gives dydt = -(r*cos(p + r*t) - z*sin(p + r*t))/(r*exp(t*z))

We can again simplify this expression by using the above identity. From the identity, we see that -z*sin(r*t + p) + r*cos(r*t + p) : - A z sin(rt + w) - 21 - z2 cos(rt + w) B

: - 2z2 + 1 - z2 sin(rt + w - w) = -sin(rt) Thus, the script is further modified as follows: syms t z n r p arg = exp(z*n)*sin(r*(t-n)); yt = exp(-z*t)*int(arg, n, 0, t)/r; yt = subs(yt, z^2+r^2, 1); yt = simple(subs(yt, (z*sin(r*t) + r*(cos(r*t) - exp(t*z))), (sin(r*t+p)-r*exp(z*t))))

Section 1.5

Summary of Functions Introduced in Chapter 1

41

dydt = simple(diff(yt, t, 1)) dydt = simple(subs(dydt, (r*cos(p + r*t) - z*sin(p + r*t)), -sin(r*t))) The execution of this script gives dydt = sin(r*t)/(r*exp(t*z))

Thus, dy/dt = 0 when sin(rt) = 0 and the earliest time greater than zero that sin(rt) = 0 is when rt = p, or t = p/r = p> 21 - z2.

1.5 SUMMARY OF FUNCTIONS INTRODUCED IN CHAPTER 1 Some elementary mathematical functions are given in Table 1.4, trigonometric and hyperbolic functions are given in Table 1.5, some special constants are given in Table 1.6, and the language’s special characters are given in Tables 1.7 and 1.11. In Tables 1.8 and 1.9, decimal-to-integer conversion and manipulation of complex numbers, respectively, are summarized. In Table 1.10 several specialized mathematical functions and descriptive statistical functions have been listed. A summary of the Symbolic toolbox commands is given in Table 1.12 and the additional functions introduced in the chapter are presented in Table 1.13. TABLE 1.12 Symbolic Math Toolbox Functions Introduced in Chapter 1

MATLAB function

Description

collect diff factor ilaplace int limit simple simplify subs syms taylor vpa

Collects a variable or an expression within a symbolic function Differentiates a symbolic function Factors a symbolic function Determines the inverse Laplace transform of a symbolic function Determines the definite or indefinite integral of a symbolic function Takes the limit of a symbolic expression Simplifies a symbolic expression using factor, collect, and simplify Attempts to simplify an expression using known identities and algebraic rules Substitutes one symbolic expression for another symbolic expression Shortcut means of constructing (defining) symbolic objects Obtains symbolic expression for a Taylor series expansion of a function Uses variable precision arithmetic to compute a value to a specified number of digits

TABLE 1.13 Additional MATLAB Functions Introduced in Chapter 1

MATLAB function

Description

clc clear close all format

Clears the command window Removes variables from the workspace (computer memory) Closes (deletes) all graphic windows Formats the display of numerical output to the command window

42

Chapter 1

Introduction

EXERCISES 1.1 Verify numerically the following relations. 153 = 13 + 53 + 33 1634 = 14 + 64 + 34 + 44 548834 = 56 + 46 + 86 + 86 + 36 + 46 712 = 1! + 7! 2152 = 1! + 4! + 5! + 6! + 7! + 8! 1.2 Show that the following relation gives the first 14 digits of p. p L a 100 -

21253 + 2143 + 303 + 372 5

82

b

1/4

1.3 Show numerically that the following expressions are almost equal to an integer. I1 =

53453 ln 53453

I2 =

613 35 e 37 991

1.4 Evaluate the following expression for R and display the value of x. R =

1 8 * 22/3 - 16x + 21/3x2 2 A 8 * 22/3 - 10x + 21/3x2

where 3

x = 349 - 27 15 + 316 293 - 49 15 1.5 Demonstrate numerically the validity of the following expressions. cot(p/5) = sin(p/15) =

1 225 + 10 15 5 1 37 - 15 - 230 - 6 15 4

p = 16 tan - 1

1 1 - 4 tan - 1 5 239

1.6 Demonstrate numerically the validity of the following expression sin(p/17) =

12 3g2 - 22(a + g) 8

where g = 317 - 217 b = 317 + 217 a = 334 + 6 217 + 22 A 217 - 1 B g - 8b 22

Exercises

43

1.7 For a = 1 and b = 2, verify numerically the following identities: sinh a + cosh a = ea tanh(a + b) - tanh(a - b) =

sinh 2b cosh(a + b) cosh(a - b)

1.8 Show that for the expression for V given below, V = 3.2209 when L = 1.5, h = 1, and r = 1.6. V = L cr2 cos - 1 a

r - h b - (r - h) 22rh - h2 d r

1.9 For the following expression D = a - g + sin - 1 cn sin ag - sin - 1 e

sin a fbd n

show that D = 0.4203 when g = 60°, a = 35°, and n = 4/3. 1.10 The binomial coefficient is given by nCk

=

n! k!(n - k)!

Determine the value of 12C7. 1.11 The moment of inertia of a sector of a circle is8 I = a

p 8 4 br 8 9p

where r is the radius of the circle. Determine I when r = 2.5 cm. 1.12 The correction for curvature of a helical compression spring is9 K =

0.615 4c - 1 + 4c - 4 c

where c = D/d, D is the diameter of the spring coil and d is the diameter of the wire forming the coil. Determine K when c = 5. 1.13 The shape factor for the deflection of a flat trapezoidal leaf spring is10 K =

3 C 0.5 - 2B + B(1.5 - ln B) D (1 - B)3

where B 6 1 is the ratio of the ends of the trapezoid. Determine K when B = 0.6. 1.14 The length L of a belt that traverses two pulley wheels, one of radius R and one of radius r and whose centers are a distance S apart, is given by11 L = 2S cos u + p(R + r) + 2u(R - r)

8

Hicks, Mechanical Engineering, p. 8. Ibid, p. 78. 10 Ibid, p. 95. 11 Ibid, pp. 105–106. 9

44

Chapter 1

Introduction

where u = sin - 1 a

R - r b rad S

Determine L when R = 30 cm, r = 12 cm, and S = 50 cm. 1.15 The torque T on a block brake is given by12 T =

4fFnr sin(u>2) u + sinu

where u is the contact angle in radians, f is the coefficient of friction, r is the radius of the drum, and Fn is the normal force acting on the drum. Determine T when F = 250 N, f = 0.35, r = 0.4 m, and u = 60°. 1.16 Air flow in a rectangular duct with sides of length A and B has an equivalent flow resistance to that of a circular duct of diameter D, which is given by the following equation13 D = 1.265 c

(AB)3 1/5 d A + B

Determine D when A = 1.7 m and B = 1.2 m. 1.17 The maximum angular acceleration of a Geneva wheel containing n slots is14 aG = v2

M A 1 - M2 B sin a

A 1 + M2 - 2M cos a B 2

where cosa = M =

1 + M2 1 + M2 2 b b + 2 - a A 4M 4M a

1 sin(p>n)

Determine aG>v2 when n = 6. 1.18 The pressure drop of air at standard condition flowing through a steel pipe is15 ¢p =

V 1.84 0.03L a b d1.24 1000

where L is the length of the pipe in m, V is the velocity of air in m/min, and d is the diameter of the pipe in mm. Determine ¢p when L = 3000 m, d = 45 mm, and V = 1600 m/min.

12

Ibid, p. 109. Ibid, p. 165. 14 Ibid, p. 125. 15 Ibid, p. 223. 13

Exercises

45

1.19 The following expressions16 describe the principal contact stresses in the x-, y-, and zdirections, respectively, when two spheres are pressed together with a force F. sx = sy = - pmax c a 1 sz =

z a z2 - 1 tan - 1 a b b(1 - y1) - 0.5a 1 + 2 b d a z a

- p max

1 + z2>a2

where (1 - v21)>E1 + (1 - v22)>E2 a = 3 3F A 8 1>d1 + 1>d2 pmax =

3F 2pa2

and nj, Ej, and dj, j = 1,2, are the Poisson’s ratio, Young’s modulus, and diameter, respectively, of the two spheres. Determine the principal stresses when n1 = n2 = 0.3, E1 = E2 = 206 * 109 N/m2, d1 = 38 mm, d2 = 70 mm, F = 450 N, and z = 0.25 mm. [Answer: sx = 2.078 * 108 N/m2, and sz = -1.242 * 109 N/m2.] 1.20 The following expressions17 describe the principal contact stresses in the x-, y-, and z-directions, respectively, when two cylinders, whose axes are parallel, are pressed together with a force F. sx = -2n2 p max a

A

1 +

z z2 - b b b2

sy = -pmax a a2 - a1 + s2 =

z2 - 1 z z2 b b 1 + 2 - 2 b 2 A b b b -p max

21 + z2>b2

tyz = 0.5(sy - sz) where pmax = b =

2F pbL 2F (1 - v21)>E1 + (1 - v22)>E2 A pL 1>d1 + 1>d2

and nj, Ej, and dj for j = 1, 2, are the Poisson’s ratio, Young’s modulus, and diameter, respectively, of the two cylinders. Determine the principal stresses when v1 = v2 = 0.3, E1 = E2 = 206 : 109 N/m2, d1 = 38 mm, d2 = 70 mm, F = 450 N, L = 50 mm, and 16 J. E. Shigley and C. R. Mischke, Mechanical Engineering Design, 5th ed., McGraw-Hill, New York, 1989. 17 Ibid.

46

Chapter 1

Introduction

z = 0.025 mm. [Answer: sx = -5.036 * 107 N/m2, sy = -3.543 * 107 N/m2, and sz = -1.324 * 108 N/m2.] 1.21 The load number of a hydrodynamic bearing is given by18 NL =

pe3p2 A 1 - e2 B + 16e2

A 1 - e2 B 2

where e is the eccentricity ratio. Determine the value of NL when e = 0.8. [Answer: NL = 72.022.] 1.22 Consider a threaded bolt of height h and whose material has a Young’s modulus E. The stiffness k of the bolt when it is passed through a hole of diameter d0 can be estimated from19 pEdo tan 30°

k = ln £

1d2 - d0)(d1 + d0) (d2 + d0)(d1 - d0)



where d1 is the diameter of the washer under the bolt, and d2 = d1 + h tan30° Determine the value of k when h = 30 mm, d0 = 6 mm, d1 = 16 mm, and E = 206 * 109 N/m2. [Answer: k = 5.283 * 109 N/m2.] 1.23 The radial and tangential stresses in long tubes due to a temperature Ta at its inner surface of radius a and a temperature Tb at its outer surface of radius b are, respectively,20 sr =

aE(Ta - Tb) a2 b2 b b c 2 a 2 - 1blna b - ln a b d 2 2(1 - y)ln(b/a) b - a r a r

st =

aE(Ta - Tb) b2 b a2 b a 2 + 1blna b - lna b d c1 - 2 2 2(1 - y)ln(b>a) a r b - a r

where r is the radial coordinate of the tube, E is the Young’s modulus of the tube material, and a is the coefficient of thermal expansion. The temperature distribution through the wall of the tube in the radial direction is T = Tb +

(Ta - Tb)ln(b>r) ln(b>a)

Determine the stresses and the temperature T when a = 2 : 10-5 mm/mm/°C, E = 206 : 109 N/m2, v = 0.3, Ta = 260 °C, Tb = 150 °C, a = 6 mm, b = 12 mm, r = 10 mm. [Answer: sr = -3.767 * 107 N/m2, st = 1.185 * 108 N/m2, and T = 178.93 °C.]

18

R. L. Norton, Machine Design, An Integrated Approach, Prentice-Hall, Upper Saddle River, NJ, 1996. A. H. Burr and J. B. Cheatham, Mechanical Analysis and Design, 2nd ed., Prentice Hall, Upper Saddle River, NJ, 1995, p. 423. 20 Ibid., p. 496. 19

Exercises

47

1.24 The mass flow rate of a gas escaping from a tank at pressure p0 and under reversible adiabatic conditions is proportional to21 c =

pe 2/k k pe (k + 1)/k b b a a A k - 1 A p0 p0

where pe is the pressure exterior to the tank’s exit and k is the adiabatic reversible gas constant. Determine c when k = 1.4 and pe /p0 = 0.3. [Answer: c = 0.4271.] 1.25 The discharge factor for flow through an open channel of parabolic cross-section is22 K =

- 2/3 1 1.2 c 216x2 + 1 + lna 216x2 + 1 + 4xb d x 4x

where x is the ratio of the maximum water depth to the breadth of the channel at the top of the water. Determine K when x = 0.45. [Answer: K = 1.3394.] 1.26 Show that with the following formula23 one can approximate p to within less than 10–7 with one term (n = 0) and to within less than 10–15 with two terms (n = 0 and 1). In fact, for each term used, the approximation of p improves by almost a factor of 10–8. Thus, after summing the first four terms (n = 0, 1, 2, 3) one would correctly obtain the first 31 digits of p; which can be verified using the Symbolic toolbox. q (4n) !(1103 + 26390n) 1 18 = a p 9801 n = 0 (n!)43964n

1.27 The thermal efficiency of a Diesel cycle on a cold air standard basis is expresses as24 h = 1 -

1 rk - 1

c

rck - 1 d k(rc - 1)

where r is the compression ratio, rc is the cutoff ratio, and k = 1.4 for air. Determine h for air when r = 10 and rc = 3. 1.28 In a converging–diverging nozzle, the expression for the ratio of the area A of any section to the area A* that would be required for sonic flow; that is, when the Mach number M = 1, is given by25 1 2 k - 1 2 (k + 1)>[2(k - 1)] A = ca b a1 + M bd A* M k + 1 2 where, for air, k = 1.4. Determine A>A* for air when M = 2.

21

W. Beitz and K. H. Kuttner, Eds., Handbook of Mechanical Engineering, Springer-Verlag, New York, 1994, p. C15. 22 H. W. King, Handbook of Hydraulics, 4th ed., McGraw-Hill, NY, 1954, pp. 7–24. 23 S. Ramanujan, “Modular equations and approximations to p,” Quarterly Journal of Mathematics, 45, 1914, pp. 350–372. 24 M. J. Moran and H. N. Shapiro, Fundamentals of Engineering Thermodynamics, John Wiley and Sons, NY, 1992, p. 367. 25 Ibid, p. 418.

48

Chapter 1

Introduction

1.29 The magnitude of the transfer function of a Chebyshev filter is given by26 1

ƒ Tn(jv) ƒ =

21 + e2C2n(v)

where v is a frequency ratio, e 6 1. is a positive integer, and Cn(v) = cos(ncos - 1v) |v| …1 Cn(v) = cosh(ncosh - 1v) |v|Ú1 When e = 0.1 and n = 5, determine the value of |Tn(jv)| for v = 0.5, 1.0, and 1.5. 1.30 The natural frequency coefficient of a cylindrical shell clamped at one end and restrained by an attached stiff circular plate at the other end is given by27 Æ nm =

A 1 - n2 B l4m

l2m

+ n + 2

1.78n2l2m

+

1 h 2 4 a b A lm + n4 + 1.78m2l2m B 12 R

where n and m are positive integers and p R lm = a b a b(4m + 1) 4 l Show that when n = 2, m = 1, h/R = 0.05, R/l = 0.1, and n = 0.3, Æ 21 = 7.51587 * 10-3. 1.31 The coefficient of surface resistance (friction factor) in a pipe is given by28 f = ea

e 2500 6 - 16 1/8 5.74 64 8 b a f b + 9.5 cln a + b d Re 3.7D Re Re0.9

where e is the average height of roughness of the pipe, D is the diameter of the pipe, and Re = VD/n is the Reynolds number where V is the velocity of the fluid in the pipe and n is the kinematic velocity of the fluid. Determine f when D = 0.3 m, n = 1.012 * 10-6 m2/s, e = 0.00025 m, and V = 2.9 m/s. 1.32 The acceleration of a reciprocating engine piston is given by29 a = rv2 ccosu +

n2 cos2u + sin4 u

A n2 - sin2 u B 3/2

d

where n = l/r, r is the crank arm length, l is the length of the connecting rod, v is the angular velocity of the crank arm, and u is the rotation angle of the crank arm. Determine the ratio a/(rv2) when n = 3 and u = p/7. Symbolic Toolbox 1.33 Use the Symbolic toolbox to obtain the curvatures given for their corresponding parametric curves. Use the appropriate simplification and factoring commands and trigonometric identities to obtain the results indicated. 26

R. Schaumann and M. E.Van Valkenburg, Design of Analog Filters,Oxford University Press, NY, 2001, p. 278. A. Leissa, “Vibration of Shells,” NASA Report SP-288, 1973, p. 115. 28 P. K. Swamee and A. K. Sharma, Design of Water Supply Pipe Networks, John Wiley & Sons, Hoboken, NJ, 2008, p. 14. 29 V. Ramamurti, Mechanics of Machines, 2nd ed., Alpha Science International Ltd. Harrow, U.K., 2005, p. 33. 27

Exercises

49

a. [This exercise has to be solved manually after the different expressions comprising the numerator and denominator of the curvature have been obtained and simplified. Note that 2 cos 2x = 1 + cos 2x.] x = a sint a(2 + cost) cos 2t

y =

3 + sin 2t

k =

6 12(cost - 2)3(3 cost - 2) sec t a[73 - 80 cost + 9 cos(2t)]3/2

b. x =

3at 1 + t3

y =

3at2 1 + t3

k =

2(1 + t3)4 3(1 + 4t2 - 4t3 - 4t5 + 4t6 + t8)3/2

c. [Note: cosh2x - sinh2x = 1] x = a(t - tanh t) y = asecht k = cscht 1.34 a. Use variable precision arithmetic to 40 digits to show that cos(p cos(p cos(ln(p + 20)))) L -1 + 0.393216 * 10 - 34 b. Use variable precision arithmetic to 35 digits to show that ep1163 is almost an integer. 1.35 Use the Symbolic toolbox to find the first five terms of the Taylor series expansions around zero; that is, a = 0, for the following functions. For some functions, the coefficients of the Taylor series can be expressed as a polynomial g(n), which are given beside the respective functions. f(x) =

x(7x + 1) (1 - x)3

[g(n) = 4n2 - 3n]

1 a1 + x - 21 - 6x + x2 b 4 2x f(x) = [g(n) = n(n + 1)] (1 - x)3 f(x) =

f(x) =

x A x2 + 4x + 1 B (1 - x)3

[g(n) = 3n2 - 3n + 1]

1.36 Use the Symbolic toolbox to find the following limits. xe - 1 e:0 e lim

lim a

t:0

et - 1 -a b t

lim (1 - sin(2x))1/x

x:0

lim

x:1

ln xn 1 - x2

50

Chapter 1

Introduction

1.37 The response in the Laplace transform domain of one of the masses of a two-degree-offreedom system subjected to an initial displacement is30 X1(s) =

0.1s 3 + 0.0282s 2 - 0.0427s + 0.0076 s 4 + 0.282s 3 + 4.573s2 + 0.4792s + 2.889

Use the Symbolic toolbox to obtain its response in the time domain. Hint: To get the result in a simple form, use vpa with 5 digits. 1.38 The Fourier series coefficients for a periodic tone-burst of frequency f, duration NT, and period MT, where T = 1/f, are given by31 1 p L0

2pN/M

an =

1 p L0

2pN/M

bn =

sin(Mt) cos(nt)dt

n = 0,1,2, Á

sin(Mt) sin(nt)dt

n = 1,2,3, Á

where M 7 N and M and N are integers. Use the Symbolic toolbox to evaluate these integrals and simplify them by noting that cos(2pk ; a) = cosa and sina(2pk ; a) = ; sina, where k is an integer. Using these solutions, show that cn = 2a2n + b2n =

2M sin(pnN/M) p M2 - n2

=

N M

n Z M

n = M

Note that each integral must be evaluated twice: once for n Z M and once for n = M. In addition, the following identity will be needed: 1 - cosa = 2sin2(a/2)

30 31

Balachandran and Magrab, Vibrations, p. 480. Ibid, p. 281.

2 Vectors and Matrices Edward B. Magrab

2.1 2.2 2.3 2.4 2.5 2.6

Introduction 51 Definitions of Matrices and Vectors 52 Creation of Vectors 53 Creation of Matrices 64 Dot Operations 83 Mathematical Operations with Matrices 92 2.6.1 Addition and Subtraction 92 2.6.2 Multiplication 92 2.6.3 Determinants 101 2.6.4 Matrix Inverse 104 2.6.5 Solution of a System of Equations 107 2.7 Summary of Functions Introduced in Chapter 2 Exercises 113

112

MATLAB syntax is introduced in the context of vectors and matrices and their manipulation.

2.1 INTRODUCTION MATLAB is a language whose operating instructions and syntax are based on a set of fundamental matrix operations and their extensions. Therefore, in order to fully utilize the advantages and compactness of the MATLAB language, we summarize some basic matrix definitions and symbolism and present many examples of their usage. The material presented in this section is used extensively in the programs developed throughout this and subsequent chapters. 51

52

Chapter 2

Vectors and Matrices

2.2 DEFINITIONS OF MATRICES AND VECTORS An array A of m rows and n columns is called a matrix of order (m * n), which consists of a total of mn elements arranged in the following rectangular array: a11 a A = ≥ 21 o am1

a12 a22

Á

a1n ¥ : (m * n)

∞ amn

The elements of the matrix are denoted aij, where i indicates the row number and j the column number. In MATLAB, the order of the matrix is referred to as its size. Several special cases of this general matrix are as follows: Square Matrix When m = n, we have a square matrix. Diagonal Matrix When m = n and aij = 0, i Z j, we have the diagonal matrix a11 0 A = ≥ o 0

0 a22

Á

0 ¥ : (n * n)

∞ ann

Identity Matrix In a diagonal matrix, when aii = 1, we have the identity matrix I, that is, 1 0 I = ≥ o 0

0 1

Á

0 ¥

∞ 1

Vectors: Column and Row Matrices When aij = ai1, that is, there is only one column, then a = A is called a column matrix or, more commonly, a vector, that is, a1 a11 a21 a ¥ = ≥ 2 ¥ : (m * 1) a = ≥ o o am1 am The quantity m is the length of the vector.

Section 2.2

Definitions of Matrices and Vectors

53

When aij = a1j, that is, we have only one row, a is called a row matrix or a vector—that is, a = [a11

a12

Á

a1n] = [a1

Á

a2

an] : (1 * n)

This is the default definition of a vector in MATLAB. In this case, n is the length of the vector. Thus, a vector can be represented by a row or a column matrix. Transpose of a Matrix and a Vector The transpose of a matrix is denoted by an apostrophe (¿), and is defined as follows. When A is the (m * n) matrix, a11 a21 A = ≥ o am1

a12 a22

Á

a1n ¥ : (m * n)

∞ amn

then its transpose W = A¿ is the following (n * m) matrix: w11 = a11 w = a12 W = A¿ = ≥ 21 o wn1 = a1n

w12 = a21 w22 = a22

Á

w1m = am1 ¥ : (n * m)

∞ wnm = amn

that is, the rows and columns are interchanged. For column and row vectors, we have the following: if a1 a a = ≥ 2 ¥ : (m * 1) o am

then a¿ = [a1

a2

Á

am] : (1 * m)

and if

a = [a1

a2

Á

a1 a2 am] : (1 * m) then a¿ = ≥ ¥ : (m * 1) o am

2.3 CREATION OF VECTORS Vectors in MATLAB are expressed as either f = [a x b Á ] or f = [a, x, b, Á ]

54

Chapter 2

Vectors and Matrices

where a, x, b, Á are either variable names, numbers, expressions, or strings (see Section 3.1). If they are variable names or expressions, then all variable names and the variable names composing the expressions must be defined such that a numerical value has been obtained for each of these variable names prior to the execution of this statement. Variable names, expressions, and numbers can appear in any combination and in any order. In the form f = [a x b Á ] the space (blank) between symbols is required, whereas in the form f = [a, x, b, Á ] 1

the blank is optional. It is noted that if a is an expression that is explicitly written in the location where a is, then the expression for a can be written several ways. For example, if a = h + ds, then some ways in which f can be written are f = [h+d ¿ s x b Á ] or f = [h+d ¿ s, x, b, Á ] or f = [(h+d ¿ s), x, b, Á ] or f = [h+d ¿ s, x, b, Á ] Colon Notation MATLAB gives several additional ways to assign numerical values to the elements of a vector. The techniques for the creation of matrices are given in Section 2.4. The first means, described below, uses the colon notation to specify the range of the values and the increment between adjacent values. The second method specifies the range of the values and the number of values desired. In the former method, the increment is either important or has been specified, whereas in the latter method, the number of values is important. The colon notation to create a vector is x = s:d:f or x = (s:d:f) or x = [s:d:f] where s = start or initial value d = increment or decrement f = end or final value 1

MATLAB occasionally has two or more equivalent ways which represent quantities. We will present, when appropriate, these equivalent representations. There is often no preferred form; however, readability can be used as a deciding factor.

Section 2.3

Creation of Vectors

55

Thus, the following row vector x is created: x = [s, s + d, s + 2d, . . ., s + nd] where s + nd … f. Note that the number of values n created for x is not specified directly. The quantities s, d, and f can be any combination of numerical values, variable names, and expressions. The number of terms (i.e., the length of the vector) that this expression has created is determined from the MATLAB function length(x) When d is omitted, MATLAB assumes that d = 1. Then, x = s:f creates the vector x = [s, s + 1, s + 2, . . ., s + n] where s + n … f. Again, s and f can be any combination of numerical values, variable names, and expressions. We now illustrate these functions with the following examples. We first create a row vector that goes from 0.2 to 1.0 in increments of 0.1. The script is x = 0.2:0.1:1 n = length(x) which when executed gives x= 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000 n= 9

On the other hand, if we want to create a vector that starts at 1 and decreases to 0.2 in increments of 0.1, the script is x = 1:-0.1:0.2 which when executed gives x= 1.0000 0.9000 0.8000 0.7000 0.6000 0.5000 0.4000 0.3000 0.2000

We can create a column vector by taking the transpose of a row vector. Thus, the above script is modified to x = (0.2:0.1:1)' n = length(x) where we have to use the form that employs the parentheses. If we did not use the parentheses (or, equivalently, the brackets) MATLAB would have only taken

56

Chapter 2

Vectors and Matrices

the transpose of the number 1, which is equal to 1. Upon execution of this script, we obtain x= 0.2000 0.3000 0.4000 0.5000 0.6000 0.7000 0.8000 0.9000 1.0000 n= 9

If we now wish to create a row vector that goes from 0.2 to 1.0 in increments of 0.12, the script is x = 0.2:0.12:1 n = length(x) which when executed gives x= 0.2000 n= 7

0.3200

0.4400

0.5600

0.6800

0.8000

0.9200

We notice that in this case, the highest value is 0.92, since 0.92 + 0.12 = 1.04 7 1. Now let us generate a row vector that goes from 1 to 7 in increments of 1. The script is x = 1:7 n = length(x) Upon execution, we obtain x= 1 2 3 4 5 6 7 n= 7

since upon omitting the increment, MATLAB assumed an increment of +1. However, when we create a row vector from 0.5 to 7 in increments of 1, the script becomes x = 0.5:7 n = length(x) which upon execution gives x= 0.5000 n= 7

1.5000

2.5000

3.5000

4.5000

5.5000

6.5000

Section 2.3

Creation of Vectors

57

Generation of n Equally Spaced Values In the second method, one specifies n equally spaced values starting at s and ending at f as follows: x = linspace(s, f, n) where the increment (decrement) is computed by MATLAB from d =

f-s n-1

The values of s and f can be either positive or negative and either s 7 f or s 6 f. When n is not specified, it is assigned a value of 100. Thus, linspace creates the vector x = [s, s + d, s + 2d, Á , f = s + (n - 1)d] Notice that when linspace is used, the end points are always included in the vector of values that it creates; when using the colon notation, this is not necessarily true. Thus, if we wish to create eight equally spaced values from –2 to 6.5, the script is x = linspace(-2, 6.5, 8) which upon execution gives x= -2.0000

-0.7857

0.4286

1.6429

2.8571

4.0714

5.2857

6.5000

where MATLAB computes and uses the value d = (6.5 - (-2))/(8 - 1) = 1.2143. To get an idea of which method one should use to create a vector of values, we shall create the same array using both methods. We first create the previous data using colon notation. For this case, the script is s = -2; f = 6.5; d = (f-s)/(n-1); x = s:d:f

n = 8;

which upon execution gives x= -2.0000

-0.7857

0.4286

1.6429

2.8571

4.0714

5.2857

6.5000

On the other hand, if we want to create a vector that starts at 0.2, ends at 0.92, and increases by 0.12 using linspace, the script is s = 0.2; f = 0.92; d = 0.12; n = (f-s)/d+1; x = linspace(s, f, n) which upon execution gives x= 0.2000

0.3200

0.4400

0.5600

0.6800

0.8000

0.9200

58

Chapter 2

Vectors and Matrices

It should be apparent from these two examples that the colon notation and linspace have different intended uses. If equal spacing on a logarithmic scale is desired, then one uses x = logspace(s, f, n) where the initial value is 10s, the final value is 10f, and d is defined above. Thus, this expression creates the row vector x = [10s 10s+d 10s+2d . . . 10 f] When n is not specified, MATLAB assigns it a value of 50. Thus, if we wish to create five equally spaced values on a logarithmic scale from 1 to 100, the script is x = logspace(0, 2, 5) which upon execution gives x= 1.0000

3.1623

10.0000

31.6228 100.0000

that is, x = [100 100.5 101 101.5 102]. Transpose of a Vector with Complex Values If a vector has elements that are complex numbers, then taking its transpose also converts the complex quantities to their complex conjugate values. To illustrate this, consider the following script z = [1, 7+4j, -15.6, 3.5-0.12j]; w = z' which upon execution gives w= 1.0000 7.0000 - 4.0000i -15.6000 3.5000 + 0.1200i

If the transpose is desired, but not the conjugate, then the script is written as z = [1, 7+4j, -15.6, 3.5-0.12j]; w = conj(z') which upon execution gives w= 1.0000 7.0000 + 4.0000i -15.6000 3.5000 - 0.1200i

Section 2.3

Creation of Vectors

59

Accessing Elements of Vectors We now show how to access individual elements of vectors and perform arithmetic operations on them. Let b = [b1 b2 Á bn] This means that we have created a vector b that has one row and n columns. In order to access individual elements of this vector, we use MATLAB’s subscript notation. This notation has the form b(j), that is, b(j) corresponds to bj, where j = 1, 2, Á , n is the jth location in the vector b. Thus, if we write b(3), then MATLAB will return the numerical value assigned to b3, the third element of the vector. However, MATLAB’s interpreter is smart enough to know that the matrix b is a (1 * n) matrix, and in some sense, it ignores the double subscript requirement. That is, writing b(3), where b is a vector defined above, is the same as writing it as b(1,3). However, if one were to either directly or implicitly require b(3,1), then an error message would appear because this row (the third row) hasn’t been defined (created). Conversely, if we let b = [b1 b2 Á bn]¿ we have created a column vector, that is, a (n * 1) matrix. If we want to locate the third element of this vector, then we again write b(3) and MATLAB returns the numerical value corresponding to b3. This is the same as having written b(3,1). If one were to either directly or implicitly require b(1,3), then an error message would appear because this column (the third column) hasn’t been defined (created). Accessing Elements of Vectors Using Subscript Colon Notation The elements of a vector can also be accessed using subscript colon notation. In this case, the subscript colon notation is a shorthand method of accessing a group of elements. For example, for a vector b with n elements, one can access a group of them using the notation b(k:d:m) where 1 … k 6 m … n, k and m are positive integers and, in this case, d is a positive integer. Thus, if one has ten elements in a vector b, the third through seventh elements are selected by using b(3:7) Subscript colon notation is used throughout the book. Manipulation of Vector Elements Suppose that we want to create a vector x that is to have the seven values [-2, 1, 3, 5, 7, 9, 10]. This can be created with either the expression x= [-2, 1:2:9, 10] or x = [-2, 1, 3, 5, 7, 9, 10]

60

Chapter 2

Vectors and Matrices

which means that the elements of this vector are x1 = -2, x2 = 1, x3 = 3, x4 = 5, x5 = 7, x6 = 9, and x7 = 10 and its length is 7. We access the elements of x with the MATLAB expression x(j), j = 1, 2, Á , 7. For example, the expression x(5) returns the value 7. To access the last element in a vector, one can use the reserved word end as follows: x = [-2, 1:2:9, 10]; xlast = x(end) Upon execution, the following is displayed in the command window: xlast = 10

When we add or subtract a scalar from a vector, the scalar is added or subtracted from each element of the vector. Thus, the execution of x = [-2, 1, 3, 5, 7, 9, 10]; z = x-1 results in z= -3

0 2 4 6 8 9

However, the rules for multiplication, division, and exponentiation have restrictions, as discussed in Sections 2.5 and 2.6.2. On the other hand, we may want to modify only some of the elements of a vector. For example, let z = [-2 1 3 5 7 9 10]. Then, to divide only the second element by 2, we have z = [-2, 1, 3, 5, 7, 9, 10]; z(2) = z(2)/2; z which upon execution gives z= -2.0000

0.5000

3.0000

5.0000

7.0000

9.0000

10.0000

If, further, we multiply the third and fourth elements by 3 and subtract 1 from each of them, the script is z = [-2, 1, 3, 5, 7, 9, 10]; z(2) = z(2)/2; z(3:4) = z(3:4)*3-1; z The execution of this script gives z= -2.0000

0.5000

8.0000

14.0000

7.0000

9.0000

10.0000

Section 2.3

Creation of Vectors

61

Notice that in both examples the rest of the elements remain unaltered. The assignment statement z(3:4) = z(3:4)*3-1 is interpreted by MATLAB as follows. The existing values of the elements z(3) and z(4) are each multiplied by 3, and then 1 is subtracted from their respective results. These new results are then used to replace the original values of z(3)and z(4). This syntax is very effective in writing compact code and is a frequently used programming construction, as we shall illustrate in Chapter 4. One can access the elements of a vector in several ways in order to create new vectors. Consider the eight-element vector: y = [-1, 6, 15, -7, 31, 2, -4, -5]; If one wanted to create a new vector x composed of the third through fifth elements of y, then the execution of the script y = [-1, 6, 15, -7, 31, 2, -4, -5]; x = y(3:5) creates the three-element vector x= 15

-7

31

Suppose, instead, we wanted to create a vector x composed of the first two and the last two elements of y. This can be done either by y = [-1, 6, 15, -7, 31, 2, -4, -5]; x = [y(1), y(2), y(7), y(8)] or by first defining the locations in the vector array as a variable called index and employing it as follows: y = [-1, 6, 15, -7, 31, 2, -4, -5]; index = [1, 2, 7, 8]; x = y(index) or, more compactly, as y = [-1, 6, 15, -7, 31, 2, -4, -5]; x = y([1, 2, 7, 8]) The last two representations have many useful applications. Let us assume that corresponding to the vector y is a vector z, which is also a vector with eight elements. The vectors are assumed to have the values y = [-1, 6, 15, -7, 31, 2, -4, -5]; z = [10, 20, 30, 40, 50, 60, 70, 80]; One can think of this set of vectors as correlated or linked such that y(j) corresponds to z(j). Suppose that we want to sort the vector y in ascending order (most negative to most positive) using the sort function and then rearrange the order of

62

Chapter 2

Vectors and Matrices

the elements of z to correspond to the new order of the elements of y. From the Help file, we find that one form of the sort function is2 [ynew, indx] = sort(y, mode) where mode = 'ascend'; (apostrophes required) to sort in ascending order (most negative to most positive: default value) and mode = 'descend' to sort in descending order (most positive to most negative), ynew is the vector with the rearranged (sorted) elements of y and indx is a vector containing the original locations of the elements in y. Thus, the script y = [-1, 6, 15, -7, 31, 2, -4, -5]; z = [10, 20, 30, 40, 50, 60, 70, 80]; [ynew, indx] = sort(y) znew = z(indx) when executed gives ynew = -7 -5 -4 -1 2 6 15 31 indx = 4 8 7 1 6 2 3 5 znew = 40 80 70 10 60 20 30 50

Therefore, we see that indx(1) = 4 means that ynew(1) used to be y(4). Thus, to obtain the corresponding z we defined znew as the vector z whose indices (order) are now given by indx. We can extend this capability further by introducing find(Relation) which determines the locations (not the values) of all the elements in a vector (or matrix) that satisfy a user-specified condition as represented by Relation. We illustrate its usage by creating a new vector s that contains only those elements of y that are either negative or zero. The MATLAB relational operator “ 6 = ” stands for “less than or equal to” (recall Table 1.7). Then, y = [-1, 6, 15, -7, 31, 2, -4, -5]; indxx = find(y' num2str(a)': 'num2str(indx)]) Upon execution, the following results are displayed to the command window Element locations for g(n)>4: 3 4 6

Section 4.2

Control of Program Flow

Example 4.9

161

Equivalent implementation of cumsum

For a vector c of arbitrary length, we shall create a script that provides the same results as Csum = cumsum(c) We shall verify the script with the vector c = [4, 4, 7, 10, -6, 42, 1, 0]. The script is c = [4, 4, 7, 10, -6, 42, 1, 0]; Csum = zeros(length(c), 1); Csum(1) = c(1); for k = 2:length(c) Csum(k) = Csum(k-1)+c(k); end disp(['Cumsum of c = ' num2str (Csum')]) Upon execution, the following results are displayed to the command window Cumsum of c = 4 8 15 25 19 61 62 62

Example 4.10

Specification of the elements of an array

We shall create an (n * n) matrix whose elements are either +1 or -1 such that the sign of each element is different from its adjacent elements, both from those above and below it and those on either side of it. The selection of n is arbitrary. Thus, we want to create the matrix 1 -1 M = D 1 o

- 1 1 - 1

1 - 1 1

Á Á T : (n * n) Á

The script is n = input('Enter the order of the square matrix: '); k = 1:n; M = zeros(n, n); OddRow = (-1).^(k-1); EvenRow = (-1).^k; for m = 1:2:n M(m,:) = OddRow; if m+1 8) nfnum = input('Enter a number from 1 to 8: '); end The quantity nfnum is initially set equal to a value (in this case zero) that causes the while test (nfnum61)||(nfnum78) to enter the while structure. After reaching the last expression prior to the end statement, the program returns to the while test expression to determine if it is satisfied. If it is not satisfied, it executes the next line in the structure; otherwise, it proceeds to the next statement after the end statement. Notice that we have employed the preferred practice of placing the structure’s initializing value—nfnum in this case—just prior to its entry into the structure.

Example 4.13

Convergence of a series

Let us determine and display the number of terms that it takes for the series N 1 SN = a 2 n=1 n

to converge to within 0.01% of its exact value, which is Sq = p2/6. The script is series = 1; k = 2; exact = pi^2/6; while abs((series-exact)/exact) >= 1e-4 series = series+1/k^2; k = k+1; end disp(['Number of terms = ' int2str(k-1)]) which, upon execution, displays to the command window Number of terms = 6079

The quantity series is initially set equal to a value (1 in this case) that causes the while test abs((series-exact)/exact) to enter the while structure. After reaching the last expression prior to the end statement, the program returns to the while test expression to determine if it is satisfied. If it is not satisfied, it executes the next line in the structure; otherwise, it proceeds to the next statement after the end statement, which in this case displays the result to the command window. We have used the absolute value of the test condition ((series-exact)/exact) to avoid any instance when the difference series-exact is negative, which would be less than 10-4 (since it is a negative number), but whose magnitude may not be 610-4. This avoids having to know a priori whether the quantity series approaches the limit from above or below. One must also be careful when establishing the test criterion for the termination of the while loop, for, if improperly or poorly stated, one may stay in the loop indefinitely—that is, until control and c are pressed simultaneously by the user.

164

Chapter 4

Example 4.14

Program Flow Control

Approximation to p

The following expression converges to 1/p when x0 = 1> 22 and yo = 1/2: yn + 1 = yn(1 + xn + 1)2 - 2n + 1xn + 1

n = 0, 1, 2, Á

where xn + 1 =

1 - 31 - x2n 1 + 31 - x2n

We shall show that the difference |1/p - y4| is less than 10-15. The script is xo = 1/sqrt(2); yo = 1/2; n = 0; while abs(1/pi - yo) > 1e-15 xo=(1-sqrt(1-xo^2))/(1+sqrt(1-xo^2)); yo = yo*(1+xo)^2-2^(n+1)*xo; n = n+1; end fprintf(1, 'For n = %2.f, |1/pi-y_(n+1)| = %5.4e\n', n, abs(1/pi - yo)) Execution of this script results in For n = 4, |1/pi-y_(n+1)| = 4.9960e-016

Example 4.15

Multiple root finding using interval halving3

MATLAB has a function fzero that is used to determine the value of x that makes f(x) very closely equal to zero, provided that fzero is given a good estimate of the location of the root. See Section 5.5.1. However, it only finds one zero at a time; to find additional zeros, one must call fzero again with another estimate of where the next zero can be found. Let us assume that we would like to find automatically a series of positive values of x (x1, x2, Á ) that make f(x) = 0. This assumes, of course, that f(x) has multiple zeros and, therefore, the sign of f(x) alternates as x increases. One technique to find the zeros of a function is called interval halving.4 Referring to Figure 4.1, this technique works as follows. The independent variable x is given a starting value x = xstart and the sign of f(xstart) is determined. The variable x is then incremented by an amount ¢ and the sign of f(xstart + ¢) is determined. The signs of these two values are compared. If the signs are the same (as they are in Figure 4.1), then x is again incremented by ¢ and the sign of f(x + 2¢) is evaluated and compared to that of f(xstart). If the signs are different, then the current value of x is decremented by half the interval size—that is, by ¢/2. From Figure 4.1, we see that the sign change

3

See, for example, S. C. Chapra and R. P. Canale, Numerical Methods for Engineers, 2nd ed., McGraw-Hill, New York, 1988, p. 128ff. 4 Although this method will find the roots, it is not the best way to do it for the techniques that are used in fzero require two to three times fewer iterations to find a root to within a specified precision.

Section 4.2

Control of Program Flow

165

f(x) f(x) > 0 xstart + 5Δ /2

Δ

xstart

xstart +Δ

Δ /4

Δ /2

xstart + 11Δ /4 xstart + 2Δ

x

xstart + 3Δ

f(x) < 0 f(x1) ≈ 0

Figure 4.1

f(x2) ≈ 0

Interval halving scheme.

occurs at x = xstart + 3¢ so that after the sign change has been detected, the next value for x is x = xstart + 5¢/2. The sign of f(xstart + 5¢/2) is then compared to f(xstart). If it is the same, then half the current interval is added to the current value of x; otherwise, it is subtracted from the current value of x. In this example, the sign of f(xstart) is the same as f(xstart + 5¢/2) so that the next point at which f(x) is evaluated is xstart + 11¢/4. This process is repeated until the incremental change in x divided by the current value of x is less than some tolerance; that is, ¢ current/xcurrent 6 to, the tolerance. When this tolerance criterion has been satisfied, the root x1 = xcurrent. The process is continued until the desired number of xj has been determined. After each xj has been obtained, we reset ¢ to its original value, set xstart to a value slightly larger than xj, say xstart = 1.05xj, and repeat the process. The objective is to write a script using the interval halving technique to determine the first five values of x that set the function f(x) = cos(ax) ⬵ 0 where a is a constant. These xj are said to satisfy this equation when the incremental change in x divided by x is less than to = 10-6. Also, xj Ú xstart Ú 0 for j = 1, 2, Á , n. Thus, in general, the inputs to the root-finding portion of the program are n, xstart, to, and ¢ , and for this particular f(x) the quantity a. In the present case, n = 5 and to = 10-6 and we shall let xstart = 0.2, ¢ = 0.3, and a = p. The script is n = 5; a = pi; increment = 0.3; tolerance = 1e-6; xstart = 0.2; x = xstart; dx = increment; route = zeros(n, 1);

166

Chapter 4

Program Flow Control

for m = 1:n s1 = sign(cos(a*x)); while dx/x > tolerance if s1 ~= sign(cos(a*(x+dx))) dx = dx/2; else x = x+dx; end end route(m) = x; dx = increment; x = 1.05*x; end disp(route') The function sign brings back a +1, -1, or 0, depending on whether the sign of its argument is positive, negative, or zero, respectively. Upon execution, the following results are displayed in the command window. 0.5000

1.5000

2.5000

3.5000

4.5000

In Section 5.3, we shall convert this script into a function so that we can determine the roots for an arbitrary f(x).

4.2.5 Early Termination of Either a for or a while Loop The break function is used to terminate either a for or while loop. If the break function is within nested for or while loops, then it returns to the next higher level for or while loop. Consider the following portion of a script: for j = 1:14 o b=1 while b < 25 o if n < 0 break end o end o end

When n 6 0 the while loop is exited and the script continues from the next statement after this end statement

4.3 SUMMARY OF FUNCTIONS INTRODUCED IN CHAPTER 4 Several logical and relational operators are given in Table 4.1. A summary of the additional functions introduced in the chapter is presented in Table 4.2.

Exercises

167

TABLE 4.2 MATLAB Functions Introduced in Chapter 4

MATLAB function Description break case else elseif end error for if otherwise sign switch while

Terminates the execution of a for or while loop An alternative identifier in the switch structure Executes statements based on a relational or logical expression Executes statements based on a relational or logical expression Terminates a for, while, if, or switch structure Displays error message and abort program execution Repeats statements a specific number of times Executes statements based on a relational or logical expression Default part of a switch statement Signum function Switches among several cases based on a value Repeats statements an indefinite number of times until a condition is satisfied

EXERCISES Section 4.2.1 4.1 Write a script that computes the day of week for the years 2010, 2011, and 2012, when its input is of the form month/day/year: xx/xx/xxxx. The following information is given: January 1, 2010, is a Thursday, January 1, 2011, is a Saturday, and January 1, 2012, is a Sunday and is a leap year. Have the script input and output the results in the following manner: Enter month, day and year in the form xx/xx/xxxx for 2010, 2011, or 2012: 08/31/2011 The date 08/31/2011 is the 243 day of the year and falls on a Wednesday.

where 08/31/2011 was entered by the user. Section 4.2.3 4.2 The estimate of the variance of n samples xi is determined from s2n =

n 1 c a x2j - nxq2n d n - 1 j=1

n 7 1

where xqn =

1 n xj n ja =1

is an estimate of the mean. The variance is determined from var. Write a script that determines s2n as a function of n, n 7 1, for the following data: x = [45 38 47 41 35 43]. [Answer: [24.50 22.33 16.25 24.20 19.90].]

168

Chapter 4

Program Flow Control

4.3 Given a vector a of N elements an, n = 1, 2, Á , N. The simple moving average of m sequential elements of this vector is defined as mj = mj - 1 +

am + j - 1 - aj - 1

j = 2, 3, Á , (N - m + 1)

m

where m1 =

1 m ak m ka =1

Write a script that computes these moving averages when a is given by a = 5*(1 + rand(N, 1)), where rand generates uniformly distributed random numbers. Assume that N = 100 and m = 6. Plot the results using plot(j, mj) for j = 1, 2, Á , N - m + 1. Section 4.2.4 4.4 The Newton method is used to determine the value of x that makes |f(x)| 6 to L 0. The value of x is determined from the following formula, where x0 is the initial guess: xn + 1 = xn -

f(xn) f ¿(xn)

n = 0, 1, 2, Á

In this equation, the prime denotes the derivative with respect to x. The value of n is a function of the tolerance to, which is a very small value, and the choice of xo. Write a function that obtains the value of x when f(x) = cos(x) + sin(x) f ¿(x) = - sin(x) + cos(x) and when x0 = 1.5 and to 6 10-8. Have the output of the program display to the command window the various quantities as shown below. At x = 2.3561945, f(x) = 1.1102e-016 after 4 iterations

4.5 The number of years n that it takes to deplete an annuity that starts with an amount P (the principal) by withdrawing an amount A on the first day of each year when the account earns interest at the rate of Ir% annually can be determined from the following relations: After the first day of the first year, the annuity has an amount R1 = P - A. After the first day of the second year, the annuity has an amount R2 = R1(1 +Ir>100) - A. After the first day of the third year, the annuity has an amount R3 = R2(1 +Ir>100) - A. o After the first day of the nth year the annuity has an amount Rn = Rn - 1(1 +Ir>100) - A 6 A. Determine the number of years that one can withdraw the amount A when P = $250,000, Ir = 4.5%, and A = $25,000. Also determine the amount left in the annuity at the beginning of the nth year after A dollars has been withdrawn. Display the results as follows: Principal ($) 250000

Annuity ($/yr) 25000

Interest (%) 4.5

No. years 12

Remain ($) 19112

Exercises

169

4.6 The arithmetic–geometric mean process is a means that can be used to evaluate elliptic integrals. For a given a, the arithmetic–geometric mean process to obtain the complete elliptic integral is as follows a0 = 1 an =

b0 = cos a

c0 = sin a

1 (a + bn - 1) bn = 3an - 1bn - 1 2 n-1

cn =

1 (a - bn - 1) n = 1, 2, Á , N 2 n-1

When |cN| 6 to, where to 66 1 is the tolerance to which the process is said to have converged to, K(a) =

p 2aN

where K(a) is the complete elliptic integral of the first kind. For a = p/4 and to = 10-5, show that this process produces the same value as that obtained from ellipke(sin2a). Use format long e to verify your result. Sections 4.2.1 and 4.2.3 4.7 Create a script that performs the equivalent function of the logical operator introduced in Section 4.1 for any vector of values h such that the output vector v of the logical operator indicates which of its elements satisfy h 7 a and h 6 b. Test your script with h = [1 3 6 -7 - 45 12 17 9], a = 3, and b = 13. [Answer: v = [0 0 1 0 0 1 0 1].] 4.8 The elements of a (N * N) Hankel matrix are given by hnm = 0

n+m-1 7 N

= n + m -1

otherwise

Generate a script that creates a Hankel matrix for N 6 10. Sections 4.2.1 and 4.2.4 4.9 Generate a script that asks the user to enter a positive integer from 1 to 19 and continues to make this request if any number other than one of these 19 integers is entered. The rem function should prove useful. 4.10 Given the following relation xn + 1 = xn/2 = 3xn +1

if xn is an even positive integer if xn is an odd positive integer

where n = 1, 2, 3, Á . Let x1 be an arbitrary positive integer. This iteration process appears to always converge at some value of n + 1 = N such that xN = 1. The value of N cannot be predicted as a function of x1 as you will discover. Print all the values of xj for the selected value of x1. The function rem should prove useful. For a test case, verify your code by obtaining the following sequence: 3, 10, 5, 16, 8, 4, 2, 1. Other numbers to experiment with are x1 = 24, 17, and 27.

170

Chapter 4

Program Flow Control

Sections 4.2.3 and 4.2.4 4.11 Consider the following relation xn + 1 = x2n + 0.25

n = 0, 1, 2, Á , N

For x0 = 0, write two scripts that plot the values of xn for n = 0, 5, 10, Á , 200. In the first script, use a for loop and in the second script a while loop. To what value does xN appear to converge? For the third argument of the plot function, use plot( Á , Á , œksœ), which will plot the values of xn as squares. The x-axis values are the values of n and the y-axis values are the xn. Note that all xn, n = 0, 1, 2, Á , 200, must be computed, but only every fifth xn is plotted.This exercise differs from Exercise 4.10 in that the values of xn must be saved as elements of a vector so that the appropriate elements can be subsequently displayed. 4.12 For a given a 7 0, the following relationship will determine the positive value of the 1a to within a tolerance t0 for any starting value (guess) x0 7 0 xn + 1 =

1 a ax + b 2 n xn

n = 0, 1, 2, Á

where xn + 1 ⬵ 1a. (When x0 6 0, the negative square root is found.) Write a script that determines 1a to within |xn -xn + 1| 6 10-6 for a = 7. How many iterations does it take if (a) x0 = 3 and (b) x0 = 100. The first iteration is the determination of x1. [Hint: Notice that the above relationship is not an explicit function of n. Here the subscript n is simply an indicator that the next (new) value xn + 1 is a function of the previous (old) value xn. Thus, each time through the loop the old and new values keep changing. Therefore, one has to keep track of n in order to record the number of times this relationship is used until the convergence criterion is met.] [Answer: (a) niterations = 4 and (b) niterations = 10.] Sections 4.2.1, 4.2.2, and 4.2.3 4.13 Given two polynomials: y(x) = p1xn + p2xn - 1 + Á + pnx + pn + 1 z(x) = s1xm + s2xm - 1 + Á + smx + sm + 1 Write a script to add them, that is, h(x) = y(x) + z(x), when m = n, m 6 n, and m 7 n. Polynomials are added by adding the coefficients of the terms with the same exponent. Assume that the input to the script are the vectors p = [p1 p2 Á pn pn + 1] and s = [s1 s2 Á sm sm + 1]. Check your script with the following data sets: i. p = [1, 2, 3, 4] and s = [10, 20, 30, 40]; ii. p = [11, 12, 13, 14] and s = [101, 102]; and iii. p = [43, 54, 55] and s = [77, 66, 88, 44, 33]. [Answers:(i) h = [11, 22, 33, 44]; (ii) h = [11, 12, 114, 116]; (iii) h = [77, 66, 131, 98, 88].]

Exercises

171

Sections 4.2.1, 4.2.3, and 4.2.4 4.14 Given the following relation xn + 1 = axn(1 - xn)

n = 1, 2, Á , N

When x1 = 0.1, determine which of the following cases converge: a = 1.45, 2.75, 3.2, and 4. Consider the sequence to be nonconvergent when |(xn + 1 - xn)/xn + 1| 7 10-4 and N 7 200 and to be convergent when |(xn + 1 - xn)/xn + 1| … 10-4 and N … 200. Print the value of xN. 4.15 Create a script that asks the user to input sequentially two positive integers N and M such that N … 9 and M … N2 and ensures that these limitations are met. The program has to ask the user for these two integers separately, N first and then M if N has the correct attributes. Sections 4.2.1– 4.2.4 4.16 The chi-square statistic is used to perform goodness-of-fit tests. It is defined as k

X2 = a

i=1

(xi - ei)2 ei

where ei and xi are independent vectors of length k. If ei 6 5, then the ei and xi must be combined with their respective ei + 1 and xi + 1 values. If the sum of ei + ei + 1 is still 6 5, then ei + 2 is added to the sum of ei + ei + 1. This process is repeated until the sum is Ú5. When ei Ú 5 and the sum of the remaining ei + 1, ei + 2, Á , ek, is less than 5, then these remaining values are added to ei. Write a script that computes X2 under the conditions described above. Check your results with the following vectors, which represent three different cases: i. x = [1, 7, 8, 6, 5, 7, 3, 5, 4] and e = [2, 6, 10, 4, 3, 6, 1, 2, 3]; ii. x = [7, 11, 13, 6] and e = [6, 10, 15, 7]; and iii. x = [3, 14, 20, 25, 14, 6, 2, 0, 1, 0] and e = [4, 12, 19, 19, 14, 8, 4, 2, 1, 1]. Hint: The most compact script will be obtained by performing tests on the elements of cumsum(e), where the length of e changes as the evaluation procedure progresses. [Answers: i. emodified = [8, 10, 7, 6, 6], xmodified = [8, 8, 11, 7, 12], X2 = 8.8524; ii. emodified = [6, 10, 15, 7], xmodified = [7, 11, 13, 6], X2 = 0.6762; and iii. emodified = [16, 19, 19, 14, 8, 8], xmodified = [17, 20, 25, 14, 6, 3], X2 = 5.6349.]

5 Function Creation and Selected MATLAB Functions Edward B. Magrab

5.1 Introduction 173 5.1.1 Why Use Functions 173 5.1.2 Naming Functions 174 5.1.3 Length of Functions 174 5.1.4 Debugging Functions 174 5.2 User-Defined Functions 175 5.2.1 Introduction 175 5.2.2 Function File 175 5.2.3 Subfunctions 181 5.2.4 Anonymous Functions 183 5.2.5 inline 184 5.2.6 Comparison of the Usage of Subfunctions, Anonymous Functions, and inline 185 5.3 User-Defined Functions, Function Handles, and feval 186 5.4 MATLAB Functions that Operate on Arrays of Data 187 5.4.1 Introduction 187 5.4.2 Fitting Data with Polynomials—polyfit/polyval 188 5.4.3 Fitting Data with spline 190 5.4.4 Interpolation of Data—interp1 192 5.4.5 Numerical Integration—trapz 193 172

Section 5.1

Introduction

173

5.4.6 Area of a Polygon—polyarea 195 5.4.7 Digital Signal Processing—fft and ifft 196 5.5 MATLAB Functions that Require User-Defined Functions 201 5.5.1 Zeros of Functions—fzero and roots/poly 202 5.5.2 Numerical Integration—quadl and dblquad 207 5.5.3 Numerical Solutions of Ordinary Differential Equations—ode45 212 5.5.4 Numerical Solutions of Ordinary Differential Equations—bvp4c 217 5.5.5 Numerical Solutions of Delay Differential Equations—dde23 231 5.5.6 Numerical Solutions of One-Dimensional Parabolic–Elliptic Partial Differential Equations—pdepe 233 5.5.7 Local Minimum of a Function—fminbnd 235 5.5.8 Numerical Solutions of Nonlinear Equations—fsolve 238 5.6 Symbolic Solutions and Converting Symbolic Expressions into Functions 240 5.7 Summary of Functions Introduced in Chapter 5 246 Exercises 247 The creation of functions and their various uses within MATLAB are described, and several MATLAB functions that are frequently used to obtain numerical solutions to engineering problems are illustrated.

5.1 INTRODUCTION One form of an M file is the script file. A second type of M-file is the function file. Function files are script files that create their own local and independent workspace within MATLAB. Variables defined within a function are local to that function; they neither affect nor are they affected by the same variable names being used in any script or other function file. All of MATLAB’s functions are of this type. The exceptions are those variables that are designated global variables in user-created functions, which are discussed in Section 5.2.2. The first noncomment line of a function must follow a prescribed format, which is given in Section 5.2.2. Typically, user-created MATLAB programs are either scripts or functions and employ any number of user-created functions and MATLAB functions. MATLAB asserts that a function executes faster than a script. In addition, as we shall discuss, the function can contain within it additional functions called subfunctions; this is discussed in Section 5.2.3. 5.1.1 Why Use Functions There are several reasons to create functions, besides the fact that many MATLAB functions require them, as discussed in Section 5.5. They are used to 1. Avoid duplicate code. 2. Limit the effect of changes to specific sections of a program. 3. Promote program reuse.

174

Chapter 5

Function Creation and Selected MATLAB Functions

4. Reduce the complexity of the overall program by making it more readable and manageable. 5. Isolate complex operations. 6. Improve portability. 7. Make debugging and error isolation easier. 8. Improve performance because each function can be “optimized.” The compartmentalization brought about by the use of functions also tends to minimize the unintended use of data by portions of the program, because data to each function is provided only on a need-to-know basis. 5.1.2 Naming Functions The names of functions should be chosen so that they are meaningful and indicate what the function does. Typical lengths of function names are between nine and twenty characters and should employ standard or consistent conventions. The proper choice of function names can also minimize the use of comments within the function itself. Recall, also, the naming conventions suggested in Section 1.2.3. 5.1.3 Length of Functions The length of a function can vary from two lines of code to hundreds of lines of code. However, the length of a function should be governed, in part, by its functional cohesion—that is, the degree to which it does one thing and not anything else. For example, sin(x) is 100% cohesive, whereas a function that computes the sine and square root would be less cohesive because it does two separate things, each of which is unrelated to the other. A function can be created with numerous highly cohesive functions to create another cohesive function. An additional advantage of the creation of cohesive functions is their reliability—that is, lower error rate. In addition, when functions have a low degree of cohesion, one often encounters difficulty in isolating errors. 5.1.4 Debugging Functions During the creation of functions (and scripts), the program should be independently verified to ensure that it is working correctly after every few expressions are written. MATLAB is particularly well suited to this type of procedure, which simply involves omitting the semicolon at the end of each expression. Furthermore, one incurs very little time penalty when omitting the semicolon, except in those expressions using large vectors and matrices or iterative solution techniques. The verification should be performed with some type of independent calculation or estimation. During the verification/debugging stage, any lines of code that may be inserted to provide intermediate output should be commented out, not deleted, until the entire function has been verified to be working correctly. Only after a function is working correctly should it be improved to decrease its execution time, if necessary. Creating correctly performing programs is the primary goal.

Section 5.2

User-Defined Functions

175

5.2 USER-DEFINED FUNCTIONS 5.2.1 Introduction The function in MATLAB can be created in several ways. The most general form is the function file, which is created by the function keyword, saved in a file, and subsequently accessed by scripts and functions or from the command window. However, a function cannot be created in the command window. The creation of the function is given in Section 5.2.2. A second form of the function is the subfunction. When the function keyword is used more than once in a function file, then all additional functions that appear after the first function keyword are called subfunctions. The first usage of the function keyword denotes the primary function. The subfunctions are only accessible by the primary function and the other subfunctions within the primary function file. Subfunctions are used to reduce function file proliferation. The subfunction is discussed in Section 5.2.3. A third way to create a function is with an anonymous function, which provides a means of creating simple functions without having to use the function keyword. It is limited to a single MATLAB expression, but may use expressions that contain other anonymous functions. Anonymous functions are accessible from the command window, a script, function, or subfunction and can be created in any of these venues. The creation of an anonymous function is discussed in Section 5.2.4. A fourth way to create a function is with inline. Like the anonymous function, this function is also limited to one MATLAB expression but unlike the anonymous function it is accessible only from the command window, script, function, or subfunction in which it was created. Its creation is discussed in Section 5.2.5. The comparison of the usage of each of these ways to create functions is summarized in Section 5.2.6. 5.2.2 Function File A function that is going to reside in a function file has at least two lines of program code, the first line having a format required by MATLAB. There is no terminating character or expression for the function program such as the end statement, which is required for the for, while, if, and switch structures. Furthermore, the name of the M-file must be the same as the name of the primary function, except that the file name has the extension “.m”. The number of variables and their type (scalar, vector, matrix, string, cell, function handle) that are brought in and out of the function are controlled by the function interface, which is the first noncomment line of the function program. In general, a function will consist of the interface line, some comments and one or more expressions as shown below. The interface has the general form given in the first line. function [OutputVariables] = FunctionName(InputVariables) % Comments Expressions OutputVariables = . . .

176

Chapter 5

Function Creation and Selected MATLAB Functions

OutputVariables is a comma-separated list of the names of the output variables, InputVariables is a comma-separated list of the names of the input variables, and FunctionName is the name of the function and in the case of a primary function, the name of the function M-file. It must begin with an upper or lower case letter and has the same restrictions as discussed for variable names in Section 1.2.3. The first word of this statement, function, is a reserved word that may only be used in this context. The function file may be stored in any directory to which a path has been or will be defined and has the file name FunctionName.m. However, in order for one to have access to this function during a session, the function and the script must have their respective paths known to the system. This is done by either having the script and function in the current directory, or by placing the function’s directory in a path that has been saved using the procedure discussed regarding Figure 1.13. The comments immediately following the function interface statement are used by MATLAB to create this function’s Help information—that is, when one types at the command line help FunctionName all the initial contiguous comments will appear in the MATLAB command window. Any comments appearing prior to the function statement will not be part of the Help information. The Help information ends when no more contiguous comment lines are encountered, that is, when a blank line or an executable expression is encountered. Special Case 1 Functions can also be used to create a figure, to display annotated data to the command window, or to write data to files. In these cases, no values are transferred back to the calling program (a script, function, or subfunction that uses this function in one or more of its expressions). In this case, the function interface line becomes function FunctionName(InputVariables) Special Case 2 When a function is used only to store data in a prescribed manner, the function does not require any input arguments. In this case, the function interface line has the form function OutputVariables = FunctionName This case is illustrated in Example 5.1. Special Case 3 When a function is a primary function and the primary function is being used instead of script file, the function interface line has the form function FunctionName This form is the one that we shall use frequently to replace the script file, which has been employed in the previous chapters.

Section 5.2

User-Defined Functions

177

There are several concepts that must be understood to correctly create functions. The first is that the variable names used in the function definition do not have to match the corresponding names when the function is called from the command window, a script, or another function. Instead, it is the locations of the input variables within the comma-separated argument list inside the parentheses that govern the transfer of information—that is, the first argument in the calling statement transfers its value(s) to the first argument in the function interface line, and so on. Second, the names selected for each argument are local to the function program and have meaning only within the context of the function program. The same names can be used in an entirely different context in the script file that calls this function or in another function used by this function. However, the names appearing for each input variable of the function statement must be of the same type: either scalar, vector, matrix, cell, string, or function handle in the calling program as in the function program in order for the function’s expressions to work as intended. For example, the multiplication of two row vectors may result in an error message if the variables do not have the correct size (order). Furthermore, the names used for the input variables of the function statement are equivalent to their appearing on the left side of an equal sign. Thus, if one of the input variable names is a, then a is equivalent to a = numerical value(s). The variable names are not local to the function when they have been assigned as global variables using global. The use of global is discussed subsequently. We shall first illustrate the construction of a function, and then list several of its variations. Consider the following two equations that are to be computed in a function x = cos(at ) + b y = ƒxƒ + c The values of x and y are to be returned by the function. We now create a function to compute these quantities and we call it ComputeXY, which is saved as a file named ComputeXY.m.1 function [x, y] = ComputeXY(t, a, b, c) % Computation of % x = cos(at)+b % y = ƒxƒ+c % Scalars: a, b, c % Vectors: t, x, y x = cos(a*t)+b; y = abs(x)+c; When one types in the MATLAB command window help ComputeXY

1 The comments are included in this example to show its usage. In the large majority of scripts and functions presented in this book, the comment lines have been omitted in order to make the listings themselves more readable. However, in most cases, the important features of the programs are discussed within the text accompanying each script or function, or they are obvious from its context.

178

Chapter 5

Function Creation and Selected MATLAB Functions

the following is displayed Computation of x = cos(at)+b y = |x|+c Scalars: a, b, c Vectors: t, x, y

Several other variations of the function interface and how they are accessed from the calling programs are given in Table 5.1. It is seen from the examples in this table that one must ensure that the number and the type of the input and output variables are correct with respect to how they are used by the function. These restrictions should be denoted in the function’s comments intended for the response to the help request. In this case, we have assumed that t is a vector and that a, b, and c are scalars. We can now call this function by typing in the command window [u, v] = ComputeXY(0:pi/4:pi, 1.4, 2, 0.75); By virtue of the location within the parentheses, this means that with reference to the function, t = [0, pi/4, pi/2, 3*pi/4, pi], a = 1.4, b = 2.0, and c = 0.75. Upon executing this statement, we obtain u= 3.0000 v= 3.7500

2.4540

1.4122

1.0123

1.6910

3.2040

2.1622

1.7623

2.4410

Functions normally return to the calling program when the last statement of the function is reached. To force an earlier return, one uses return Let us modify the function ComputeXY so that the function is only evaluated when the variable t is a vector of length two or more and when the number of arguments in

TABLE 5.1 Several Variations of the Function Statement [u, v] = ComputeXY(t, a, b, c)

Function

Accessing function from script or function

Comments

function z = ComputeXY(t, w) x = cos(w(1)*t)+w(2); z = [x; abs(x)+w(3)];

t = 0:pi/4:pi; w = [1.4, 2, 0.75]; q = ComputeXY(t, w);

w(1) = a = 1.4; w(2) = b = 2; w(3) = c = 0.75; q : (2 * 5) x(:) = q(1, 1:5); y(:) = q(2, 1:5)

function z = ComputeXY(t, w) x = cos(w(1)*t)+w(2); z = [x abs(x)+w(3)];

t = 0:pi/4:pi; w = [1.4, 2, 0.75]; q = ComputeXY(t, w);

w(1) = a = 1.4; w(2) = b = 2; w(3) = c = 0.75; q : (1 * 10) x(:) = q(1:5); y(:) = q(6:10)

function[x, y] = ComputeXY(t, w) x = cos(w(1)*t)+w(2); y = abs(x)+w(3);

t = 0:pi/4:pi; w = [1.4, 2, 0.75]; q = ComputeXY(t, w);

w(1) = a = 1.4; w(2) = b = 2; w(3) = c = 0.75; q : (1 * 5) x = q; y not available§

§ Many of the MATLAB functions make use of this form, as will be seen in subsequent chapters.

Section 5.2

User-Defined Functions

179

the calling statement is four. This ensures that the user has entered the correct number of variables and that t is not a scalar. In order to determine the number of input variables that are actually used to call the function, we use nargin. To signify that inappropriate or insufficient data have been entered, the function returns NaN, which, we recall, is a reserved word meaning “not a number”. Then, our previous function is modified as follows (the comments have been omitted for clarity): function [x, y] = ComputeXY(t, a, b, c) if (length(x) == 1)||(nargin ~= 4) x = NaN; y = NaN; return end x = cos(a*t)+b; y = abs(x)+c; In some instances, the number of different variables that are transferred to a function can become large. In these cases, it may be beneficial for the function to share the global memory of the script or function or to create access to global variables for use by various functions.2 This access is provided by global To illustrate its usage, we shall transfer the values of a, b, and c in ComputeXY as global variables. The script is modified as follows: function [x, y] = ComputeXY(t) global A B C x = cos(A*t)+B; y = abs(x)+C; where the blank spaces between the global variable names are required. Notice that the variables a, b, and c no longer appear in the function interface line. The script required to call this function is now global A B C A = 1.4; B = 2; C = 0.75; [u, v] = ComputeXY(0:pi/4:pi) The same variable names must be used in both the script and the function and they must have the same context in both. Upon execution, the following values are displayed to the command window: u= 3.0000 v= 3.7500

2.4540

1.4122

1.0123

1.6910

3.2040

2.1622

1.7623

2.4410

which is what we obtained previously.

2

MATLAB suggests that global variables be used sparingly or not at all.

180

Chapter 5

Function Creation and Selected MATLAB Functions

Since the arguments in the function definition are, in a sense, placeholders for the numerical values that will reside in their respective places when the function is executed, when appropriate, we can insert any correctly constructed MATLAB expression in the calling statement. To illustrate this, let us use ComputeXY to determine the values of x and y for b =

1.8 A 11 + k23

k = 1, Á , n

when t varies from 0 to p in increments of p/4, c = 1/0.85, a has n values that range from 1 to 1.4, and n = 3. Upon using ComputeXY of the form function [x, y] = ComputeXY(t, a, b, c) x = cos(a*t)+b; y = abs(x)+c; the script is n = 3; a = linspace(1, 1.4, n); for k = 1:n [u, v] = ComputeXY(0:pi/4:pi, a(k), sqrt(1.8/(1+k)^3), 1/.85); disp(['For k = ', int2str(k)]) disp(['u = ' num2str(u)]) disp(['v = ' num2str(v)]) end Upon execution, the following results are displayed in the command window: For k = 1 u= 1.4743 v= 2.6508 For k = 2 u= 1.2582 v= 2.4347 For k = 3 u= 1.1677 v= 2.3442

1.1814

0.47434

-0.23277

-0.52566

2.3579

1.6508

1.4092

1.7021

-0.69286

-0.55082

0.84598

-0.050818

2.0225

1.2273

1.8693

1.7273

0.6217

-0.42008

-0.81998

-0.14131

1.7982

1.5966

1.9965

1.3178

If we repeat the above computation using global variables for a, b, and c, then the function is function [x, y] = ComputeXY(t) global A B C x = cos(A*t)+B; y = abs(x)+C;

Section 5.2

User-Defined Functions

181

and the script is global A B C n = 3; C = 1/.85; c = linspace(1, 1.4, n); for k = 1:n A = c(k); B = sqrt(1.8/(1+k)^3); [u, v] = ComputeXY(0:pi/4:pi) end which upon execution produces the previously obtained results (without the annotation). As a final remark, we illustrate the case where the results of a function are returned as a vector and are redefined in the script file as one row of a matrix. For simplification, we shall assume that we are interested only in the values of x and that these values are returned inside a for loop. Thus, a segment of a program could be ... n = 4; c = linspace(1, 1.4, n); t = 0:pi/4:pi; p = zeros(n, length(t)); for k = 1:4 p(k,:) = ComputeXY(t, c(k), sqrt(1.8/(1+k)^3), 1/.85); o end o It is seen that p(= u = cos(at) + b) in this case will be a (4 * 5) matrix, since k = 1, 2, 3, 4 and the length of the vector t is 5. Recall that the notation p(k,:) means that the kth row of matrix p is to have its column elements assigned the corresponding values of the columns of the row vector returned by ComputeXY. In addition to the fact that the initial assignment of p using zeros to pre-allocate an array is good programming practice, it is also necessary because of the way p is used in the for loop; otherwise, an error message will occur. 5.2.3 Subfunctions When the function keyword is used more than once in a function file, all the additional functions created after the first function keyword are called subfunctions.The expressions comprising the first use of the function keyword is called the primary function. It is the only function that is accessible from the command window, scripts, and other functions residing in their own M-file.The subfunctions are accessible only to the primary function and to other subfunctions within the primary function file. We shall illustrate the use of a primary function and subfunctions by computing the mean and standard deviation of a vector of numerical values. We shall compute

182

Chapter 5

Function Creation and Selected MATLAB Functions

this in a relatively inefficient manner in order to illustrate the properties and use of subfunctions. The mean m and the standard deviation s are given by m =

1 n xk n ka =1

s = c

n 1/2 1 a a x2k - nm2 b d n - 1 k=1

We shall call the primary function MeanStdDev, the subfunction that computes the mean m meen, and the subfunction that computes the standard deviation s stdev. The primary function and its subfunctions are saved in a file MeanStdDev.m. The primary function and subfunctions are then given by the following program: function [m, s] = MeanStdDev(dat) n = length(dat); m = meen(dat, n); s = stdev(dat, n);

% Primary function

function m = meen(v, n) m = sum(v)/n;

% Subfunction

function sd = stdev(v, n) m = meen(v, n); sd = sqrt((sum(v.^2)-n*m^2)/(n-1));

% Subfunction % Calls a sub function

A script to illustrate the use of this function file is v = [1, 2 , 3, 4]; [m, s] = MeanStdDev(v) which upon execution gives m= 2.5000 s= 1.2910

It is noted that meen and stdev cannot be used independently; that is, typing, for example, v = [1, 2 , 3, 4]; m = meen(v, length(v)) in the command window will produce an error message indicating that the function file for meen cannot be found. If one anticipates that the functions created in support of a script will not be used outside the immediate context, then one can convert the script to a function and make all functions subfunctions in that function file. The form of the primary function most likely will be that given by Special Case 3 in Section 5.2.2. We shall illustrate this procedure the first time in Example 5.1.

Section 5.2

User-Defined Functions

183

5.2.4 Anonymous Functions Another way to create a function, either in the command window, a script, a primary function, or subfunction is by creating an anonymous function.Anonymous functions are a means of creating functions for simple expressions without having to create M-files or subfunctions. It can be composed of only one expression, and it can bring back only one variable—that is, the form [u, v] on the left-hand side of the equal sign is not allowed. Thus, any function requiring logic or multiple operations to arrive at the result cannot employ the anonymous function. The general form of an anonymous function is functionhandle = @(arguments) (expression) where functionhandle is the function handle, arguments is a comma-separated list of variable names, and expression is a valid MATLAB expression. Any parameters that appear in expression and do not appear in arguments must be given a numerical value prior to this statement. The parentheses around expression are optional, but can be a visual aid. A function handle is a way of referencing a function and is used as a means of invoking the anonymous function and as a means to pass the function as an argument in functions, which then evaluates it using feval as shown in Section 5.3. A function handle is constructed by placing an “@” in front of the syntax as shown above or in front of a function name as shown in Section 5.3. The function handle functionhandle also serves as the name of the function and is used in the same manner as one does for a function created by the function keyword. We illustrate the anonymous function with the following examples. Let us create an anonymous function that evaluates the expression cx = ƒ cos(bx) ƒ at b = p/3 and x = 4.1. The anonymous function is created with the following script: bet = pi/3; cx = @(x) (abs(cos(bet*x))); disp(cx(4.1)) which upon execution gives 0.4067

This anonymous function could have also been created as having two arguments: b and x. In this case, the preceding script becomes cx = @(x, bet) (abs(cos(bet*x))); disp(cx(4.1, pi/3)) We can also use this anonymous function directly in another anonymous function. Let us create an anonymous function that determines the cube root of cx. Then, to illustrate the use of one anonymous function using another anonymous function, consider the following script: cx = @(x, bet) (abs(cos(bet*x))); cxrt = @(x, bet) (cx(x, bet)^(1/3)); disp(cxrt(4.1, pi/3))

184

Chapter 5

Function Creation and Selected MATLAB Functions

which upon execution results in 0.7409

For a last example, consider the creation of an anonymous function that evaluates a two-element column vector v where v11 = x2/4 + y2 - 1 v21 = y - 4x2 + 3 In this case, the anonymous function can be created in two ways. The first way is v = @(x, y) ([0.25*x.^2+y.^2-1; y-4*x.^2+3]); a = v(1, 2); disp(['v(1,1) = 'num2str(a(1))' v(2,1) = ' num2str(a(2))]) which upon execution gives v(1,1) = 3.25

v(2,1) = 1

The second way is v = @(xy) ([0.25*xy(1).^2+xy(2).^2-1; xy(2)-4*xy(1).^2+3]); a = v([1, 2]); disp(['v(1,1) = ' num2str(a(1)) ' v(2,1) = ' num2str(a(2))]) where xy(1) = x and xy(2) = y. Execution of this script gives the previous result. 5.2.5 inline Another way to create a local function, either in the command window, a script, a primary function, or subfunction is by using inline. Like the anonymous function, this function also doesn’t have to be saved in a separate file. However, it does have several limitations. It cannot call another inline function, but it can use a user-created function existing as a function file. Like the anonymous function it can be composed of only one expression and can bring back only one variable. Thus, any function requiring logic or multiple operations to arrive at the result cannot employ inline. An additional utility of inline is that it provides one way to convert a symbolic result to a function; this is shown in Section 5.6. The general form of inline is FunctionName = inline ('expression', 'v1','v2', . . . ) where expression is any valid MATLAB expression and v1,v2, . . . are the names of all the variables appearing in expression.The single quotation marks are required as shown. We illustrate inline with the following example. Let us create a function FofX that evaluates f(x) = x2 cos(ax) - b where a and b are scalars and x is a vector. Then, FofX = inline('x.^2.*cos(a*x)-b', 'x', 'a', 'b')

Section 5.2

User-Defined Functions

185

displays in the MATLAB command window FofX = Inline function: FofX(x,a,b) = x.^2.*cos(a*x)-b

The dot multiplication is required, since x is a vector. If we had ended the inline expression with a semicolon, then this display would have been suppressed. Thus, typing in the command window FofX = inline('x.^2.*cos(a*x)-b', 'x', 'a', 'b'); g = FofX([pi/3, pi/3.5], 4, 1) results in g= -1.5483

-1.7259

The inline form for functions, just as for the anonymous function, has utility in many MATLAB functions that require one to first create a function that will be evaluated subsequently by that MATLAB function. Several examples of its usage are given in Section 5.5. 5.2.6 Comparison of the Usage of Subfunctions, Anonymous Functions, and inline We shall now compare the usage of the subfunction, anonymous function, and the inline function. We will assume that the subfunctions, anonymous functions, and inline functions are used in a function file and that the operations to be performed are to determine the mean and standard deviation of a vector of numbers as illustrated in Section 5.2.3. The three usages are summarized in Table 5.2.

TABLE 5.2 Comparison of the Usage of Subfunctions, Anonymous Functions, and inline

Subfunctions

Anonymous functions

inline

function Example dat = 1:3:52; n = length(dat); m = meen(dat, n) s = stdev(dat, n)

function Example dat = 1:3:52; n = length(dat); meen = @(dat, n) (sum(dat/n); stdev = @(dat, n, m) (sqrt((sum(dat. ¿ 2) -n*m ¿ 2)/(n-1))); m = meen(dat, n) s = stdev(dat, n, m)

function Example dat = 1:3:52; n = length(dat); meen = inline('sum(dat)/n','dat','n'); stdev = inline('sqrt((sum(dat. ¿ 2)n*m ¿ 2)/(n-1))', 'dat', 'n', 'm'); m = meen(dat, n) s = stdev(dat, n, m)

function m = meen(v, n) m = sum(v)/n; function sd = stdev(v, n) m = meen(v, n); sd = sqrt((sum(v. ¿ 2)n*m ¿ 2)/(n-1));

186

Chapter 5

Function Creation and Selected MATLAB Functions

5.3 USER-DEFINED FUNCTIONS, FUNCTION HANDLES, AND FEVAL Many MATLAB functions require the user to create functions in a form specified by that MATLAB function. These functions use the MATLAB function feval(FunctionHandle, p1, p2, . . . , pn) where FunctionHandle is the function handle (recall Section 5.2.4) and p1, p2, . . . are parameters that are to be passed to the function represented by FunctionHandle. Several examples of MATLAB functions that require the use of a function handle and feval are given in Section 5.5. In addition, there are situations when the user would also like to have this capability. We will explain how this procedure works with an example based on the results of Example 4.11 where a root-finding program to determine the m lowest roots of a specific function f(x) = 0 was presented. We now convert this script to a function whose name is ManyZeros, which resides in the function M-file ManyZeros.m. The function f(x) will now be arbitrary. In addition, it will be assumed that f(x) has several parameters that are part of its definition. We recall that the root-finding program requires four inputs: m, the number of roots desired; xs, the starting value for search; t, the computational tolerance that determines the degree of closeness to zero of f(xroot); and ¢ , the initial search increment. For this example, we shall let f(x) = cos(bx) - a

a … 1

Thus, we have to transfer to the user-defined function two quantities: b and a. This user-defined function will be called CosBeta, and it will reside in the file CosBeta.m. The function ManyZeros is as follows (recall Example 4.11). function nRoots = ManyZeros(zname, n, xs, toler, dxx, w) x = xs; dx = dxx; nRoots = zeros(n, 1); for m = 1:n s1 = sign(feval(zname, x, w)); while dx/x >toler if s1 ~= sign(feval(zname, x+dx, w)) dx = dx/2; else x = x+dx; end end nRoots(m) = x; dx = dxx; x = 1.05*x; end

Section 5.4

MATLAB Functions that Operate on Arrays of Data

187

The variable w is introduced because ManyZeros is intended to be used with an arbitrary f(x), which, in general, may have any number of parameters. Therefore, w can be a vector of any length. The meaning of its individual elements will depend on the specific choice of f(x). Consequently, CosBeta is given by function d = CosBeta(x, w) % beta = w(1); alpha = w(2) d = cos(x*w(1))-w(2); We recall that ManyZeros requires the following input variables: (1) the name of the function defining f(x), which is the function handle @CosBeta; and (2) six parameters, the first four of which correspond to m, xs, t, and ¢ and the remaining two are b and a, which are to be transferred to the function CosBeta as elements of the vector w. Depending on the value of m, the result nRoots is either a scalar (m = 1) or a vector of length m. To access CosBeta and bring back its numerical value, we use the MATLAB function feval. The MATLAB function sign then evaluates the sign of the numerical value brought back by feval. Also, notice that the variable names defined in the function’s input variables in the script file and the two function files are mostly different. This has been done to emphasize that only the locations and the subsequent usage of the arguments are important and not their alphanumeric descriptors, since the variable names are local to their respective functions. The program that uses these functions is function ExampleFeval NoRoots = 5; xStart = 0.2; tolerance = 1e-6; increment = 0.3; beta = pi/3; a = 0.5; c = ManyZeros(@CosBeta, NoRoots, xStart, tolerance, increment, [beta, a]) function f = CosBeta(x, w) f = cos(w(1)*x)-w(2) The execution of the script displays to the command window c= 1.0000

5.0000

7.0000

11.0000

13.0000

To further illustrate the transfer of information from one function to another function, we have shown in Figure 5.1 how the various arguments are transferred in ExampleFeval.

5.4 MATLAB FUNCTIONS THAT OPERATE ON ARRAYS OF DATA 5.4.1 Introduction There are many general-purpose functions in MATLAB that have a wide range of use in obtaining numerical solutions to engineering problems. We will consider a subset of them and divide them into two groups: those that operate on arrays of data

188

Chapter 5

Function Creation and Selected MATLAB Functions

ExampleFeval NoRoots = 5; xStart = 0.2; tolerance = 1e-6; increment = 0.3; beta = /3; a = 0.5; c = ManyZeros(@CosBeta, NoRoots, xStart, tolerance, increment, [beta, a])

nRoots = ManyZeros(zname, n, xs, toler, dxx, w) x = xs; dx = dxx; ... m = 1:n s1 = … dx/x >toler s1 ~= ( (zname, x+dx, w)) … … …

f=

f = CosBeta(x, w) (w(1)*x)-w(2)

Figure 5.1 Graphical representation of how MATLAB transfers information from one function to another function.

and those that require user-defined functions. In this section, we consider those functions that require arrays of data as input. In Section 5.5, we consider those functions that require user-defined functions. The functions that will be introduced in this section are: polyfit polyval spline interp1 trapz polyarea fft/ifft

Fits a polynomial to an array of values Evaluates a polynomial at an array of values Applies cubic spline interpolation to arrays of coordinate values Interpolates between pairs of coordinate values Approximates an integral from an array of amplitude values Determines the area of a polygon Determines the Fourier transform and its inverse from sampled data

5.4.2 Fitting Data with Polynomials—polyfit/polyval Consider the general form of a polynomial y(x) = c1xn + c2xn - 1 + Á + cnx + cn + 1

(5.1)

where x is the input value and y = y(x) its corresponding output. The coefficients ck are determined from c = polyfit(x, y, n)

Section 5.4

MATLAB Functions that Operate on Arrays of Data

189

where n is the order of the polynomial, c = [c1 c2 Á cn cn + 1] is a vector of length n + 1 representing the coefficients of the polynomial in Eq. (5.1), and x and y are each vectors of length m Ú n + 1; they are the data to which the polynomial is fitted, with x the input and y the output. To evaluate Eq. (5.1) once we have determined c, we use y = polyval(c, xnew) where c is a vector of length n + 1 that has been determined from polyfit and xnew is either a scalar or a vector of points at which the polynomial will be evaluated. In general, the values of xnew in polyval can be arbitrarily selected and may or may not be the same as x. If the coefficients c are not of interest, then we can combine polyfit and polyval as follows: y = polyval(polyfit(x, y), xnew) We now illustrate these functions with an example.

Example 5.1

Neuber’s constant for the notch sensitivity of steel

A notch sensitivity factor q for metals can be defined in terms of Neuber’s constant 1a and the notch radius r as follows: q = a1 +

1a - 1 b 1r

The value of 1a is different for different metals and is a function of the ultimate strength Su of the material. It can be estimated by fitting a polynomial to the experimentally obtained data of 1a as a function of Su for a given metal. Once we have this polynomial, we can determine the value of q for a given value of r and Su. Let us consider the data given in Table 5.3 for steel. Using these data, we first determine the coefficients of a fourth-order polynomial that expresses 1a as a function of Su, and then we use this polynomial to obtain q for a given r and Su. To fit the data appearing in Table 5.3 and to obtain the value of 1a for any value 0.3 … Su … 1.7 GPa and 0 6 r 6 5 mm, we use the following script. For simplicity, we assume that we enter one set of Su and r at a time. Furthermore, we place the data

TABLE 5.3 Neuber’s Constant for Steel

Su (GPa)

1a( 1mm)

Su (GPa)

1a( 1mm)

0.34 0.48 0.62 0.76 0.90 1.03

0.66 0.46 0.36 0.29 0.23 0.19

1.17 1.31 1.45 1.59 1.72

0.14 0.10 0.075 0.050 0.036

190

Chapter 5

Function Creation and Selected MATLAB Functions

appearing in Table 5.3 in a function called NeuberData. In NeuberData, nd(:,1) = Su and nd(:,2) = 1a. The generation of a set of graphs that display the values of q for a range of data is given in Figure 6.27b. The program is function Example5_1 ncs = NeuberData; c = polyfit(ncs(:, 1), ncs(:, 2), 4); r = input('Enter notch radius (0 < r < 5 mm): '); Su = input('Enter ultimate strength of steel (0.3 < Su < 1.7 GPa): '); q = 1/(1+polyval(c, Su)/sqrt(r)); disp('Notch sensitivity = ' num2str(q, 3)]) function nd = NeuberData nd = [0.34, 0.66; 0.48, 0.46; 0.62, 0.36; 0.76, 0.29; 0.90, 0.23; 1.03, 0.19; ... 1.17, 0.14; 1.31, 0.10; 1.45, 0.075; 1.59, 0.050; 1.72, 0.036]; Executing this script yields Enter notch radius (0 < r < 5 mm): 2.5 Enter ultimate strength of steel (0.3 < Su < 1.7 GPa): 0.93 Notch sensitivity = 0.879

where, in the first two lines, the user entered sequentially the numbers 2.5 and 0.93 after each line was displayed. The program then computed the value of q and displayed the third line.

5.4.3 Fitting Data with spline A very powerful way to generate smooth curves that pass through a set of discrete data values is to use splines. The function that performs this curve generation is Y = spline(x, y, X) where y is y(x), x and y are vectors of the same length that are used to create the functional relationship y(x), and X is a scalar or vector for which the values of Y = y(X) are desired. In general, x Z X. We shall now illustrate the use of spline. Example 5.2

Fitting data to an exponentially decaying sine wave

We shall generate some data using an exponentially decaying oscillatory function and then fit these data with a series of splines. The data will be generated by sampling the following function over a range of nondimensional times t for j 6 1.0: f(t, j) =

e - jt 21 - j2

sin A t21 - j2 + w B

where w = tan

-1

21 - j2 j

(5.2)

Section 5.4

MATLAB Functions that Operate on Arrays of Data

191

We shall evaluate this equation in a function called DampedSineWave and place it in its own M-file so that we can use it again. Thus, function f = DampedSineWave(tau, xi) r = sqrt(1-xi^2); phi = atan(r/xi); f = exp(-xi*tau).*sin(tau*r+phi)/r; Let us sample twelve equally spaced points of f(t,j) over the range 0 … t … 20 and plot the resulting piecewise polynomial using 200 equally spaced values of t. We shall also plot the original waveform and assume that j = 0.1. The program is n = 12; xi = 0.1; tau = linspace(0, 20, n); data = DampedSineWave(tau, xi); newtau = linspace(0, 20, 200); yspline = spline(tau, data, newtau); yexact = DampedSineWave(newtau, xi); plot(newtau, yspline, 'k—', newtau, yexact, 'k-') which when executed produces Figure 5.2. The dashed lines are the fitted data. It is seen that the results are very good. The two curves become virtually indistinguishable from each other when fifteen equally spaced points are selected. A detailed discussion of plot is given in Section 6.2. The degree of closeness of the fit over the range considered could not have been obtained using polyfit.

1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8 0

5

10

15

20

Figure 5.2 Comparison of a damped sine wave (solid line) with an approximation (dashed line) obtained with a spline using twelve equally spaced points in the range 0 … t … 20.

192

Chapter 5

Function Creation and Selected MATLAB Functions

1 Data values Interpolated values 0.5

0 y

y = interp1(x, y, 1.15) = −0.113

−0.5 x = interp1(y, x, −1) = 2.04 −1

−1.5 0

0.5

1

1.5

2

2.5

3

3.5

x Figure 5.3

Two different usages of interp1.

5.4.4 Interpolation of Data—interp1 To approximate the location of a value that lies between a pair of data points, we must interpolate. The function that does this interpolation is V = interp1(u, v, U) where v is v(u), u and v are vectors of the same length, and U is a scalar or vector of values for u for which V is desired. The array V has the same length as U and, in general, u Z U. There are two ways in which interp1 can be used. If y = f(x), then the first way that interp1 can be used is to determine the value of y when x is given and the second way is to determine x when y is given. These two usages are summarized in Figure 5.3. We shall now illustrate the use of interp1.

Example 5.3

First zero crossing of an exponentially decaying sine wave

Let us again create a data set for the exponentially decaying sine wave given by Eq. (5.2) and implemented with DampedSineWave. We are interested in approximating the first zero crossing from these data. From Figure 5.2, we see that this occurs before t = 4.5; that is, after this value we start to get very close to the second zero crossing. Thus, we shall create fifteen pairs of data values for the exponentially decaying sine wave in the range 0 … t … 4 and use interp1 to approximate the value of t for which f(t,j) L 0. We assume that j = 0.1.

Section 5.4

MATLAB Functions that Operate on Arrays of Data

193

The script is xi = 0.1; tau = linspace(0, 4.5, 15); data = DampedSineWave(tau, xi); TauZero = interp1(data, tau, 0) The execution of the script gives TauZero = 1.6817

The exact answer is obtained from Eq. (5.2) as t =

p - w 21 - j2

=

1 21 - j2

ap - tan -1

21 - j2 b = 1.6794 j

5.4.5 Numerical Integration—trapz One can obtain an approximation to a single integral in several ways. We shall introduce the function trapz in this section, which requires arrays of data. Another function, which requires the integrand to be in functional form, is quadl. This function is introduced in Section 5.5.2. We start with Area = trapz(x, y) In this case, one specifies the values of x and the corresponding values of y as arrays. The function then performs the summation of the product of the average of adjacent y values and the corresponding x interval separating them.

Example 5.4

Area of an exponentially decaying sine wave

By using trapz, we shall determine the net area about the x-axis of the exponentially decaying sine wave given by Eq. (5.2) and plotted in Figure 5.2 and then show how to obtain the individual contributions of the positive and negative portions in the region 0 … t … 20. The script to obtain the area of the damped sine wave for j = 0.1 and for 200 data points is xi = 0.1; tau = linspace(0, 20, 200); ftau = DampedSineWave(tau, xi); Area = trapz(tau, ftau) Execution of this script gives Area = 0.3021

194

Chapter 5

Function Creation and Selected MATLAB Functions

To determine the area of the positive and negative portions of the waveform is a little more complicated. We start in the same way that we did to determine the total area. We first generate 200 equally spaced values of t and obtain the corresponding values of f(t, j) for j = 0.1 using DampedSineWave. To separate the positive and negative values, we create a logical structure and use it to set to zero all the negative values in one case and the positive values in another case. Thus, we modify the previous script as follows: xi = 0.1; tau = linspace(0, 20, 200); ftau = DampedSineWave(tau, xi); PosArea = trapz(tau, ftau.* (ftau >= 0)); NegArea = trapz(tau, ftau.* (ftau < 0)); disp(['Positive area = ' num2str(PosArea)]) disp(['Negative area = ' num2str(NegArea)]) disp(['Net area = ' num2str(PosArea+NegArea)]) Upon execution, we obtain Positive area = 2.9549 Negative area = -2.6529 Net area = 0.30207

We see that the net area agrees very closely with the value previously obtained.

Example 5.5

Length of a line in space

Consider the following integral from which the length of a line in space can be approximated: b

L =

N dy 2 dx 2 dz 2 b + a b + a b dt L a 21¢ ix22 + 1¢ iy22 + 1¢ iz22 dt dt i=1 3 C dt

a

a

where ¢ ix = x(ti + 1) - x(ti) ¢ iy = y(ti + 1) - y(ti) ¢ iz = z(ti + 1) - z(ti) and t1 = a and tN + 1 = b. To illustrate the approximation to L, we choose the specific parametric relations x = 2t y = t2 z = ln t for 1 … t … 2 and assume that N = 25. The quantities ¢ ix, ¢ iy, and ¢ iz, can each be evaluated with3 q = diff(x)

3

As indicated in Section 1.4, diff is also used by the Symbolic toolbox to differentiate a symbolic function.

Section 5.4

MATLAB Functions that Operate on Arrays of Data

195

which computes the difference between successive elements of a vector; that is, for a vector x = [x1 x2 Á xn], a vector q with n - 1 elements of the form q = [x2 -x1, x3 -x2, Á , xn -xn - 1] is created. For a vector x, diff is simply q = x(2:end)-x(1:end-1); The script to determine L is t = linspace(1, 2, 25); L = sum(sqrt(diff(2*t).^2+diff(t.^2).^2+diff(log(t)).^2)) which upon execution yields L= 3.6931

5.4.6 Area of a Polygon—polyarea One can obtain the area of an n-sided polygon, where each side of the polygon is represented by its end points, with the use of polyarea(x, y) where x and y are vectors of the same length that contain the (x, y) coordinates of the endpoints of each side of the polygon. Each (x, y) coordinate pair is the end point of two adjacent sides of the polygon; hence, for an n-sided polygon, we need n + 1 pairs of end points. We shall illustrate the use of this function by determining the area of a polygon whose vertices lie on the ellipse given by the parametric equations x = a cosu y = b sinu If we let a = 2, b = 5, and we create a polygon with ten sides, then the script is a = 2; b = 5; t = linspace(0, 2*pi, 11); x = a*cos(t); y = b*sin(t); disp(['Area = ' num2str(polyarea(x, y))]) Upon execution of this script, we obtain Area = 29.3893

It is noted that the area of the ellipse is pab = 10p = 31.42.

196

Chapter 5

Function Creation and Selected MATLAB Functions

5.4.7 Digital Signal Processing—fft and ifft Discrete Fourier Transform The Fourier transform of a real function g(t) that is sampled every ¢t over an interval 0 … t … T can be approximated by its discrete Fourier transform N-1

Gn = G(n¢f) = ¢t a gke - j2pnk/N n = 0, 1, ..., N - 1 k=0

where, as shown in Figure 5.4, gk = g(k¢t), ¢f = 1/T, T = N¢t, and N is the number of samples. In general, Gn is a complex quantity. The restriction on ¢t is that a¢t 6

1 fh

where fh is the highest frequency in g(t) and a 7 2. The quantity Gn is called the amplitude density of g(t) and has the units amplitude-second or, equivalently, amplitude/Hz. The inverse transform is approximated by N-1

gk = ¢f a Gnej2pnk/N k = 0, 1, ..., N - 1 n=0

In order to estimate the magnitude of the amplitude An corresponding to each Gn at its corresponding frequency n¢f, one multiplies Gn by ¢f. Thus, An = ¢fGn 1.8 1.6 Δt = T/NT) otherwise = 0

0…t…T

Section 5.4

MATLAB Functions that Operate on Arrays of Data

199

The program to compute and plot the corrected weighted signal gc(t) and the amplitude spectrum An and display the average power in the signal, which is Pavg = B20/2, is as follows: We assume that Ao = 2.5, f0 = 10Hz, K = 5, and m = 10 (N = 1024). k = 5; m = 10; fo = 10; Bo = 2.5; N = 2^m; T = 2^k/fo; ts = (0:N-1)*T/N; df = (0:N/2-1)/T; whamm = 0.54-0.46*cos(2*pi*ts/T); SampledSignal = Bo*sin(2*pi*fo*ts); k1 = sum(whamm.*SampledSignal)/sum(whamm); k2 = sqrt(N/sum(whamm.^2)); CorrectedSignal = whamm.*(SampledSignal-k1)*k2; figure(1) plot(ts, CorrectedSignal) figure(2) An = abs(fft(CorrectedSignal, N))/N; plot(df, 2*An(1:N/2)) disp(['Average power = ' num2str(sum(An.^2))]) Execution of the script results in Figures 5.5 and 5.6 and the following result being displayed to the command window: Average power = 3.125

The MATLAB function figure is used to provide two separate figure windows, as discussed in Section 6.1. Notice in Figure 5.6 that the amplitude of the sine wave does not equal 2.5. This value is obtained, however, when the weighting function is removed.

4 3 2 1 0 −1 −2 −3 −4

0

Figure 5.5

0.5

1

1.5

2

2.5

3

Sine wave modified by the Hamming weighting function.

3.5

200

Chapter 5

Function Creation and Selected MATLAB Functions

2.5

2

1.5

1

0.5

0

0

20

Figure 5.6 function.

Example 5.7

40

60

80

100

120

140

160

Amplitude spectrum of a sine wave using a Hamming weighting

Cross-correlation of two pulses

We shall determine the cross-correlation function for the two rectangular pulses shown in Figure 5.7, which are expressed as x(t) = Ax [u(t) - u(t - T0)]

t Ú 0

y(t) = Ay [u(t - T1) - u(t - T1 - T2)]

t Ú 0

where u(t) is the unit step function. We assume that Ax = Ay = 1, T0 = 0.01 s, T1 = 2To, T2 = T1 + To, T = T2 + To and N = 210. The program is To = 0.01; T1 = 2*To; T2 = T1+To; Tend = T2+To; N = 2^10; deltaT = Tend/N; Ax = 1; Ay = 1; t = linspace(0, Tend, N); y(t)

x(t)

Ay

Ax

To Figure 5.7

t

Two rectangular pulses.

T1

T2

t

Section 5.5

MATLAB Functions that Require User-Defined Functions

201

0.01 0.009 0.008 0.007 0.006 0.005 0.004 0.003 0.002 0.001 0

0

Figure 5.8

0.005

0.01

0.015

0.02

0.025

0.03

0.035

0.04

Cross-correlation of two rectangular pulses of equal duration.

PulseCrossCorr = inline('ampl*(((t-Ts)>=0)-((t-Te)>0))', 't', 'Ts', 'Te', 'ampl'); x = PulseCrossCorr(t, 0, To, Ax); y = PulseCrossCorr(t, T1, T2, Ay); X = fft(x, N); Y = conj(fft(y, N)); Rxy = ifft(X.*Y*deltaT, N); plot(t, real(Rxy)) Execution of the script results in Figure 5.8. The function real removes residual imaginary parts due to numerical round-off errors.

5.5 MATLAB FUNCTIONS THAT REQUIRE USER-DEFINED FUNCTIONS MATLAB provides several functions that evaluate user-defined functions. The ones that we shall illustrate in this section are fzero roots quadl dblquad ode45

Finds one root of f(x) = 0 Finds the roots of a polynomial Numerically integrates f(x) in a specified interval Numerically integrates f(x, y) in a specified region Solves a system of ordinary differential equations with prescribed initial conditions

202

bvp4c dde23 fminbnd fsolve

Chapter 5

Function Creation and Selected MATLAB Functions

Solves a system of ordinary differential equations with prescribed boundary conditions Solves delay differential equations with constant delays and with prescribed initial conditions Finds a local minimum of f(x) in a specified interval Numerically solves a system of nonlinear equations

The last function, fsolve, is from the Optimization toolbox. When using these functions, the arguments of the user-defined functions and/or their output have to conform to specific requirements. These different requirements are illustrated in the following sections and are clearly specified in the Help file for that function. 5.5.1 Zeros of Functions—fzero and roots/poly There are many equations for which an explicit algebraic solution to f(x) = 0 cannot be found. In these cases, a numerical procedure is required. The function fzero is a function that finds numerically one solution to the real function f(x) = 0 within a tolerance to in either the neighborhood of xo or within the range [x1, x2]. It can also transfer pj, j = 1, 2, Á , parameters to the function defining f(x). The function f(x) must have a change of sign in the interval [x1, x2], otherwise an error message will result. The general expression is x = fzero(@FunctionName, x0, options, p1, p2, . . . ) where x is the value of x for which f(x) L 0, FunctionName is the name of the handle to a function file or subfunction, x0 = xo or x0 = [x1 x2], p1, p2, etc., are the parameters pj required by FunctionName, and options is set by using optimset The function optimset is a general parameter-adjusting function that is used by several MATLAB functions, primarily from the Optimization toolbox. See the Help file for optimset for the types of attributes that can be altered; they are dependent on the MATLAB function selected. The interface for the function required by fzero has the form function z = FunctionName(x, p1, p2, . . . ) Expressions z=... where x is the independent variable that fzero is changing in order to find a value such that f(x = z) ⬵ 0. The independent variable must always appear in the first location. This requirement is true for most user-defined functions that are created for evaluation by MATLAB functions and is true for all functions illustrated in this chapter. The function fzero can also be used with the anonymous function as fhandle = @(x, p1, p2, . . . ) (Expression); z = fzero(fhandle, x0, options, p1, p2, . . . )

Section 5.5

MATLAB Functions that Require User-Defined Functions

203

The function fzero can also be used with the inline function as InlineFunctionName = inline('Expression', 'x', 'p1', 'p2', . . . ); z = fzero(InlineFunctionName, x0, options, p1, p2, . . . ) We shall now illustrate the use of fzero with the goal of pointing out how to avoid making a poor choice of x0.The function f(x) can be either a MATLAB function or a user-defined function. Let us determine a root of cos(x) near x = 2p. Selecting a guess of x0 = 2p, the script w = fzero(@cos, 2*pi)/pi yields, upon execution, w= 1.5000

that is, cos(1.5p) = 0. However, when we change the initial guess slightly to x0 = 2.04p, the script becomes w = fzero(@cos, 2.04*pi)/pi which upon execution yields w= 2.5000

However, when x0 = 2.03p, the script w = fzero(@cos, 2.03*pi)/pi upon execution yields w= 1.5000

Thus, for multiple-valued functions, one should use the form x0 = [x1 x2] and specify the region explicitly. However, an error will result if the sign of f(x1) does not differ from the sign of f(x2). To show this, we rewrite the above script as w = fzero(@cos, [0, 2*pi])/pi When we execute this script, an error message is displayed saying that the values at the interval endpoints must differ in sign. However, when the interval is changed as given below, w = fzero(@cos, [0.6*pi, 2*pi])/pi we obtain upon execution w= 1.5000

Hence, for multi-valued functions whose properties are not known a priori, one should plot the function first to estimate the interval(s) where its zeros are or one should use the following function, which gives one way to determine the search

204

Chapter 5

Function Creation and Selected MATLAB Functions

regions for fzero automatically. This function determines the approximate locations of the change in signs in f(x), and thereby obtains the region [x1, x2]. This method is presented as an M-file so that it may be used with an arbitrary f(x). Its structure is similar to that used in ManyZeros, which was given in Section 5.3. function Rt = FindZeros(FunName, Nroot, x, w) f = feval(FunName, x, w); indx = find(f(1:end-1).*f(2:end)tzo yt(k) = yt(k)-inq(tau(k)-tzo, z, tzo); end end plot(tau, yt, 'k-', [0, tzo, 30], [0, 1, 1], 'k—') ri = interp1(yt, tau, A); disp(['y(' num2str(ri,4) ') = ' num2str(A)]) function a = arg(t, tau, z) a = t.*exp(-z*(tau-t)).*sin(sqrt(1-z^2)*(tau-t)); function in = inq(tau, z, tzo) in = quadl(@arg, 0, tau, [], [], tau, z)/sqrt(1-z^2)/tzo; Notice that we had to use interp1 to determine the time at which y(t) = 0.85 because y(t) is an array of numerical values. Upon execution, we obtain the results shown in Figure 5.10 and the following appears in the command window: y(12.99) = 0.85 1.4

1.2

1

0.8

0.6

0.4

0.2

0 0

5

10

15

20

25

30

Figure 5.10 Response of a single degree-of-freedom system to a ramp forcing.

Section 5.5

MATLAB Functions that Require User-Defined Functions

211

dblquad The function dblquad numerically integrates a user-provided function f(x, y) from a lower limit xl to an upper limit xu in the x-direction and from a lower limit yl to an upper limit yu in the y-direction to within a tolerance to. It can also transfer pj parameters to the function defining f(x, y). The general expression for dblquad is dq = dblquad(@FunctionName, xl, xu, yl, yu, t0, meth, p1, p2, . . . ) where FunctionName is the name of the function M-file or a subfunction, xl = xl, xu = xu, yl = yl, yu = yu, t0 = to (when omitted, the default value is used), p1, p2, etc., are the parameters pj, and when meth = [], quadl is the method used. When an anonymous function is used or a function is created by inline, then dq = dblquad(IorAFunctionName, xl, xu, yl, yu, t0, meth, p1, p2, . . . ) where IorAFunctionName is the name of the inline function or the anonymous function. The interface for the function file or subfunction has the form function z = FunctionName(x, y, p1, p2, ...) Expressions z= ... The interface for inline has the form IorAFunctionName = inline('Expression', 'x', 'y', 'p1', 'p2', ...) and that for the anonymous function is IorAFunctionName = @(x, y, p1, p2, ...) (Expression) We now illustrate the use of dblquad.

Example 5.13

Probability of two correlated variables

We shall numerically integrate the following expression for the probability of two random variables that are normally distributed over the region indicated: 2

P =

3

1 2p21 -

r2 3 3 -2 -3

e

-(x2 - 2rxy + y2)/2

If we assume that r = 0.5, then the script is r = 0.5; Arg = @(x, y) (exp(-(x.^2-2*r*x.*y+y.^2))); P = dblquad(Arg, -3, 3, -2, 2)/2/pi/sqrt(1-r^2) Upon execution, we obtain P= 0.6570

dxdy

212

Chapter 5

Function Creation and Selected MATLAB Functions

5.5.3 Numerical Solutions of Ordinary Differential Equations—ode45 MATLAB can numerically solve several different types of systems of ordinary differential equations depending on whether one is solving an initial value problem or a boundary value problem. In the initial value problem, the conditions at t = 0 (or x = 0) are prescribed. In the boundary value problem, the conditions at both ends of the domain are prescribed, say, at x = 0 and x = L. The initial value problem is solved with ode45 and the boundary value problem with bvp4c We shall discuss ode45 in this section and bvp4c in Section 5.5.4. A third type of ordinary differential equation that can be solved in MATLAB is called a delay differential equation; this equation is solved by using dde23 as discussed in Section 5.5.5. Lastly, a fourth type of equation is a one-dimensional parabolic-elliptic partial differential equation that is solved by using pdepe and is discussed in Section 5.5.6. There are six additional ordinary differential equation solvers in MATLAB that can be used to solve initial value problems, each of which has its advantages depending on the particular properties of the differential equations. They are ode23, ode113, ode15s, ode23s, ode23t, and ode23tb. Their use is the same as described for ode45. See the MATLAB users guide and their respective Help files for details. MATLAB recommends that one start the solution process with ode45. The function ode45 returns the numerical solution to a system of n first-order ordinary differential equations dyj dt

= fj (t, y1, y2, ..., yn) j = 1, 2, ..., n

over the interval t0 … t … tf subject to the initial conditions yj (t0) = aj, j = 1, 2, Á , n, where aj are constants. The arguments and outputs of ode45 are as follows: [t, y] = ode45(@FunctionName, [t0, tf], [a1, a2, . . . , an], options, p1, p2, . . . ) where the output t is a column vector of the times t0 … t … tf that are determined by ode45, the output y is the matrix of solutions such that the rows correspond to the times t and the columns correspond to the solutions; that is, y1(t) = y(:, 1) y2(t) = y(:, 2) ... yn(t) = y(:, n) The first argument of ode45 is @FunctionName, which is a handle to either a function file or a subfunction. Its form must be as follows: function yprime = FunctionName(t, y, p1, p2, . . . )

Section 5.5

MATLAB Functions that Require User-Defined Functions

213

where t is the independent variable, y is a column vector whose elements correspond to yj, p1, p2, Á are parameters passed to FunctionName, and yprime is a column vector of length n whose elements are fj (t, y1, y2, Á , yn), j = 1, 2, Á , n; that is, yprime = [ f1; f2; Á ; fn ] The variable names yprime, FunctionName, etc., are assigned by the programmer. The second argument of ode45 is a two-element vector giving the starting and ending times over which the numerical solution will be obtained. This quantity can, instead, be a vector of the times [t0 t1 t2 Á tf] at which the solutions will be given. The third argument is a vector of initial conditions yj(to) = aj. The fourth argument, options, is usually set to null; however, if some of the solution method tolerances are to be changed, one does this with odeset (see the odeset Help file). The remaining arguments are those that are passed to FunctionName. We now illustrate the usage of ode45 by considering the nondimensional second-order ordinary differential equation with constant coefficients d2y 2

dt

+ 2j

dy + y = h(t) dt

(5.3)

which is subjected to the initial conditions y(0) = a and dy(0)/dt = b. Equation (5.3) can be rewritten as a system of two first-order equations with the substitution y1 = y y2 =

dy dt

Then, the system of equations is dy1 = y2 dt dy2 = -2jy2 - y1 + h(t) dt with the initial conditions y1(0) = a and y2(0) = b. Let us consider the case where j = 0.15, y(0) = 1, dy(0)/dt = 0, and h(t) = sin(pt/5) 0 … t … 5 = 0 t 7 5 We are interested in the solution over the region 0 … t … 35. Then, y1(0) = 1, y2(0) = 0, t0 = 0, and tf = 35. We solve this system by creating a primary function called Exampleode and a subfunction called HalfSine. Then the program to solve the system of ordinary differential equations and to plot y(t) = y1(t) is function Exampleode [t, yy] = ode45(@HalfSine, [0 35], [1 0], [], 0.15); plot(t, yy(:,1))

214

Chapter 5

Function Creation and Selected MATLAB Functions

1.2 1 0.8 0.6 0.4 0.2 0 −0.2 −0.4 −0.6 −0.8

0

5

10

15

20

25

30

35

Figure 5.11 Response of Eq. (5.3) to the initial conditions y(0) = 1 and dy(0)/dt = 0, and when h(t) is a half sine wave.

function y = HalfSine(t, y, z) h = sin(pi*t/5).*(t etao-e) & (x < etao+e))/(2*e); dydx = [y(2); y(3); y(4); q]; function bc = BeamPointHingedBC(yL, yR, etao, e) bc = [yL(1); yL(3); yR(1); yR(3)]; Upon execution, we obtain the results plotted in Figure 5.17.

Section 5.5

MATLAB Functions that Require User-Defined Functions

0.025

227

0.1

0.02

0.05

0.015 0 0.01 −0.05

0.005 0 0

0.5

1

0

−0.1 0

0.5

1

0.5

1

0.5

−0.05 −0.1 0 −0.15 −0.2 −0.25 0

0.5

1

−0.5 0

Figure 5.17 Displacement, slope, moment, and shear force for a beam with a point load at h = 0.5.

Example 5.19

Displacement of an Euler beam with a step change in cross section

Let us assume that we have a simply supported beam of length L and that the beam is composed of two sections, one of length L1 and the other of length L2 such that L = L1 + L2. Each section of the beam is subjected to a load per unit length Pjqj(x), where j = 1, 2 and Pj is the magnitude of the load. From Eq. (5.4), the governing equations of these two beams are, respectively, E1I1 E2I2

d4w1 dx4 d4w2 dx4

= P1q1(x)

0 … x … L1

= P2q2(x)

L1 … x … L

If we define h = x/L, b = L1/L, and a =

E1I1P2 E2I2P1

ho =

P1L4 E1I1

then these equations can be written as d4y1 dh4 d4y2 dh4 where yj = wj/ho.

= q1(h) = aq2(h)

0 … h … b b … h … 1

228

Chapter 5

Function Creation and Selected MATLAB Functions

To solve these equations, we again use the “trick” of translating the coordinates of the second beam so that it is in the same region as that of the first beam and then solving the two equations as a system of equations coupled by their boundary conditions. In this case, the coordinate translation relation is z =

b (h - b) 1 - b

b … h … 1

so that 0 … z … b . Therefore, b d d = dh 1 - b dz

b … h … 1

The system of first-order equations is dw1 = w2 dh

(1 - b) dw5 = w6 dz b

dw2 = w3 dh

(1 - b) dw6 = w7 dz b

dw3 = w4 dh

(1 - b) dw7 = w8 dz b

dw4 = q1 dh

(1 - b) dw8 = a q2 dz b

The continuity conditions at h = b are that the displacements, slopes, moments, and shear forces are equal. The boundary conditions for a beam simply supported at h = 0 and h = 1 are that the displacements and moments are zero. We assume that a = 4.0 and b = 0.7 and take 0.05 as an initial guess for the eight unknown quantities and select five equally spaced locations. The program is function Example5_19 b = 0.7; alpha = 4; guess(1:8) = 0.05; solinit = bvpinit(linspace(0, b, 5), guess); beamsol = bvp4c(@BeamStepODEqo, @BeamStepBC, solinit, [], b, alpha); eta = linspace(0, b, 50); y = deval(beamsol, eta); for k = 1:4 subplot(2, 2, k) plot([eta (1-b)/b*eta+b], -[y(k,:) y(k+4,:)],'k-') hold on plot([0 1], [0 0], 'k—') end function dydx = BeamStepODEqo(x, y, b, alpha) dydx=[y(2); y(3); y(4); 1; (1-b)*y(6)/b; (1-b)*y(7)/b; (1-b)*y(8)/b; (1-b)/b*alpha]; function bc = BeamStepBC(yL, yR, b, alpha) bc = [yL(1); yL(3); yR(1)-yL(5); yR(3)-yL(7); yR(2)-yL(6); yR(4)-yL(8); yR(5); yR(7)]; Upon execution, we obtain the results plotted in Figure 5.18.

Section 5.5

MATLAB Functions that Require User-Defined Functions 0

229

0.1

−0.005

0.05

−0.01 0 −0.015 −0.05

−0.02 −0.025 0

0.5

1

−0.1 0

0.25

1

0.2

0.5

0.15

0

0.1

−0.5

0.05

−1

0 0

0.5

1

−1.5 0

0.5

1

0.5

1

Figure 5.18 Displacement, slope, moment, and shear force for a uniformly loaded beam with a step change in cross section.

Example 5.20 at both ends

Lowest natural frequency coefficient of an Euler beam clamped

The governing equation of an Euler beam undergoing harmonic oscillations at frequency v rad/s is12 EI

d4w - rAv2w = 0 0 … x … L dx4

where r is the mass density of the beam material and A is the cross-sectional area. If we introduce the quantities h = x/L and

Æ4 =

rAL4v2 EI

where Æ is a nondimensional frequency coefficient, then the governing equation becomes d4w - Æ 4w = 0 0 … h … 1 dh4 We will consider a beam clamped at both ends.Then, from Eq. (5.9b), the boundary conditions are w1(0) = 0 w1(1) = 0 w2(0) = 0 w2(1) = 0

12

Balachandran and Magrab, Vibrations, p. 564.

230

Chapter 5

Function Creation and Selected MATLAB Functions

The systems of first-order differential equations are similar to those given by Eq. (5.8) with q replaced by Æ 4w1, that is, dw1 = w2 dh

dw3 = w4 dh

dw2 = w3 dh

dw4 = Æ 4w1 dh

To use bvp4c to obtain the value of Æ requires a slightly different approach. First, bvp4c requires a “fifth” boundary condition, because there are five conditions to be specified: four homogeneous boundary conditions and a fifth condition that will permit the unknown parameter Æ to be determined. We shall choose the fifth condition as the nonzero boundary condition y4(0) = 0.05 . (The magnitude 0.05 is not critical, but it should be “small.”) Next, bvp4c requires a guess for the parameter Æ ; however, the solution is sensitive to this value. If it is too far from the desired region, one may get an answer that corresponds to different solution region. In addition, it is necessary to provide a guess that reasonably approximates the expected spatial shapes of the solutions, yj. In this example, the function that provides these spatial distributions is EulerBeamInit. The spatial distribution that was chosen is w1 = sin(ph) and wj, j = 2, 3, 4, are determined by straightforward differentiation of w1 . Lastly, the value of the parameter Æ is obtained by selecting the appropriate structure of the solution; in our case, it is called beamsol.parameters [beamsol is a name chosen by the programmer and is arbitrary; the suffix parameters is required]. We now illustrate this procedure with the following program: function Example5_20 Omguess = 4.0; solinit = bvpinit(linspace(0,1,6), @EulerBeamInit, Omguess); beamsol = bvp4c(@EulerBeamODE, @EulerBeamBC, solinit); Omega = beamsol.parameters; eta = linspace(0, 1, 50); y = deval(beamsol, eta); ModeShape = y(1,:)/max(abs(y(1,:))); % Normalized mode shape - not plotted disp(' Omega/pi = ' num2str(Omega/pi,6)]) function yinit = EulerBeamInit(x) yinit = [sin(pi*x); cos(pi*x); -sin(pi*x); -cos(pi*x)]; function bc = EulerBeamBC(w0, w1, Om) bc = [w0(1); w0(4)-0.05; w0(2); w1(1); w1(2)]; function dydx = EulerBeamODE(x, w, Om) dydx = [w(2); w(3); w(4); Om^4*w(1) ]; Execution of this program results in the following being displayed to the command window: Omega/pi = 1.50567

Section 5.5

MATLAB Functions that Require User-Defined Functions

231

5.5.5 Numerical Solutions of Delay Differential Equations—dde23 The function dde23 returns the numerical solution to a system of n first-order ordinary differential equations dyj dt

= fj (t, y1, y2, ..., yn,)

j = 1, 2, ..., n

over the interval t0 … t … tf and yj = yj (t, t - t1, t - t2, Á , t - tk), where tj are the delays (lags). The initial conditions (which for a delay equation is called its history) are given by yj(t0) = aj, j = 1, 2, Á , n, where aj are either constants or functions of t, and represent the state of the system for t … t0. At least one aj has to be nonzero. The arguments and outputs of dde23 are as follows: sol = dde23(@FunctionName, [t0, tf], [a1, a2, . . . , an], options, p1, p2, . . . ) where sol is a structure that contains the solution at a specific number of points that have been determined as part of the solution method used in dde23. As with bvp4c, in order to obtain a smooth curve one needs values at additional intermediate points. To provide these additional points, we use st = deval(sol, t) where t is a vector of times t0 … t … tf at which the solution is to be determined and sol is the output of dde23. The output st is an array containing the values of yj at the times t; that is, y1(t) = st(1,:) y2(t) = st (2,:) ... yn(t) = st (n,:) The first argument of dde23 is @FunctionName, which is a handle to either a function file or a subfunction. Its form must be as follows: function yprime = FunctionName(t, y, z, p1, p2, . . . ) where t is the independent variable, y is a column vector whose elements correspond to yj, z is a vector of lags or a function of time histories, p1, p2, Á are parameters passed to FunctionName, and yprime is a column vector of length n whose elements are fj(t, y1, y2, Á , yn), j = 1, 2, Á , n; that is, yprime = [ f1; f2; Á ; fn ] The variable names yprime, FunctionName, etc., are assigned by the programmer. We now illustrate the use of dde23 with the following example.

232

Chapter 5

Example 5.21

Function Creation and Selected MATLAB Functions

Machine tool chatter in turning

Consider the following equation, which describes the dynamic interaction between the work piece and a cutting tool’s displacement x in turning:13 d2x dx + A + Bx - Cx(t - 1/Æ) = 0 dt dt2 where A =

k1 k1 1 K + , B = 1 + , and C = m Q kÆ k k

and k1 is the cutting stiffness, m is the overlap factor, K is the penetration rate coefficient, k is the stiffness of the tool holder support, Q is the quality factor of the tool, Æ is a nondimensional rotational speed coefficient of the work piece, and t = vnt, where vn is the natural frequency of the tool. The quantity 1/Æ is the lag (delay). It has been shown that for certain combinations of systems and cutting parameters and work piece rotational speeds, there are regions where the system becomes unstable; that is, the displacement grows without limit as time progresses. We shall determine the response x for the following parameters, which have been shown to produce an unstable response: m = 1, K/k = 0.0029, k1/k = 0.0785, Q = 20, and Æ = 0.225. We shall assume that prior to the start of the onset of chatter y1(t … 0) = 0.1 and y2(t … 0) = 0.1. Finally, we shall examine the solution over the range 0 … t … 300. The two first-order equations are dy1 = y2(t) dt dy2 = -Ay2(t) - By1(t) + Cy1(t - 1/Æ) dt The program to determine the response is function Example5_21 Om = 0.225; Q = 20; mu = 1; Kk = 0.0029; k1k = 0.0785; B = 1+k1k; C = mu*k1k; A = 1/Q+Kk/Om; sol = dde23(@Chatterode, 1/Om, [0.1; 0.1], [0, 300], [], A, B, C); tau = linspace(0, 300, 700); y = deval(sol, tau); plot(tau, y(1,:), 'k-') function der = Chatterode(t, y, Z, A, B, C) ylag1 = Z(:, 1); der = [y(2); -A*y(2)-B*y(1)+C*ylag1(1)]; The execution of this program results in Figure 5.19.

13

Ibid., p. 165ff.

Section 5.5

MATLAB Functions that Require User-Defined Functions

233

0.5 0.4 0.3 0.2 0.1 0 −0.1 −0.2 −0.3 −0.4 −0.5 0

50

100

150

200

250

300

Figure 5.19 Machine tool chatter in turning: response in unstable operating region.

5.5.6 Numerical Solutions of One-Dimensional Parabolic-Elliptic Partial Differential Equations—pdepe The function pdepe obtains the numerical solution to the partial differential equation c(x, t, u, 0u/0x)

0u 0 = x-m A xm f(x, t, u, 0u/0x) B 0t 0x + s(x, t, u, 0u/0x) m = 0, 1, or 2

(5.10)

where u = u(x, t), a … x … b, to … t … tend, the initial condition is u(x, t0) = u0 (x)

(5.11)

and the boundary conditions at x = a and x = b are, respectively, pa (a, t, u) + qa (a, t) f (a, t, u, 0u/0x) = 0 pb (b, t, u) + qb (b, t) f (b, t, u, 0u/0x) = 0

(5.12)

The function pdepe is invoked with sol = pdepe(m, @pdeID, @pdeIC, @pdeBC, x, t, options, p1, p2, ...) where m = 0, 1, or 2 and defines the coordinate system with 0 corresponding to a Cartesian system, 1 to a cylindrical system, and 2 to a spherical system, x is a vector of values for which pdepe will provide the corresponding values of u such that x(1) = a and x(end) = b, t is a vector of values for which pdepe will provide the

234

Chapter 5

Function Creation and Selected MATLAB Functions

corresponding values of u such that t(1) = to and t(end) = tend, p1, p2, Á are parameters that are passed to pdeID, pdeIC, and pdeBC (they must appear in each of these functions whether or not they are used by that function), and options is set by odeset. The quantity sol ( = u(t,x)) is an array sol(i,j), where i is the element number of the temporal mesh and j is the element number of the spatial mesh. Thus, sol(i,:) approximates u(t,x) at time ti at all mesh points from x(1) = a to x(end) = b. The function pde1D specifies c, f, and s in Eq. (5.10) as follows: function [c, f, s] = pde1D(x, t, u, dudx, p1, p2, ... ) c= Á; f= Á; s= Á; where dudx is the partial derivative of u with respect to x and is provided by pdepe. The function pdeIC specifies uo(x) in Eq. (5.11) as follows: function uo = pdeIC(x, p1, p2, ... ) uo = ; The function pdeBC specifies the elements pa, qa, pb, and qb, of the boundary conditions in Eq. (5.12) as follows: function [pa, qa, qb, pb] = pdeBC(xa, ua, xb, ub, t, p1, p2, ... ) pa = Á ; qa = Á ; pb = Á ; qb = Á ; where ua is the current solution at xa = a and ub is the current solution at xb = b. To illustrate the use of pdepe, we consider the following equation that describes one-dimensional heat conduction in a slab with a heat source:14 0u 0 2u = + © 0t 0j2

(5.13)

where all the quantities are nondimensional. The corresponding initial condition is u(j, 0) = 1-0.45j

(5.14)

and the boundary conditions are 0u = Biu(0, t) ` 0j j = 0 u(1, t) = u1

(5.15)

where Bi is a constant called the Biot number and u1 is a constant. Comparing Eq. (5.13) with Eq. (5.10), we see that c = 1, f = 0u/0j, and s = © and on comparing Eqs. (5.11) with (5.14), we find that uo(x) : 1 - 0.45j. We note 14

See Section 12.1.3 for additional details concerning this equation and its solution. Other examples of the use of pdepe can be found in Sections 11.2.1, 11.5, 12.1.3, 12.2.1, 14.1.1, 14.2.4, and 14.2.6.

Section 5.5

MATLAB Functions that Require User-Defined Functions

235

that the boundary conditions are specified at a = 0 and b = 1; therefore, on comparing Eq. (5.12) with (5.15), we have, qa = 1 and pa = -Biu(0, t) and qb = 0 and pb = u(1, t) - u1. We assume that Bi = 0.1, u1 = 0.55, and © = 1. We also note that in the arguments of pdeBC, ua = u(0, t) and ub = u(1, t), which are provided by pdepe. The numerical solutions to Eqs. (5.13)–(5.15) are obtained using the following program: function pdepeExample Bi = 0.1; T1 = 0.55; Sigma = 1; xi = linspace(0, 1, 25); tau = linspace(0, 1, 101); theta = pdepe(0, @pde1D, @pdeIC, @pdeBC, xi, tau, [], Bi, T1, Sigma); hold on for kk = 1:5:length(zi) plot(tau, theta(:, kk), 'k-') end function [c, f, s] = pde1D(x, t, u, DuDx, Bi, Tr, Sigma) c = 1; f = DuDx; s = Sigma; function T0 = pdeIC(x, Bi, Tr, Sigma) T0 = 1-0.45*x; function [pl, ql, pr, qr] = pdeBC(xl, ul, xr, ur, t, Bi, Tr, Sigma) pr = ur-Tr; qr = 0; pl = -Bi*ul; ql = 1; The execution of this program results in Figure 5.20, which is a plot of u as a function of t for j = 0.0, 0.25, 0.5, 0.75, and 1.0; the top curve corresponds to j = 0 and the bottom curve to j = 1. 5.5.7 Local Minimum of a Function—fminbnd The function fminbnd finds a local minimum of the real function f(x) in the interval a … x … b within a tolerance to. It can also transfer pj, j = 1, 2, Á , parameters to the function defining f(x). The general expression for fminbnd is [xmin fmin] = fminbnd(@FunctionName, a, b, options, p1, p2, . . . ) where FunctionName is the name of the function or subfunction, a = a, b = b, options is an optional vector whose parameters are set with optimset (see the Help file for optimset), and p1, etc., are the parameters pj. The quantity xmin is the value of x at which FunctionName is a minimum and fmin is the value of FunctionName at xmin. The interface for FunctionName has the form function z = FunctionName(x, p1, p2, . . . ) Expression(s) z= ...

236

Chapter 5

Function Creation and Selected MATLAB Functions

1 0.95 0.9 0.85 0.8 0.75 0.7 0.65 0.6 0.55 0.5 0

0.2

0.4

0.6

0.8

1

Figure 5.20 Temperature distributions in a slab as a function of time for several values of position.

where x is the independent variable that fminbnd is varying in order to determine where the minimum of f(x) occurs. The independent variable must always appear in the first location. When f(x) is an expression that can be represented by inline or by an anonymous function with the name IorAFunctionName, fminbnd is accessed as follows: [xmin, fmin] = fminbnd(IorAFunctionName, a, b, options, p1, p2, . . . ) We shall now illustrate the use of fminbnd. Consider the MATLAB demonstration function humps, which is shown in Figure 5.21. The minimum value of the function between 0.5 … x … 0.8 is determined from the script [xmin, fmin] = fminbnd(@humps, 0.5, 0.8) Upon execution, we obtain xmin = 0.6370 fmin = 11.2528

Thus, the minimum in the interval 0.5 … x … 0.8 occurs at x = 0.6370 where the magnitude of the function is 11.253. If, on the other hand, we want to find the maximum value of humps in the interval 0 … x … 0.5 and where it occurs, then we have to recognize that fminbnd must operate on the negative or the reciprocal of the function humps.Thus, we use inline to create a function that computes the negative of humps in this region. The script is

Section 5.5

MATLAB Functions that Require User-Defined Functions

237

100 Max = 96.5014 at x = 0.30038 80

Total area = 26.345

humps(x)

60

40 2nd max = 21.7346 at x = 0.89273

20

0

−20 −1

humps = 0 at x = −0.13162

Local min = 11.2528 at x = 0.63701 humps = 0 at x = 1.2995

−0.5

0

0.5 x

1

1.5

2

Figure 5.21 Properties of MATLAB’s demonstration function humps.

[xmax, fmax] = fminbnd(inline('-humps(x)', 'x '), 0, 0.5); disp(['Maximum value of humps in the interval 0 0 (default: 0.5) Number > 0 (default: 10) 'Courier' 'Helvetica' (default) 'Times' (similar to Times roman) 'Letter from 2nd column of Table 6.2' 'Normal' (default) 'Bold'

'Color' 'FontWeight'

302

Chapter 6

2D Graphics

TABLE 6.13 Keywords and Attributes for legend Handles

Handle name

Keyword

Keyword value

Attribute affected

a(1) a(1)

'LineWidth' 'Color'

Thickness of legend box edges Background color of legend box

b(1), b(2) b(1), b(2)

'FontSize' 'FontName'

b(1), b(2)

'Color'

Number > 0 (default: 0.5) 'Letter from 2nd column of Table 6.2' Number > 0 (default: 10) 'Courier' 'Helvetica' (default) 'Times' (Times roman) 'Letter from 2nd column of Table 6.2'

Font size of legend text Font type of legend text

Color of legend text

x = linspace(0, 6, 100); plot(x, cos(x), 'k-', x, 1./cosh(x), 'k--', [4.73, 4.73], [-1, 1], 'k') xlabel('x') ylabel('Amplitude') title('Visualization of two intersecting curves') text(4.8, -0.1, 'x = 4.73') [a, b] = legend('cos(\itx\rm)', '1/cosh(\itx\rm)', 'Location', 'SouthWest'); set(a(1), 'LineWidth', 2, 'Color', 'y') set(b(1), 'fontsize', 14, 'Color', 'b') set(b(2), 'fontsize', 14, 'Color',' r') The results of the execution of this script are shown in Figure 6.18. Again returning to the script that generated Figure 6.15, we shall make the following alterations to the figure: Title: 14 pt Courier, bold face x-axis label: 14 pt Times Roman, italic, and bold face y-axis label: 14 pt Helvetica Placed text: 12 pt standard mathematical notation Axes lines: 1.5 pt wide Axes text: 14 pt Helvetica Curve for cos(x): 4 pt line width Curve for cosh(x): 2.5 pt line width Vertical line at x = 4.73: 0.25 line width, green

TABLE 6.14 Keywords and Attributes for Lines

Keyword

Keyword value

'Linewidth' 'Color'

Number > 0 (default: 0.5) 'Letter from 2nd column of Table 6.2'

Section 6.3

Graph Annotation and Enhancement

303

Visualization of two intersecting curves 1 0.8 0.6

Amplitude

0.4 0.2 0 x = 4.73 −0.2 −0.4 −0.6 −0.8 −1 0

cos(x) 1/cosh(x) 1

2

3 x

4

5

6

Figure 6.18 Alteration of the attributes of legend.

The revised script is x = linspace(0, 6, 100); hc = plot(x, cos(x), 'k-'); hold on hch = plot(x, 1./cosh(x), 'k–'); hsl = plot([4.73, 4.73], [-1, 1], 'k'); [a, b] = legend('cos(x) ', '1/cosh(x) ', 'Location', 'SouthWest'); xlabel('\it\bfx', 'FontSize', 14, 'FontName', 'Times') ylabel('Value of functions', 'FontSize', 14) title('\bfVisualization of two intersecting curves', 'FontName', Á 'Courier', 'FontSize', 14) text(4.8, -0.1, '\itx \rm= 4.73','FontName', 'Times', 'FontSize', 12) set(hc, 'LineWidth', 4) set(hch, 'LineWidth', 2.5) set(hsl, 'LineWidth', 0.25, 'color', 'g') set(gca, 'FontSize', 14, 'LineWidth', 1.5) set(b(1), 'FontSize', 10) The execution of this script results in Figure 6.19. (Disclaimer: This graph was created to illustrate how to modify various attributes of its constitutive components. It violates the goals mentioned in Section 6.1, for the changes clearly do not enhance the clarity of the graph.)

304

Chapter 6

2D Graphics

Visualization of two intersecting curves 1 0.8 0.6

Value of functions

0.4 0.2 0 x = 4.73

−0.2 −0.4 −0.6 −0.8

cos(x) 1/cosh(x)

−1 0

1

2

3 x

4

5

6

Figure 6.19 Alteration of several of the attributes of Figure 6.15.

6.3.6 Positioning One Figure Inside Another Figure In certain situations, it may be desirable to insert one or more independent figures within a main figure. This insertion is accomplished with axes('Position', [left, bottom, width, height]) where Position is a keyword and [left, bottom, width, height] is a four-element vector that defines the dimensions and position of a rectangular region that is inserted in the main figure as shown in Figure 6.20. The values for these four quantities range from 0 to 1 as indicated in the figure. All plotting commands that follow axes pertain to the inserted figure. The use of axes to insert an additional figure is illustrated in the following example: 1 Main figure Inserted figure

height bottom

width

0 0

left

1

Figure 6.20 Coordinate system definitions for positioning a figure inside a main figure.

Section 6.3 Example 6.1

Graph Annotation and Enhancement

305

Response of a single degree-of-freedom system to periodic forcing

We shall illustrate axes by displaying the nondimensional displacement response x(t) of a single degree-of-freedom system subjected to a periodic pulse of period T and pulse duration td in the main figure and the amplitude of the frequency response function H(Æ) of the system in an inserted figure. If the natural frequency of the system is vn, then the governing relations are7 q

x(t) = a c1 + 2 a H(Æ k) ` k=1

sin (kpa) ` sin (Æ kt - u(Æ k) + ck) d kpa

where a = td/T 6 1, Æ k = kÆ o, Æ o = vo/vn, vo = 2p/T,

H(Æ k) =

1

2 2 2 4 A 1 - Æ k B + A 2zÆ k B

u(Æ k) = tan - 1 ck = tan - 1

2zÆ k 1 - Æ 2k sin(kpa)>kpa 0

and z 6 1 is the damping factor. If we take 200 terms of the series, and assume that z = 0.1, Æ o = 0.03 12, -50 … t … 120, and a = 0.4, then the script is k = 1:200; alph = 0.4; xi = 0.1; Omo = 0.03*sqrt(2); N = 400; HOm = inline('1./sqrt((1-(Om*k).^2).^2+(2*xi*Om*k).^2)', 'k', 'Om', 'xi'); tau = linspace(-50, 120, N); sn = sin(pi*k*alph)./(pi*k*alph); thn = atan2(2*xi*Omo*k, (1-(Omo*k).^2)); psi = atan2(sn, 0); cnt = sin(Omo*k'*tau-repmat(thn', 1, N)+repmat(psi', 1, N)); z = alph*(1+2*abs(sn).*HOm(k, Omo, xi)*cnt); plot(tau, z, 'k-') a = axis; a(1) = -50; a(2) = 120; axis(a) xlabel('\tau') ylabel('x(\tau)') axes('Position', [0.62, 0.62, 0.25, 0.25]) semilogy(k*Omo, HOm(k, Omo, xi), 'k-') ylabel('H(\Omega)') xlabel('\Omega') box off The execution of this script results in Figure 6.21. The determination of the values for left and bottom takes a little experimenting.

7

Balachandran and Magrab, Vibrations, p. 260ff.

306

Chapter 6

2D Graphics

2 2

10 H(Ω)

1.5

1

0

10

−2

x(τ)

10

0

5 Ω

10

0.5

0

−0.5

−1

−40

−20

0

20

τ

40

60

80

100

120

Figure 6.21 Illustration of the use of the position option of axes.

6.3.7 Interactive Plotting Tools The changes to the attributes of the text, curves, and axes can also be made interactively in the figure window by selecting the appropriate operation from its Tools menu.After the changes have been made, the figure can be saved as a function M file. We shall illustrate how to use these interactive tools by using them to make a few modifications to the following program: x = linspace(-1, 2, 150); plot(x, humps(x), 'k-', [-1, 2], [0, 0], 'b-') The execution of this program results in Figure 6.22a. By clicking on the Show Plot Tools icon, the figure window becomes that shown in Figure 6.22b. To insert a label for the x-axis, we click on Insert and select X Label. Then we type in ‘t (time)’ as shown in Figure 6.23a. The text property menus appear and they can be used to alter such text properties as font style and size and normal, bold, or italic. By clicking on the horizontal line, the line properties menus are displayed and the line properties can be altered as shown in Figure 6.23b. In a similar manner, other characteristics of the graph can be changed by adding lines, shapes, a legend, and text boxes. When completed, the resulting graph can be saved as a function M file by going to the File pull-down menu and selecting Generate M-file.

Section 6.3

Graph Annotation and Enhancement

307

Show Plot Tools icon

(a)

(b)

Figure 6.22 (a) Window resulting from the execution of a program that plots humps. (b) Window resulting from clicking on the Show Plot Tools icon.

6.3.8 Animation Another way to enhance a graph is through animation, which in MATLAB means creating a movie. The two functions that are used to create a movie are A(k) = getframe

The properties of the x-axis label can be altered by using these menus.

(a)

Clicking on this line brings up these menus, which can be used to alter the properties of the line.

(b)

Figure 6.23 (a) Means by which an x-axis label can be inserted interactively. (b) Means by which line properties can be altered interactively.

308

Chapter 6

2D Graphics

which captures the kth movie frame of a total of N frames and movie(A, nF, pbs) which is used to play nF times the N frames captured in the matrix A by getframe. This function plays the movie at a playback speed pbs, which, if omitted, uses a default value of twelve frames per second. To create a movie in the avi (audio/video interleaved) format from the movie created by movie, one uses movie2avi(A, 'FileName.avi', 'KeyWord', 'KeyWordValue'); The variable A is the variable used in movie. To create movies that can be shown in Microsoft PowerPoint, we set 'KeyWord' = 'compression' and 'KeyWordValue' = 'none'. The use of these commands is illustrated in the following example. Example 6.2

Animation of a slider–crank mechanism

We shall illustrate the animation procedure by considering a slider–crank mechanism given in Figure 2.7 of Exercise 2.9 and, at the end, create a movie file in the avi format that can be used in, say, a Microsoft PowerPoint slide. The starting configuration of the slider–crank mechanism is shown in Figure 6.24. The procedure requires that each component of the image must be replicated, even those components that do not change. From Figure 6.24, we see that we must create the following stationary objects: the thin horizontal bar of thickness f that represents the ground, the dashed circle that indicates the circle traversed by the end of the crank arm a, and the center of the circle represented by a small circle. The moveable elements are the crank arm a, the crank arm b, the rectangle that represents the slider, and the two small circles that indicate a connection between a and b and between b and the slider. The horizontal distance that the slider moves as a function of the rotation angle w of the crank arm a is s = a cos w + 2b2 - (a sin w - e)2 We shall assume the following numerical values: 0 … w … 2p at n = 40 equally spaced positions, a = 1, b = 2.5, e = 0.25, c = 0.5, d = 1, and f = 0.06. The number of times that the forty frames is to be repeated (played over) is 5 (= nF). n = 40; phi = linspace(0, 2*pi, n); a = 1; b = 2.5; e = 0.25; nF = 5; c = 0.5; d = 1; f = 0.06; ax = a*cos(phi); ay = a*sin(phi); s = real(ax+sqrt(b^2-(ay-e).^2));

d ϕ

c

e a

b

f

s Figure 6.24 Slider–crank starting position and definitions of its components.

Section 6.4

Examples

309

Figure 6.25 Slider–crank mechanism in it seventh position (image of the seventh frame).

v = [1.1*min(ax), 1.1*(max(s)+d/2) 1.1*min(ay), 1.1*max(ay)]; xgnd = [min(ax), max(s)+d/2, max(s)+d/2, min(ax), min(ax)]; ygnd = [e, e, e-f, e-f, e]; slidery = [e, e+c, e+c, e, e]; % Vertical component of slider is constant for k = 1:n fill(xgnd, ygnd, 'r') % Thin horizontal bar hold on plot(ax, ay, 'b--', 0, 0, 'ko'); % Dashed circle and center of circle sliderx = [s(k)-d/2, s(k)-d/2, s(k)+d/2, s(k)+d/2, s(k)-d/2]; fill(sliderx, slidery, 'm'); % Slider position plot([0 ax(k)], [0;ay(k)], 'ko-', 'LineWidth', 2); plot([ax(k), s(k)], [ay(k), e+c/2], 'ko-', 'LineWidth', 2); axis(v) axis off equal SliderCrankFrame(k) = getframe; hold off end movie(SliderCrankFrame, nF, 30) movie2avi(SliderCrankFrame, 'SliderCrankAvi.avi', 'compression', 'none') The seventh frame that is produced by the execution of this program is shown in Figure 6.25.

6.4 EXAMPLES The following examples are chosen to illustrate various plotting techniques that can be used to express a wide variety of results in different ways. They build on the various capabilities that were introduced in the preceding sections of this chapter. Example 6.3

Polar plot: far field radiation pattern of a sound source

The normalized sound pressure at a large distance from the center of a circular piston in an infinite baffle that is oscillating at a frequency f is given by p(r, u) = `

J1(kau) ` kau

ka2 V r and a V r

310

Chapter 6

2D Graphics

where r is the radial distance from the center of the piston, u is the angle of r with respect to the plane of the baffle, k is the wave number, a is the radius of the piston, and J1(x) is the Bessel function of the first kind of order 1. The wave number is the reciprocal of the wavelength of the sound at frequency f; thus, ka is non dimensional. This model is a fair approximation to the angular dispersion of sound from a loudspeaker. We shall create a polar plot of the normalized radiation pattern for ka = 6p when u ranges from -p/2 6 u 6 p/2. We have chosen this solution to illustrate the use of polar, which plots results directly in polar coordinates. The script is theta = linspace(-pi/2, pi/2, 300); p = abs(besselj(1, 6*pi*theta)./(6*pi*theta)); polar(theta, p/max(p)) The execution of the script gives the curve shown in Figure 6.26a. Notice that the values of u are chosen so that kau Z 0. The max function finds the maximum value in the vector p so that the ratio p/max(p) is the normalized radiation pattern whose maximum value is 1. To magnify the region in the vicinity of r 6 0.1, we have two options. The first is to depress the Zoom In icon in the figure window and zoom in on this region. The other option is to use axis, which is the option that we shall employ. If we type v = axis in the command window immediately after the script is run, we find that v= -1.0000

1.0000

-1.1500

1.1500

Thus, the limits of the x-axis are ;1 and those for the y-axis are ;1.15. Therefore, we can crop the view in Figure 6.25a by using axis([-.02, 0.15, -0.05, 0.05]) Then, the modified script becomes theta = linspace(-pi/2, pi/2, 300); p = abs(besselj(1, 6*pi*theta)./(6*pi*theta)); polar(theta, p/max(p)) axis([-.02, 0.15, -0.05, 0.05]) which upon execution gives the result shown in Figure 6.26b. 90

1 0.8

120

60

0.6

150

30

0.4 0.2

180

0

330

210 300

240 270 (a)

(b)

Figure 6.26 (a) Polar representation of a radiation pattern. (b) Magnified region obtained by redefining axes limits with axis.

Section 6.4 Example 6.4

Examples

311

Displaying and labeling multiple curves: notch sensitivity for steel

We now return to Example 5.1 and plot the notch sensitivity constant q over a range of values for 0.3 … Su … 1.7 GPa and 0.1 6 r 6 5 mm. To make the script a little more readable, we create a function for the data that are to be fitted. We shall create a script that consists of two parts.The first part obtains the values of the coefficients of the fourthorder polynomial used to fit these data, and then displays the data points and the polynomial that fits these points. The second part uses the polynomial to generate a family of curves of notch sensitivity q versus the notch radius for several values of the ultimate strength of steel, Su. The execution of the script results in Figures 6.27a and 6.27b. function Example6_4 Su = linspace(0.34, 1.72, 50); skip = [1, 3, 6, 8, 11]; ncs = NeuberData; L = length(skip); p = polyfit(ncs(:,1), ncs(:,2), 4); figure(1) plot(Su, polyval(p, Su), 'k', ncs(:,1), ncs(:,2), 'ks') xlabel('\itS_u') ylabel('\surd\ita') figure(2) [s, r] = meshgrid(ncs(skip,1), linspace(0.1, 5, 80)); notch = inline('1./(1+polyval(p, s)./sqrt(r))', 'p', 's', 'r'); plot(r, notch(p, s, r), 'k') y(1:L,1) = 1; lab = [repmat('\itS_u= \rm', L, 1) num2str(ncs(skip,1))]; text(repmat(1, 1, L), notch(p, ncs(skip,1), y)-0.03, lab) xlabel('\itr') ylabel('\itq') function nd = NeuberData nd = [0.34, 0.66; 0.48, 0.46; 0.62, 0.36; 0.76, 0.29; 0.90, 0.23; 1.03, 0.19; . . . 1.17, 0.14; 1.31, 0.10; 1.45, 0.075; 1.59, 0.050; 1.72, 0.036];

0.7

1

0.6

0.9

S = 1.72

0.8

0.4

0.7

S = 1.03 u

Su= 0.62

q

√a

0.5

u

Su= 1.31

0.3

0.6

0.2

0.5

0.1

0.4

0 0.2

0.4

0.6

0.8

1

S

u

(a)

1.2

1.4

1.6

1.8

0

Su= 0.34

1

2

3

4

5

r

(b)

Figure 6.27 (a) Neuber’s constant for steel using a fourth-order polynomial fit. (b) Notch sensitivity for steel as a function of notch radius r for different values of ultimate strength.

312

Chapter 6

2D Graphics

The meshgrid function creates two (80 * 6) arrays, where the rows are the values of r and the columns are the values of Su. Since notch was written using the dot notation, we can enter these arrays for their appropriate arguments.The placing of the curve’s identifying labels is done with text and using the y-coordinate that is obtained from evaluating notch at r = 1 shifted down by 0.03 units.We use repmat to create vectors of values or strings of length L. We select the values of Su with the vector of indices given in skip.

Example 6.5

Stability of a loaded structure

The static equilibrium position of an imperfection-sensitive structural model similar to that shown in Figure 5.26 is determined from8 p =

cotu A 11 + sin u - 11 + sin u0 B 11 + sin u

where uo is the amount of angular imperfection of the structure. For a given value of uo, the value of u - uo at which p has a maximum value is that value at which the system becomes unstable; that is, for u - uo 6 u max - uo the system is stable and for those values for which u - uo 7 u max - uo the system is unstable. We shall use these requirements to create Figure 6.28, which depicts these ideas graphically. function Example6_5 tho = [0.001, 0.005, 0.01, 0.02]; th = linspace(0.01, 0.2, 200); thmx = zeros(1, length(tho)); for k = 1:length(tho) thmx(k) = fminbnd(@prev, 0.01, 0.18, [], tho(k)); indx = find(thF 0 0.002 0.0186

Thus, based on the p-values, we see that factors A and B are statistically significant at the greater than 99.8% level and that their interaction is significant at the 98% level. The statistically significant interaction is also apparent in Figure 8.17, where we see that level B2 strongly interacts with levels A1 and A3. 160 B1

Average response

140

120

B2

100

80

60 B 40 A1

3

A2 Levels of A

A3

Figure 8.17 Average responses of the variables in a two-factor ANOVA using the data in Table 8.14.

Section 8.6

Design of Experiments

Example 8.13

423

Three-factor analysis of variance: stiffness of fiberglass–epoxy beams

A series of tests were conducted to determine the manufacturing conditions that produce the stiffest fiberglass and epoxy composite beams when the beam is subjected to a threepoint bending load.The manufacturing conditions are determined by running a three-factor, single replicate, full factorial experiment, which resulted in twenty-seven different manufacturing combinations. The three factors are (1) the fiberglass fabric orientation; (2) epoxy resins from three manufacturers, with each resin having the same nominal strength characteristics; and (3) the amount of the hardener (curing agent) provided by each manufacturer and used with their epoxy resin. Twenty-seven beams were fabricated under twenty-seven different combinations of these manufacturing conditions and the measured results are tabulated in Table 8.15.These data are analyzed using anovan, which creates the ANOVA table, and maineffectsplot, which plots the main effects irrespective of whether or not they are statistically meaningful.The arguments of these two functions are illustrated in the following script.They are somewhat self-explanatory when examined in the context of Table 8.15.The program that analyzes these results and plots the main effects is EX = [ 3.16, 3.986, 0.376]*10^4; EY = [4.82, 4.80, 4.41]*10^4; EZ = [4.08, 3.82, 3.87]*10^4; FX = [2.52, 2.12, 1.48]*10^4; FY = [3.20, 3.97, 3.38]*10^4; FZ = [2.98, 2.76, 3.79]*10^4; GX = [2.26, 1.57, 1.99]*10^4; GY = [2.21, 3.69, 2.54]*10^4; GZ = [2.72, 2.45, 2.67]*10^4; g1={'E'; 'E'; 'E'; 'E'; 'E'; 'E'; 'E'; 'E'; 'E'; . . . 'F'; 'F'; 'F'; 'F'; 'F'; 'F'; 'F'; 'F'; 'F'; . . . 'G'; 'G'; 'G'; 'G'; 'G'; 'G'; 'G'; 'G'; 'G'}; g2 = {'X'; 'X'; 'X'; 'Y'; 'Y'; 'Y'; 'Z'; 'Z'; 'Z'; . . . 'X'; 'X'; 'X'; 'Y'; 'Y'; 'Y'; 'Z'; 'Z'; 'Z'; . . . 'X'; 'X'; 'X'; 'Y'; 'Y'; 'Y'; 'Z'; 'Z'; 'Z'}; g3 = {'L'; 'M'; 'N'; 'L'; 'M'; 'N'; 'L'; 'M'; 'N'; . . . 'L'; 'M'; 'N'; 'L'; 'M'; 'N'; 'L'; 'M'; 'N'; . . . 'L'; 'M'; 'N'; 'L'; 'M'; 'N'; 'L'; 'M'; 'N'}; g = [EX'; EY'; EZ'; FX'; FY'; FZ'; GX'; GY'; GZ']; anovan(g, {g1 g2 g3}, 'model', 'interaction', 'varnames', . . .

TABLE 8.15 Measured Stiffness (N/m) for the Twenty-Seven Manufacturing Combinations

Resin system

L

Fiber orientation E

Fiber orientation F

Fiber orientation G

Hardener ratio

Hardener ratio

Hardener ratio

M

N

L

M

N

L

M

N

X

31.6 * 103 39.8 * 103 3.7 * 103 25.2 * 103 21.2 * 103 14.8 * 103 22.6 * 103 15.7 * 103 19.9 * 103

Y

48.2 * 103 48.0 * 103 44.1 * 103 32.0 * 103 39.7 * 103 33.8 * 103 22.1 * 103 36.9 * 103 25.4 * 103

Z

40.8 * 103 38.2 * 103 38.7 * 103 29.8 * 103 27.6 * 103 37.9 * 103 27.2 * 103 24.5 * 103 26.7 * 103

424

Chapter 8

Engineering Statistics

4

x 10 3.6 3.4

mean

3.2 3 2.8 2.6 2.4 2.2 E

F G Orientation

X Y Z Resin system

L

M N Hardener

Figure 8.18 Main effects as created by maineffectsplot for the data in Table 8.15.

{'Orientation', 'Resin system', 'Hardener'}); maineffectsplot(g, {g1 g2 g3}, 'varnames', {'Orientation', 'Resin system', 'Hardener'}) The execution of these results produces the following table in its own figure window and the plot of the main effects shown in Figure 8.18. Source Orientation Resin system Harder Orientation*Resin system Orientation*Hardener Resin system*Hardener Error Total

Sum Sq. 7.16541e+008 1.08347e+009 1.29835e+008 1.2881e+008 1.82203e+008 3.54323e+008 3.59e+008 2.95418e+009

d.f. 2 2 2 4 4 4 8 26

Mean Sq. 3.58271e+008 5.41736e+008 6.49174e+007 3.22025e+007 4.55508e+007 8.85808e+007 4.48749e+007

F 7.98 12.07 1.45 0.72 1.02 1.97

Prob>F 0.0124 0.0038 0.2909 0.6032 0.4543 0.1916

We see that the fiber orientation and the resin system are the main factors that are statistically significant and that none of the interaction effects is statistically significant.

2k Factorial Experiments If the factorial experiments described above contain k factors and each factor is considered at only two levels, then the experiment is called a 2k factorial design. It implicitly assumes that there is a linear relationship between the two levels of each factor. This assumption leads to certain simplifications in how the tests are conducted and how the results are analyzed.

Section 8.6

Design of Experiments

425

The convention is to denote the value of the high level of a factor with either “1” or “ + ,” and the value of the low level either “0” or “ - .” Then the 2k combination of factors that comprise one run, which represents one replicate, is given in Table 8.16 for k = 2, 3, and 4. The table is used as follows. For the 22 (k = 2) factorial experiment, only the columns labeled A and B and the first four rows (m = 1, Á , 4) are used. The four combinations of the factors are run in a random order. One such random order is shown in the column labeled 22. Thus, the combination in row 2 is run first, with A high (Ahigh) and B low (Blow). This yields the output value y2,1. Then the combination shown in the fourth row is run, where both A and B are at their high levels (Ahigh and Bhigh, respectively). This gives the output response y4,1. After the remaining combinations have been run, one replicate of the experiment has been completed. A newly obtained random order for the run is obtained, one that is most likely different from the one shown in the column labeled 22, and the four combinations are run in the new order to get the output response for the second replicate. For k = 3, the factors are A, B, and C, and the first eight rows of the table are used; for k = 4, the factors are A, B, C, and D, and all sixteen rows of the table are used. One set of a random run order is given for each of these cases in the columns labeled 23 and 24, respectively.

TABLE 8.16 Levels and Run Order of Each Factor for a 22, 23, and 24 Factorial Experiment

Run no.

Factors and their levels

Data (ym, j)

m

A

B

C

D

j = 1

j = 2

1

-

-

-

-

y1,1

2

+

-

-

-

y2,1

3

-

+

-

-

4

+

+

-

-

5

-

-

+

6

+

-

7

-

+

8

+

9

-

10 11

Run order number* Á

22

23

24

y1,2

3

5

6

y2,2

1

7

11

y3,1

y3,2

4

8

14

y4,1

y4,2

2

4

5

-

y5,1

y5,2

2

13

+

-

y6,1

y6,2

1

2

+

-

y7,1

y7,2

3

16

+

+

-

y8,1

y8,2

6

15

-

-

+

y9,1

y9,2

9

+

-

-

+

y10,1

y10,2

7

-

+

-

+

y11,1

y11,2

10

12

+

+

-

+

y12,1

y12,2

3

13

-

-

+

+

y13,1

y13,2

8

14

+

-

+

+

y14,1

y14,2

4

15

-

+

+

+

y15,1

y15,2

1

16

-

+

+

+

y16,1

y16,2

12

*One set of randomly ordered runs for j = 1 only. For j = 2, a new set of a randomly generated run order is used, and so on.

426

Chapter 8

Engineering Statistics

The combination of levels indicated in Table 8.16 as a function of k can be obtained with s = ffn2(k) where k = k and s is the (2k * k) array of 1’s and 0’s. Unfortunately, s is not in the order given in Table 8.16; it is equal to that shown in Table 8.16 when its columns are flipped using fliplr. Furthermore, in order to use s in subsequent examples, its 0’s have to be converted to -1’s as shown in Levels, which is created in Example 8.14. After the data have been collected, they are analyzed as follows, provided that the number of replicates is greater than one. Consider the tabulations in Table 8.17. The + and - signs in each column represent +1 and -1, respectively.

TABLE 8.17 Definitions of Various Terms That Are Used to Calculate the Sum of Squares and Mean Square Values for a 22, 23, and 24 Factorial Experiment

Factors and their interactions (l)†

A

B

A B

C

A C

B C

A B C

+ + + + + + + +

+ + + + + + + +

+ + + + + + + +

+ + + + + + + +

+ + + + + + + +

+ + + + + + + +

+ + + + + + + +

Data‡

D

A D

+ + + + + + + +

+ + + + + + + + +

B D

A B D

+ + + + + + -

+ + + + + + + +

C D

A C D

B C D

A B C D

j = 1

+ + + + + + + +

+ + + + + + + +

+ + + + + + + +

+ + + + + + + +

y1,1 y2,1 y3,1 y4,1 y5,1 y6,1 y7,1 y8,1 y9,1 y10,1 y11,1 y12,1 y13,1 y14,1 y15,1 y16,1

Á

j = n

Sm #

m

y1,n y2,n y3,n y4,n y5,n y6,n y7,n y8,n y9,n y10,n y11,n y12,n y13,n y14,n y15,n y16,n

S1 S2 S3 S4 S5 S6 S7 S8 S9 S10 S11 S12 S13 S14 S15 S16

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

The ‘ + ’ and ‘ - ’ stand for + 1 and -1, respectively, although they also indicate the high and low levels of the factors.

† ‡

The data are obtained as indicated in Table 8.16.

#

n

Sm = g ym,j j=1

Section 8.6

Design of Experiments

427

The columns for the primary factors A, B, C, and D are the same as those given in Table 8.16, where again the + and - signs stand for +1 and -1, respectively. The columns representing all the interaction terms are obtained by multiplying the corresponding signs in the columns of the primary factors. Thus, the signs in the columns designating the interaction ABC are obtained by multiplying the signs in the columns labeled A, B, and C. For example, in row seven (m = 7), A = -1, B = +1, and C = +1; therefore, the sign in the seventh row of the column labeled ABC is -1 [= ( -1)(+1)(+1)]. Furthermore, for the 22 experiment, the first three columns and the rows m = 1, 2, Á ,4 are used; for the 23 experiment, the first seven columns and the rows m = 1, 2, Á , 8 are used; and for the 24 experiment all fifteen columns and the rows m = 1, 2, Á , 16 are used. The sum of squares is obtained for n 7 1 and for a given value of k as follows: n

2k

SStotal = a a y2m,j - 2knyq2 j=1m=1

SSerror = SStotal - a SSl l

SSl =

C 2l k

n2

l = A, B, AB, Á

where 2k

Cl = a Sm * (sign in row m of column l) l = A, B, AB, Á m=1

k

1 2 yq = Sm n2 k ma =1 and Sm is defined at the bottom of Table 8.17. The average value of the effect of the primary factors and their interactions is obtained from the relation Effectl =

Cl n2k - 1

l = A, B, AB, Á

where Effectl is called the effect of l. As seen in Table 8.17, for k = 2, there are three l’s: A, B, and AB; for k = 3, there are seven l’s: A, B, C, AB, AC, BC, and ABC; and for k = 4, there are fifteen l’s: A, B, C, D, AB, AC, BC, AD, BD, CD, ABC, ABD, ACD, BCD, and ABCD. The mean square values for the main effects and their interactions are simply MSl = SSl since the number of degrees of freedom for each primary factor and their interactions is one. The mean square for the error is

428

Chapter 8

Engineering Statistics

TABLE 8.18 ANOVA Table for a 2k Factorial Experiment with n 7 1 Replicates

Sum of squares

Degrees of freedom

Mean square

A B C ... AB AC BC ... ABC ... Error

SSA SSB SSC ... SSAB SSAC SSBC ... SSABC ... SSerror

1 1 1 ... 1 1 1 ... 1 ... (n - 1)2k

MSA MSB MSC ... MSAB MSAC MSBC ... MSABC ... MSerror

Total

SStotal

n2k - 1

Factor

MSerror =

fa,1,(n - 1)2k

Fl MSA/MSerror MSB/MSerror MSC/MSerror ... MSAB/MSerror MSAC/MSerror MSBC/MSerror ... MSABC/MSerror ...

SSerror 2 (n - 1) k

(Value from f (Value from f (Value from f ... (Value from f (Value from f (Value from f ... (Value from f ...

- table) - table) - table) - table) - table) - table) - table)

n 7 1

The test statistic for each factor and their interactions is Fl =

MSl MSl = MSerror SSerror>[2k(n-1)]

l = A, B, AB, . . .,

n71

The ANOVA table for the 2k factorial analysis is given in Table 8.18. The results of ANOVA for the 2k factorial design can be used directly to obtain a multiple regression model that estimates the output of the process as a function of the statistically significant primary factors and the statistically significant interactions. We first introduce the coded variable xb 2b - b low - b high

xb =

b high - b low

where b is a primary variable; that is, b = A, B, C, Á . Thus, if b = A, when b = Ahigh, then xA = +1, and when b = Alow, xA = -1. Since Alow … A … Ahigh, then -1 … xA … +1. An estimate of the average output yavg is 1 c Effectlxl + a a Effectlbxlxb 2 a l l b

yavg = yq +

+ a a a Effectlbgxlxbxg Á d l

b

g

(8.41)

Section 8.6

Design of Experiments

429

where l, b, g, Á have the values of A, B, C, Á and correspond only to those combinations of subscripts that indicate statistically significant factors and interactions, and the xa (-1 … xa … +1) are the coded values. 2k Factorial Experiments: One Replicate In some cases, it is more economical to perform a factorial experiment with only one replicate. When only one replicate is used, there is no estimate of the mean square error. There is, however, a graphical method that permits one to identify the significant factors and interactions for k 7 2; but the error variance still remains unknown. The graphical method is based on the discussion in Example 8.4 with respect to normplot and the creation of ordered data. Here, the ordered data values are replaced by the ordered values of Effectsl. The effects that are negligible will be normally distributed and will tend to fall on a straight line on this plot, whereas the effects that are significant will not lie on this straight line. We now illustrate the use of these relationships.

Example 8.14

Analysis of a 24 factorial experiment

We generate the ANOVA table for the data in Table 8.19, which were obtained from a two-replicate 24 factorial experiment. We shall include in the ANOVA table the effects. TABLE 8.19 Data for a Two-Replicate 24 Experiment: FactorialData

Run no.*

Data (ym,j)

m

j = 1

j = 2

1

159

163

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

168 158 166 175 179 173 179 164 187 163 185 168 197 170 194

175 163 168 178 183 168 182 159 189 159 191 174 199 174 198

*Run number corresponds to level combinations given in Table 8.16.

430

Chapter 8

Engineering Statistics

The run numbers correspond to those of Table 8.16. First, we create a function M file FactorialData for these data. function dat = FactorialData dat1 = [159 168 158 166 175 179 173 179 164 187 163 185 168 197 170 194]; dat2 = [163 175 163 168 178 183 168 182 159 189 159 191 174 199 174 198]; dat = [dat1, dat2]; Next, we create a function M file called FactorialSigns, which determines the values ; 1 in Table 8.17 for k factors. This function uses ff2n to obtain the levels indicated in Table 8.16. The output of ffn2, however, has to be altered in two respects. In ff2n, the column order is reversed with respect to that appearing in Table 8.16 and instead of having ; 1 as output it has +1 and 0. These manipulations are performed in the function M file Levels. function s = FactorialSigns(k) s = Levels(k); s(:,3) = s(:,1).*s(:,2); for j = 3:k ink = 2^(j-1); for m = (ink+1):(2^j-1) s(:,m) = s(:,ink).*s(:,m-ink); end end function s = Levels(k) sx = fliplr(ff2n(k)); for n = 1:k ind = find(sx(:,n)==0); sx(ind,n) = -1; end s = zeros(2^k, 2^k-1); M = 1/2; for n = 1:k M = M*2; s(1:2^k,M) = sx(:,n); end The program to create the ANOVA table is as follows: tag = char('A', 'B', 'AB', 'C', 'AC', 'BC', 'ABC', 'D', 'AD', 'BD', 'ABD', . . . 'CD', 'ACD', 'BCD', 'ABCD'); k = 4; n = 2; fdata = FactorialData; s = FactorialSigns(k); Sm = sum(fdata')' yBar = sum(Sm)/n/2^k; SStotal = sum(sum(fdata.^2))-yBar^2*n*2^k; for nn = 1:2^k-1 Clambda = sum(s(:,nn).*Sm); SSlambda(nn) = Clambda^2/2^(k+1); EffectLambda(nn) = Clambda./2^k; end

Section 8.6

Design of Experiments

431

SSerror = SStotal-sum(SSlambda); MSerror = SSerror/2^k; f0 = SSlambda/MSerror; pValue = 1-fcdf(f0, 1, 2^k); disp('Factor SS MS Effect f-lambda p-value') disp([tag repmat(' ',15,1) num2str(SSlambda',6) repmat (' ',15,1) . . . num2str(SSlambda',6) repmat(' ',15,1) num2str (EffectLambda',6) . . . repmat(' ',15,1) num2str(f0',6) repmat(' ',15,1) num2str (pValue',6)]) disp(['SSerror ' num2str(SSerror,6) ' ' num2str (MSerror,6)]) disp(['SStotal ' num2str(SStotal,6)]) disp(['yBar = ' num2str(yBar,6)]) The execution of this script results in the following information being displayed to the MATLAB window:

Factor A B AB C AC BC ABC D AD BD ABD CD ACD BCD ABCD SSerror SStotal yBar =

SS 2312 21.125 0.125 946.125 3.125 0.5 4.5 561.125 666.125 12.5 2 12.5 0 0.125 21.125 153 4716 175.25

MS 2312 21.125 0.125 946.125 3.125 0.5 4.5 561.125 666.125 12.5 2 12.5 0 0.125 21.125 9.5625

Effect 17 -1.625 -0.125 10.875 -0.625 -0.25 0.75 8.375 9.125 1.25 -0.5 -1.25 0 0.125 -1.625

f-lambda 241.778 2.20915 0.0130719 98.9412 0.326797 0.0522876 0.470588 58.6797 69.6601 1.30719 0.20915 1.30719 0 0.0130719 2.20915

p-value 4.45067e-011 0.156633 0.910397 2.95785e-008 0.575495 0.822026 0.502537 9.69219e-007 3.18663e-007 0.269723 0.653583 0.269723 1 0.910397 0.156633

It is seen that at the considerably better than 95% confidence level, factors A, C, and D and interaction AD are statistically significant and, therefore, influence the outcome of the process. In fact, the sum of the sum of squares of these four quantities is 4,485. Thus, the sum-of-squares contribution of the quantities that are not statistically significant is 78 = 4716 - 4485 - 153, or 1.65% of the total sum of squares. We now use Eq. (8.41) and the above results to obtain the following regression equation that is a function of the three main effects and one interaction effect that are statistically significant at the greater than 95% confidence level. yavg = 175.25 + 8.50xA + 5.44xC + 4.10xD + 4.56xAxD

432

Chapter 8

Engineering Statistics

0.99 0.98 0.95 0.90

Probability

0.75

0.50

0.25 0.10 0.05 0.02 0.01 –15

–10

–5

0

5

10

15

20

Data Figure 8.19 Residual plot for the data used in Example 8.14.

The residuals are the differences between the measured values ym,j and yavg at the 24 combinations of coded values of xg shown in Table 8.16. We now use the following program to determine the residuals and plot them using normplot. fdata = FactorialData; s = FactorialSigns(4); yAvg = 175.25+8.5*s(:,1)+5.44*s(:,3)+4.1*s(:,4)+4.56*s(:,1).*s(:,4); normplot([fdata(:,1)-yAvg; fdata(:,2)-yAvg]) When the program is executed, we obtain Figure 8.19. We see that the residuals are acceptable.

Example 8.15

Analysis of a 24 factorial experiment with one replicate

We generate a modified ANOVA table for the data in Table 8.20, which were obtained from a single-replicate 24 factorial experiment. The modified ANOVA table will include the effects and the ordered effects with their corresponding cumulative distribution function (j - 0.5)/(24 - 1), j = 1, 2, Á , 15. The task is broken into two parts. The first part determines the ordered effects and their corresponding cumulative distribution function and the second part plots the results.The second part of the program was written after the results of the first part were analyzed. In plotting the results, we had to create our own version of normplot; that is, we had to transform the ordinate into cumulative normal distribution function. This conversion is performed in VertHorizAxis. The straight line fit

Section 8.6

Design of Experiments

433

TABLE 8.20 Data for a Single-Replicate 24 Experiment

Run no.*

Data (yj)

1

86

2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

200 90 208 150 172 140 192 90 142 96 130 136 120 160 130

*

Run number corresponds to level combinations given in Table 8.16.

to the data was determined as the line that represents those effects that are within the 25%–75% quartiles. The script is given below. It is noted that we have used several portions of the program that were employed in Example 8.14. function Example8_15 y = [86, 200, 90, 208, 150, 172, 140, 192, 90, 142, 96, 130, 136, 120, 160, 130]; tag = char('A', 'B', 'AB', 'C', 'AC', 'BC', 'ABC', 'D', 'AD', 'BD', 'ABD', 'CD', 'ACD', 'BCD', 'ABCD'); k = 4; s = FactorialSigns(k); Sm = sum(y); yBar = Sm/2^k; SStotal = sum(y.^2)-yBar^2*2^k; SSlambda = zeros(1, 2^k-1); EffectLambda = zeros(1, 2^k-1); for nn = 1:2^k-1 Clambda = sum(s(:,nn).*y'); SSlambda(nn) = Clambda^2/2^k; EffectLambda(nn) = Clambda./2^(k-1); end [OrdLam, ixx] = sort(EffectLambda, 'descend'); n = 15:-1:1;

434

Chapter 8

Engineering Statistics

Cdf = (n-0.5)/15; disp('Lambda SS Effect Ordered Ordered Cumulative') disp(' Lambda Effect Distribution') disp([tag repmat(' ',15,1) num2str(SSlambda',6) repmat(' ',15,1) . . . num2str(EffectLambda',6) repmat(' ',15,1) tag(ixx,:) . . . repmat(' ',15,1) num2str(OrdLam') repmat(' ',15,1) num2str(Cdf',3)]) disp(['SStotal ' num2str(SStotal,6)]) % Second part plot(OrdLam, norminv(Cdf, 0, 1), 'ko') hold on y25 = prctile(OrdLam,25); y75 = prctile(OrdLam,75); ind = find((OrdLam >= y25) & (OrdLam 2

and

s2t = A e s L - 1 B e2 2

xL + s L2

which can be obtained from lognstat. a. For the sorted data in Table 8.23, determine whether or not they are distributed lognormally using the technique outlined prior to Example 8.3. In other words, TABLE 8.23 Data for Exercise 8.6

1.55 3.05 3.65 5.20 7.75 10.45 10.85 10.90 12.65 15.25

15.70 16.35 17.70 17.95 19.45 19.80 20.05 32.75 35.45 49.35

Section 8.6

Design of Experiments

439

plot F(t) as a function of ln(t) and the fitted line; also use normplot to display the residuals. b. Compare the values of xL and sL obtained by the graphical method to those obtained from Eq. (b). (Answer: From curve fit, xL = 2.5072 and sL = 0.88841; from Eq. (a), xL = 2.5072 and sL = 0.85441.) Section 8.3 8.7 The process capability ratio (PCR) is a measure of the ability of a process to meet specifications that are given in terms of a lower specification limit LSL and an upper specification limit USL. It is defined as PCR =

USL - LSL 6s N

for a centered process and as PCRk = min c

USL - x x - LSL , d 3 sN 3 sN

for a noncentered process. The quantity sN is the estimate of the standard deviation of the process and x an estimate of its mean. When PCR 7 1, very few defective or nonconforming units are produced; when PCR = 1, then 0.27% (or 2,700 parts per million) nonconforming units are produced; and when PCR 6 1, a large number of nonconforming units are produced. The quantity 100/PCR is the percentage of the specification width used by the process. When PCR = PCRk, then the process is centered. The number of nonconforming parts is Np, where N is the total number of parts produced, and p = 1 - £a

LSL - x USL - x b + £a b N sN s

where £ is given by Eq. (8.16). Also recall Figure 8.5c and Eq. (8.18). For the data in Table 8.24, use the MATLAB function capable to determine p, PCR, and PCRk when LSL = 2.560 and USL = 2.565. Is the process centered? (Answer: p = 1.5351e - 004, PCR = 1.3103, and PCRk = 1.2099.) Section 8.4 8.8 Consider the data shown in Table 8.25. We shall assume two scenarios: (1) All the data in Table 8.25 comprise one set denoted by S0, and (2) the data in each of the five pairs of columns represent five separate sets denoted by Sj, j = 1, 2, Á , 5. TABLE 8.24 Data for Exercise 8.7

2.5629 2.5630 2.5628 2.5634 2.5619 2.5613

2.5630 2.5628 2.5623 2.5631 2.5635 2.5623

440

Chapter 8

Engineering Statistics

TABLE 8.25 Data for Exercise 8.8

1 1115 1310 1540 1502 1258 1315 1085

2 1567 1883 1203 1270 1015 845 1674

1223 375 2265 1910 1018 1452 1890

3 1782 1522 1792 1000 1820 1940 1120

1055 1764 1330 1608 1535 1781 1750

4 798 1020 865 2130 1421 1109 1481

1016 1102 1605 706 2215 785 885

5 2100 1594 2023 1315 1269 1260 1888

910 1730 1102 1578 758 1416 1560

1501 1238 990 1468 1512 1750 1642

a. Determine the harmonic mean of data set S0 and compare it with the mean and the geometric mean. The harmonic mean is determined from harmmean. b. What are the mean values and standard deviations of the six data sets Sj, j = 0, 1, 2, Á , 5. c. Display a vertical box plot of the data sets Sj, j = 1, 2, Á , 5. d. Determine the confidence limits on the differences in the mean values of S0 and each Sj, j = 1, 2, Á , 5, at the 95% confidence level assuming that the standard deviations are unknown but equal (Case 4 in Tables 8.4 and 8.6). What are the p-values for each of the data sets? Are any of the mean values of the data sets Sj statistically significantly different from the mean of S0? Do these conclusions qualitatively agree with the results displayed in (c) above? 8.9 To determine whether or not one should use Case 4 or Case 5 in Table 8.6, an F-test is first performed on the ratio of the variances as denoted in Case 7 of the table. If the variances are statistically significantly different, then Case 5 is used; otherwise, Case 4 is used. Write a script to determine whether there is a difference between the means of the data given in Table 8.26, and then based on the results determine whether the means are different. Also create a box plot to visualize the data and qualitatively support your conclusions. (Answer: From F-test on the ratio of variances, p = 0.47092;

TABLE 8.26 Data for Exercise 8.9

Group 1 88 79 84 89 81 83 82 79 82 85

81 83 90 87 78 80 87 85 80 88

Group 2 76 83 78 80 84 86 77 75 81 78

79 85 76 80 82 78 78 77 81 80

Section 8.6

Design of Experiments

441

therefore, there is no difference in the variances. From a t-test on differences in means, p = 0.0009342; therefore, the means are different.) Section 8.5.2 8.10 a. For the model below, determine b j for the data in Table 8.27 and show that this model is a good fit to these data. y = b 0 + b 1x1 + b 2x2 + b 3x21 + b 4x22 + b 5x1x2 b. Using the values found for b j, plot its surface and use contour to plot the contours of the projection of this surface onto the (x1, x2)-plane. c. Determine the coordinates of the maximum value of this fitted surface (Answer: x1 = 18.7635 and x2 = 38.0156). 8.11 The correlation coefficient R for a simple linear regression analysis can be obtained from Eq. (8.29). We can test the hypothesis that H0: R = 0 H1: R Z 0 by forming the test statistic t0 =

R1n - 2 21 - R2

TABLE 8.27 Data for Exercise 8.10

y

x1

x2

144

18

52

142 124 64 96 74 136 54 92 96 92 82 76 68

24 12 30 30 26 26 22 22 14 10 10 6 6

40 40 48 32 56 24 64 16 64 56 24 48 32

442

Chapter 8

Engineering Statistics

and comparing it with ta/2,n - 2. If t0 7 ta/2,n - 2, then we reject H0. In practice, we examine the p-value corresponding to t0. The confidence limits on the correlation coefficient r, for n Ú 25, can be estimated from tanh a tanh - 1(R) -

za/2 1n - 3

b … r … tanh atanh - 1(R) +

za/2 1n - 3

b

where za/2 = norminv(1 - a/2) [recall Eq. (8.19)]. For the data given in Table 8.28, a. b. c. d.

Determine the regression coefficients when the model is of the form y = b 0 + b 1/x. Plot the fitted line and the data points. Determine if the residuals are normally distributed. Determine (i) whether the correlation coefficient is different than 0; and (ii) its confidence limits at the 95% confidence level.

(Answer: (a) b 0 = 8.9366, b 1 = -41.6073; (d) 0.976998 … 0.98996 … 0.99564.) 8.12 In multiple linear regression analysis, one of two types of residuals are frequently examined: (a) the standardized residuals, which are defined as di =

ei sN

N 2 is given by Eq. (8.38), and (b) the studentized residuals, which are defined as where s ei

ri =

sN 11 - hii

TABLE 8.28 Data for Exercise 8.11

x

y

x

y

10.0

4.746

11.6

5.211

12.0 6.8 5.4 20.0 19.4 19.1 6.1 16.3 12.4 5.8 12.7 9.2

5.466 3.171 1.500 6.708 7.158 6.882 1.674 6.498 5.598 1.959 5.790 4.686

14.8 7.2 15.7 17.6 14.0 10.9 18.2 20.4 8.2 7.9 4.9

6.264 3.411 6.537 6.336 5.400 4.503 6.909 6.930 3.582 3.432 0.369

Bibliography

443 TABLE 8.29 Data for Exercise 8.13

x

y

95

85

105 115 125 135 145 155 165 175 185 195 205

76 114 143 164 281 306 358 437 470 649 702

where hii is the i th diagonal element of H = X A X¿X B - 1X¿ and X is given by Eq. (8.32). Using the model in Example 8.10 and the corresponding data in Table 8.8, determine the standardized and studentized residuals. Plot these residuals as a function of the average output yN i ( = yi - ei, yi are the output values given in Table 8.8) on the same graph using two different symbols to differentiate them. Are any of these residuals outliers; that is, do any of them exceed three. Label the figure and identify the two different sets of residuals with legend. 8.13 Consider the data in Table 8.29. Fit these data with two models: (1) one that assumes a linear fit; that is, y = b 0 + b 1x; and (2) one that assumes a quadratic fit; that is, y = b 0 + b 1x + b 2x2. For each model, obtain a plot of the residuals to determine if they are normally distributed.

BIBLIOGRAPHY T. B. Barker, Quality by Experimental Design, Marcel Dekker, New York, 1985. G. E. P. Box, W. G. Hunter, and J. S. Hunter, Statistics for Experimenters, John Wiley & Sons, New York, 1978. F. W. Breyfogle III, Statistical Methods for Testing, Development and Manufacturing, John Wiley & Sons, New York, 1992. N. Draper and H. Smith, Applied Regression Analysis, 2nd ed., John Wiley & Sons, New York, 1981. E. A. Elsayed, Reliability Engineering, Addison-Wesley Longman, Inc., Reading, MA, 1996. N. L. Frigon and D. Mathews, Practical Guide to Experimental Design, John Wiley & Sons, New York, 1997.

444

Chapter 8

Engineering Statistics

A. J. Hayter, Probability and Statistics for Engineers and Scientists, PWS Publishing Company, Boston, 1996. E. E. Lewis, Introduction to Reliability Engineering, 2nd ed., John Wiley & Sons, New York, 1996. D. C. Montgomery, Design and Analysis of Experiments, 3rd ed., John Wiley & Sons, New York, 1991. D. C. Montgomery, and G. C. Runger, Applied Statistics and Probability for Engineers, John Wiley & Sons, New York, 1994. R. H. Myers and D. C. Montgomery, Response Surface Methodology: Process and Product Optimization Using Designed Experiments, John Wiley & Sons, New York, 1995. R. E. Walpole, R. H. Myers, and S. L. Myers, Probability and Statistics for Engineers and Scientists, 6th ed., Prentice Hall, Upper Saddle River, NJ, 1998.

9 Dynamics and Vibrations Balakumar Balachandran

9.1 Dynamics of Particles and Rigid Bodies 446 9.1.1 Planar Pendulum 446 9.1.2 Orbital Motions 447 9.1.3 Principal Moments of Inertia 450 9.1.4 Stability of a Rigid Body 451 9.2 Single-Degree-of-Freedom Vibratory Systems 454 9.2.1 Introduction 454 9.2.2 Linear Systems: Free Oscillations 456 9.2.3 Linear Systems: Forced Oscillations 462 9.2.4 Nonlinear Systems: Free Oscillations 469 9.2.5 Nonlinear Systems: Forced Oscillations 478 9.3 Systems with Multiple Degrees of Freedom 481 9.3.1 Two-Degree-of-Freedom Systems: Free and Forced Oscillations 481 9.3.2 Natural Frequencies and Mode Shapes 495 9.4 Free and Forced Vibrations of Euler–Bernoulli and Timoshenko Beams 499 9.4.1 Natural Frequencies and Mode Shapes of Euler–Bernoulli and Timoshenko Beams 499 9.4.2 Forced Oscillations of Euler–Bernoulli Beams 509 9.5 Summary of Functions Introduced in Chapter 9 513 Exercises 514 Various methods are presented to analyze the dynamics of particles and rigid bodies, the free and forced oscillations of linear and nonlinear systems with one and more degrees of freedom, and the vibrations of Euler–Bernoulli and Timoshenko beams. 445

446

Chapter 9

Dynamics and Vibrations

9.1 DYNAMICS OF PARTICLES AND RIGID BODIES 9.1.1 Planar Pendulum The equation of motion of an undamped planar pendulum shown in Figure 9.1 is given by1 d2u + sin u = 0 dt2

(9.1)

where u is the angular coordinate describing the pendulum motion, t = tvn is the nondimensional time, vn = 2g>L, g is the acceleration due to gravity, and L is the length of the pendulum. The first integral of motion of Eq. (9.1) leads to F(u1, u2) =

1 2 u - cos u1 2 2

(9.2)

where u1 = u

and u2 =

du dt

The function given by Eq. (9.2) is plotted in Figure 9.2 using the program below. The lowest point in the valley corresponds to a stable equilibrium position of the system and the peaks located at u = ; p correspond to unstable equilibrium positions of the system. theta1 = linspace(-2.0*pi, 2.0*pi, 35); theta2 = linspace(-2.0*pi, 2.0*pi, 35); [T1, T2] = meshgrid(theta1, theta2);

θ

L

mg Figure 9.1

1

Planar pendulum.

D. T. Greenwood, Principles of Dynamics, 2nd ed., Prentice Hall, Englewood Cliffs, NJ, 1988, Chapter 5.

Section 9.1

Dynamics of Particles and Rigid Bodies

447

20

F(θ1,θ2)

15 10 5 0 −5 −10 5 5 0

0 −5

θ2 Figure 9.2

−5 θ1

Surface F(u1, u2) for a planar pendulum.

F = T2.^2/2-cos(T1); meshc(T1, T2, F) axis([-2.0*pi, 2.0*pi, -2.0*pi, 2.0*pi, -5, 20]) xlabel('\theta_1') ylabel('\theta_2') zlabel('F(\theta_1,\theta_2)') 9.1.2 Orbital Motions Consider a system of two bodies in a gravitational field, shown in Figure 9.3, where the mass m2 is fixed and the mass m1 orbits m2 in a plane. The coordinates describing the orbiting mass are the radial distance R(t) and the angular variable u(t ), where t is the time.

m1 R m2

θ

re Figure 9.3

A two-body system.

448

Chapter 9

Dynamics and Vibrations

If m1 is a satellite orbiting about the earth of radius re and mass m2, then the governing equations of motion are given by2,3 d2r du 2 4p2 ra b = dt dt2 r2

(9.3)

d2u dr du + 2 = 0 dt dt dt2 where t = t/Tc is the nondimensional time, Tc is the period of a circular orbit at the earth’s surface, and r(t) = R(t)/re. At the surface of m2, r = 1. Although a closed-form solution of the nonlinear system given by Eq. (9.3) is available,4 numerical solutions will be sought for a given set of initial conditions: r

r¿(0) = dr(0)/dt

r(0),

u(0), u¿(0) = du(0)/dt The system described by Eq. (9.3) is an example of a differential dynamical system, which describes the evolution of states r and u with respect to t. A solution of these equations for a given set of initial conditions can be determined through numerical integration with respect to the independent variable. Example 9.1

Orbital motions for different initial conditions

We shall determine the orbits of mass m1 for the three sets of initial conditions shown in Table 9.1. Although the type of orbit realized in each case is not known a priori, the orbit type that was determined after analyzing the numerical results is also shown in the last column of the table. Using the methods discussed in Section 5.5.3, we introduce the variables x1 = r, x3 = u dr du , x4 = dt dt and rewrite Eq. (9.3) as the following set of four first-order differential equations: dx1 dx2 4p2 = x2, = x1x24 (9.4) dt dt x21 x2 =

dx3 = x4, dt

dx4 2x2x4 = dt x1

TABLE 9.1 Initial Conditions for Orbital Motions

2

Set

x1(0)

x2(0)

x3(0)

x4(0)

Orbit type

1 2 3

2.0 1.0 2.0

0.0 0.0 0.0

0.0 0.0 0.0

1.5 2p 4.0

Elliptical Circular Hyperbolic

Ibid. F. C. Moon, Applied Dynamics with Applications to Multibody and Mechatronic Systems, John Wiley & Sons, NY, 1998, Chapter 7. 4 Greenwood, Principles of Dynamics. 3

Section 9.1

Dynamics of Particles and Rigid Bodies

449

The orbits corresponding to the three sets of initial conditions of Table 9.1 are obtained and plotted using the following script: function Example9_1 initcond = [2.0, 0.0, 0.0, 1.5; 1.0, 0.0, 0.0, 2.0*pi; 2.0, 0.0, 0.0, 4.0]; tspan = [1.5, 1, 0.3]; options = odeset('RelTol', 1e-6, 'AbsTol', [1e-6 1e-6 1e-6 1e-6]); for n = 1:3 [t, x] = ode45(@orbit, [0, tspan(n)], [initcond(n,:)]', options); polar(x(:,3), x(:,1), 'k-'); hold on end text(0.50, -1.30, 'Elliptical orbit'); text(-1.80, 1.00, 'Circular orbit'); text(1.75, 2.00, 'Hyperbolic orbit'); function xdot = orbit(t, x) xdot = [x(2); x(1)*x(4)^2-4.0*pi^2/x(1)^2; x(4); -2.0*x(2)*x(4)/x(1)]; The three sets of initial conditions are provided in the array labeled initcond. The specifier odeset is used to set the relative tolerance and the absolute tolerance to 10 - 6 for each of the four states, namely, xj, j = 1, 2, 3, and 4. Execution of the script results in Figure 9.4. The first, second, and third set of initial conditions, respectively, lead to an elliptical orbit, a circular orbit, and a hyperbolic orbit. The last orbit, which is an open orbit, is associated with unbounded motion.5 Open orbits represent escape trajectories from earth and are not considered for satellite motions. In addition, the elliptical orbit is not realistic, since r 6 1 indicates that the satellite has crashed into the earth’s surface. 90

2

120

60

Hyperbolic orbit

1.5 150

1

30

Circular orbit 0.5

180

0

330

210 Elliptical orbit 300

240 270

Figure 9.4 Orbits from Eq. (9.3) for three sets of initial conditions given in Table 9.1. 5

Ibid, p. 211.

450

Chapter 9

Dynamics and Vibrations

When systems such as those given by Eq. (9.3) are numerically integrated, one has to be aware that spurious solutions may be obtained during the integration. Usually in problems such as the present one, there is a constant of motion (here, the angular momentum per unit mass r2du/dt) that does not change with time. If a spurious solution were obtained, this constant would vary with time. For other systems without damping, one can determine whether the sum of the kinetic energy and potential energy remains constant during the numerical integration. It is good practice, therefore, to determine if a different result is obtained when the step size and/or the tolerances are changed (see Exercise 9.1).

9.1.3 Principal Moments of Inertia Consider the rigid body shown in Figure 9.5, which has three rotational degrees of freedom. The associated rotational inertia matrix has the form Ixx Irot = C Iyx Izx

Ixy Iyy Izy

Ixz Iyz S Izz

(9.5)

where the various moments of inertia are defined with respect to the coordinate system shown in Figure 9.5. Example 9.2

Principal moments of inertia

We shall determine a new set of orthogonal axes such that the inertia matrix is diagonal. These axes are called the principal axes, and the associated moments of inertia are called the principal moments of inertia. The eigenvalues of Eq. (9.5) provide the principal moments of inertia, and the associated eigenvectors define the principal axes.6 These two quantities are determined with eig as shown below. We also note that the sum of the eigenvalues of a matrix is equal to the trace of the matrix. The trace of a matrix is the sum of the diagonal elements of the matrix, and it is determined with trace. Consider the inertia matrix: [I] = C

150 0 -100

0 250 0

-100 0 S kg # m2 500

z ω O x

Figure 9.5 Rotation of a rigid body in a frame with Cartesian axes. 6

Ibid.

y

Section 9.1

Dynamics of Particles and Rigid Bodies

451

The script that is used to determine the principal moments of inertia and the trace of the various matrices is as follows: Irot = [150, 0, -100; 0, 250, 0; -100, 0, 500]; [PrincipalDirections, PrincipalMoments] = eig(Irot) TraceIrot = trace(Irot) TracePM = trace(PrincipalMoments) Upon execution, we obtain PrincipalDirections = -0.9665 0 0 1.0000 -0.2567 0 PrincipalMoments = 123.4436 0 0 250.0000 0 0 TraceIrot = 900 TracePM = 900

-0.2567 0 0.9665 0 0 526.5564

Although the first eigenvector corresponds to the first eigenvalue, the second eigenvector corresponds to the second eigenvalue, and so forth, the eigenvalues (principal moments, in this case) are not in any particular order.This is typical of the results obtained from eig. When the inertia matrix is examined, it is found that in this case, the y-axis is a principal axis and hence one of the eigenvalues is equal to Iyy. The matrix of principal directions defines a direction cosine matrix that can be used to transform the (x, y, z) axes to the principal axes.

9.1.4 Stability of a Rigid Body Again, consider the rigid body shown in Figure 9.5. Let I1, I2, and I3, respectively, represent the second mass moments of inertia about the x-, y-, and z-axes that are chosen to be along the respective principal axes of the body—that is, the principal moments of inertia in the previous example. Let v1, v2, and v3 represent the respective angular velocities about these axes, and let M1, M2, and M3 represent the respective external moments about these axes. The equations of motion, which are known as Euler’s equations, are of the form7 # I1 v1 + (I3 - I2)v2v3 = M1 # I2 v2 + (I1 - I3)v3v1 = M2 # I3 v3 + (I2 - I1)v1v2 = M3

7

Ibid., p. 392; Moon, Applied Dynamics, p. 192.

(9.6)

452

Chapter 9

Dynamics and Vibrations

where dvj # vj = dt

j = 1, 2, 3

In the moment-free case—that is, when M1 = M2 = M3 = 0—there are three types of solutions where vi are constant with respect to time. These solutions, which are called the constant solutions, are as follows: 1. 1v10 Z 0,

v20 = 0,

v30 = 0)

2. (v10 = 0,

v20 Z 0,

v30 = 0)

3. (v10 = 0,

v20 = 0,

v30 Z 0)

Each of these solutions corresponds to pure rotational motions about one of the principal axes. We are interested in determining the stability of these three types of motions. To this end, we let jj, j = 1, 2, 3, represent the disturbances provided to the system about the respective axes—that is, v1(t) = v10 + j1(t) v2(t) = v20 + j2(t)

(9.7)

v3(t) = v30 + j3(t) Substituting Eq. (9.7) into Eq. (9.6) and assuming that the magnitudes of the disturbances are “small,” one can linearize8 Eq. (9.6) and study the associated eigenvalue problem. This results in the following system of equations: 0 C (I1 -I3)v30>I2 (I2 -I1)v20>I3

(I3 -I2)v30>I1 0 (I2 -I1)v10>I3

(I3 -I2)v20>I1 j1 j1 (I1 -I3)v10>I2 S j2 = l c j2 Lj M 0 j3 M 3

(9.8)

If one or more of the three eigenvalues of Eq. (9.8) has a positive real part, then the disturbances will grow in magnitude and the associated motion will be unstable. Since the trace of Eq. (9.8) is zero, the sum of its eigenvalues will also be zero. Example 9.3

Stability of a rigid body

Let us consider a rigid body with I1 = 150 kg # m2, I2 = 50 kg # m2, and I3 = 300 kg # m2 and determine the stability of each of the three constant solutions. The following script is used to determine the eigenvalues l for disturbances provided to the rotational motions along the axis of maximum inertia, the axis of minimum inertia, and the other axis. I = [150, 50, 300]; omega = [1, 0, 0; 0, 1, 0; 0, 0, 1];

8

A. H. Nayfeh and B. Balachandran, Applied Nonlinear Dynamics: Analytical, Computational, and Experimental Methods, John Wiley & Sons, New York, 1995.

Section 9.1

Dynamics of Particles and Rigid Bodies

453

for n = 1:3 A = [0, (I(3)-I(2))*omega(3,n)/I(1), (I(3)-I(2))*omega(2,n)/I(1); . . . (I(1)-I(3))*omega(3,n)/I(2), 0, (I(1)-I(3))*omega(1,n)/I(2); . . . (I(2)-I(1))*omega(2,n)/I(3), (I(2)-I(1))*omega(1,n)/I(3), 0]; disp(['Case ', num2str(n)]) disp([repmat('lambda(', 3, 1) int2str((1:3)') repmat(') = ', 3,1) . . . num2str(eig(A), '%1.0f')]) disp(['Sum of lambda(j) = ' num2str(sum(eig(A)))]) disp(' ') end Execution of the script displays the following in the command window: Case 1 lambda(1) = 1 lambda(2) = -1 lambda(3) = 0 Sum of lambda(j) = -0 Case 2 lambda(1) = 0+0.74536i lambda(2) = 0-0.74536i lambda(3) = 0+0i Sum of lambda(j) = 0 Case 3 lambda(1) = 0+2.2361i lambda(2) = 0-2.2361i lambda(3) = 0+0i Sum of lambda(j) = 0

In each of the three cases, one of the eigenvalues is always zero and the sum of the eigenvalues is always zero. In the first case, where the initial rotational motion is along the axis with the intermediate value of inertia, one of the eigenvalues has a positive real part indicating that the motion is unstable. The associated physical motions are wobbly. In the second case, which corresponds to an initial rotational motion about the axis of minimum rotational inertia, two of the eigenvalues form a purely imaginary pair. In the third case, which corresponds to an initial rotational motion about the axis of maximum rotational inertia, two of the eigenvalues form a purely imaginary pair. In the second and third cases, the respective disturbances to the system do not grow because none of the eigenvalues has a positive real part. Hence, the motions in this case are stable. If one further explores the solutions of Eq. (9.6) by numerically integrating the last two cases, it will be found that the motions correspond to circular orbits in the three-dimensional space defined by the three states v1, v2, and v3. These orbits lie on an ellipsoid called Poinsot’s ellipsoid.9

9

Greenwood, Principles of Dynamics, Section 8.4.

454

Chapter 9

Dynamics and Vibrations

9.2 SINGLE-DEGREE-OF-FREEDOM VIBRATORY SYSTEMS 9.2.1 Introduction Consider a spring–mass–damper system with a mass m, a spring with linear spring constant k, and a damper with damping coefficient c. In addition, we include a general # nonlinear element g(x, x) to represent a general nonlinearity that is a function of dis# placement x and velocity x. The mass is subjected to an excitation F(t) = Fof(t). This system, which is illustrated in Figure 9.6, is a prototypical model used to study mechanical systems ranging from washing machines to vehicles.10 The governing equation of motion is of the form d2y

+ 2z

2

dt

dy # + y + g(y, y) = f(t) dt

(9.9)

where y = x/dst, dst = Fo/k, t = vnt is the nondimensional time, and the damping factor z is given by z =

c 2mvn

(9.10)

In Eq. (9.10), the natural frequency vn is given by vn = 1k/m

(9.11)

When we are considering free oscillations, Fo = 0; in this case, we set dst = mg/k. When the system is subjected to an initial displacement Xo and an initial velocity Vo, then in terms of the nondimensional coordinates, we have y(0) = Xo>dst = yo dy(0) = Vo >(dstvn) = vo dt x(t)

c

F(t) = Fo f(t) k

m

g ( x , x)

Figure 9.6 Spring–mass–damper system # with a general nonlinear element g(x, x).

10

B. Balachandran and E. B. Magrab, Vibrations, 2nd ed., Cengage, Toronto, ON, 2009.

(9.12)

Section 9.2

Single-Degree-of-Freedom Vibratory Systems

455

# For a linear system, that is, when g(x, x) = 0, the damped period of oscillation of this system Td is defined as Td =

2p vn 21 - z2

z 6 1

(9.13a)

or in terms of the nondimensional time td td = vnTd =

2p 21 - z2

z 6 1

(9.13b)

Logarithmic Decrement Considering free oscillations, the damping factor z can be obtained from the displacement response of an underdamped system (0 6 z 6 1) on the basis of the logarithmic decrement d, which is given by11 xj 1 d = ln a b (9.14) n xj + n The damping is related to d by z =

d 24p2 + d2

(9.15)

The quantities xj and xj + n are the displacements at tj and tj + nTd, respectively, where Td is the period of the underdamped oscillation given by Eq. (9.13a). One way to determine d is first to determine the period Td of the system’s free response and then to determine the magnitudes of the response xj and xj + n in the vicinity of the various maxima (minima). From these results, one can use Eq. (9.14) and (9.15) to determine z. State–Space Form Equation (9.9) is put into state–space form by introducing the variables y1 = y dy y2 = dt Then Eqs. (9.9) and (9.12), respectively, become dy1 = y2 dt dy2 # = -2zy2 - y1 - g(y, y) + f(t) dt

(9.16)

and y1(0) = yo y2(0) = vo Equations (9.16) and (9.17) are in the form required by ode45. 11

Ibid, p. 145.

(9.17)

456

Chapter 9

Dynamics and Vibrations

Laplace Transform

# To consider a linear system, we set g(x, x) = 0. Taking the Laplace transform of Eq. (9.9) and setting the initial conditions to zero, we arrive at Y(s) =

F(s) s + 2zs + 1 2

(9.18)

where Y(s) and F(s) are the Laplace transforms of y(t) and f(t), respectively. The transfer function G(s) of a linear time-invariant system (i.e., a system described by a differential equation with constant coefficients) can be obtained from Eq. (9.18) as G(s) =

Y(s) N(s) 1 = 2 = F(s) D(s) s + 2zs + 1

(9.19)

where the numerator N(s) and the denominator D(s), respectively, are N(s) = 1 D(s) = s2 + 2zs + 1

(9.20)

Frequency–Response Function The frequency–response function for the system described by Eq. (9.19) can be obtained by setting s = jv/vn = jÆ . Thus, Eq. (9.19) becomes G(jÆ) = H(Æ)e - ju(Æ)

(9.21)

where 1

H(Æ) =

2(1 - Æ ) + (2zÆ)2 2zÆ u(Æ) = tan - 1 1 - Æ2 2 2

(9.22)

We now illustrate the use of these results by considering separately the free and forced oscillations of linear and nonlinear single-degree-of-freedom systems. 9.2.2 Linear Systems: Free Oscillations # For free oscillations of linear systems, we set g(y, y) = f(t) = 0 and Eq. (9.9) becomes d2y 2

dt

+ 2z

dy + y = 0 dt

(9.23)

and Eq. (9.16) simplifies accordingly. We use Eq. (9.16) to create the following function M file that will be used by ode45 in several of the examples to follow. function y = LinearOscillatorFree(t, y, zeta) y = [y(2); -2*zeta*y(2)-y(1)];

Section 9.2

Single-Degree-of-Freedom Vibratory Systems

457

Example 9.4 Oscillations of a single-degree-of-freedom system for given initial velocity and initial displacement We now determine the free response of the linear spring–mass–damper system given by Eq. (9.23) for the initial conditions yo = 1 and vo = 1 and for the three values of the damping factor z: (1) z = 0.1, an underdamped case; (2) z = 1, the critically damped case; and (3) z = 5.0, an overdamped case. To determine the free response over the range 0 … t … 40, we use the following script: zeta = [0.1, 1.0, 5.0]; lintyp = char('-k', '--k', '-.k'); tspan = linspace(0, 40, 400); for n = 1:3 [t, y] = ode45(@LinearOscillatorFree, tspan, [1 1]', [], zeta(n)); figure(1); plot(t, y(:,1), lintyp(n,:)); hold on figure(2); plot(y(:,1), y(:,2), lintyp(n,:)); hold on end figure(1) xlabel('\tau'); ylabel('y(\tau)'); axis([0, 40, -1.5, 1.5]); plot([0, 40], [0, 0], 'k-') legend('\zeta = 0.1', '\zeta = 1.0', '\zeta = 5.0') figure(2) xlabel('Displacement'); ylabel('Velocity'); legend('\zeta = 0.1', '\zeta = 1.0', '\zeta = 5.0', 2) axis([-1.5, 1.5, -1.5, 1.5]); The results shown in Figure 9.7 are obtained by executing this script. The displacement responses are shown in Figure 9.7a, and the displacements-versus# velocity plots are shown in Figure 9.7b. The space (x, x) which is formed by using the displacement and velocity as coordinates, is called the phase space. The collections of trajectories that are initiated in this space from different sets of initial conditions constitute a phase portrait. The equilibrium position of the linear system given by Eq. (9.23) corresponds to the location y1 = 0 and y2 = 0 [or (0, 0)] in the phase space. It is seen from the time histories that there are oscillations only in the underdamped case, which correspond to the spiral trajectory in the phase portrait. As time unfolds, this trajectory is attracted to the location (0, 0), which is the equilibrium position and is an example of a point attractor. No oscillations are observed as the system approaches the equilibrium position in the critically damped and overdamped cases. When the system is critically damped, it is seen that the trajectory reaches the equilibrium position in the shortest time.

458

Chapter 9

Dynamics and Vibrations

1.5

ζ = 0.1 ζ = 1.0 ζ = 5.0

1

y(τ)

0.5

0

−0.5

−1

−1.5 0

5

10

15

20 τ

25

30

35

40

(a) 1.5

1

ζ = 0.1 ζ = 1.0 ζ = 5.0

dy(τ)/dτ

0.5

0

−0.5

−1

−1.5 −1.5

−1

−0.5

0 y(τ)

0.5

1

1.5

(b) Figure 9.7 (a) Displacement histories. (b) Phase portraits for the free oscillations of a damped, linear oscillator.

Section 9.2 Example 9.5

Single-Degree-of-Freedom Vibratory Systems

459

Estimate of damping factor from the logarithmic decrement

If we assume that y(t) is the free response of a system to an initial condition, then the damping factor of the system can be determined from the logarithmic decrement given by Eqs. (9.14) and (9.15). In order to use Eq. (9.14), one needs to know td. Therefore, we create a function M file called ZeroCrossing to determine all the times at which y equals zero. From these times, one can determine the value(s) of td; that is, from the difference between the third and first zero-crossing times, the fifth and third times, and so on. ZeroCrossing is similar to FindZeros given in Section 5.5.1, except that in this case we use interp1 instead of fzero. function T = ZeroCrossing (t, y) cnt = 0; for n = 3:length(t)-4 if y(n-1)*y(n) < 0 N = n-3:n+4; cnt = cnt+1; T(cnt) = interp1(y(N), t(N), 0); end end For a linear system, the period of damped oscillation does not change over different cycles; however, this is not so for nonlinear systems. In the following script, we assume a value for z and use ode45 to obtain the solution for y(t). We use y(t) in ZeroCrossing to obtain an estimate of the logarithmic decrement from Eqs. (9.14) and (9.15). This estimate should result in a value of z that is very closely equal to the value that was used to obtain y(t). We assume that z = 0.3 and the response is initiated from yo = 0.0 and vo = -10.0. We shall determine the estimates of z for the first three periods starting at the approximate time at which y(t) has its first maximum. zeta = 0.30; [t, y] = ode45(@LinearOscillatorFree, linspace(0, 35, 400), [0, -10]', [], zeta); Tp = ZeroCrossing(t, y(:,1)); [ymx, Imax] = max(y(:,1)); Per = Tp(3:2:7)-Tp(1:2:5); Q = [t(Imax), t(Imax)+(1:3).*Per]; yspline = spline(t, y(:,1), Q); delta = log(yspline(1:3)./yspline(2:4)); zetalog = delta./sqrt(4*pi^2+delta.^2); disp('Period Damping Factor') disp([num2str((1:3)') repmat(' ', 3, 1) num2str(zetalog')]) When one executes this script, the following results are displayed in the command window: Period Damping Factor 1 0.30011 2 0.30014 3 0.30013

As expected for a linear system in which energy is dissipated through viscous damping, the decay is exponential and the logarithmic decrement remains constant over each cycle of the damped oscillation.

460

Chapter 9

Example 9.6

Dynamics and Vibrations

Machine Tool Chatter

The vibration of the tool shown in Figure 9.8 can be described by12 k1 k1 1 K dx d2x + a + b + a1 + bx - m x(t - 1/Æ) = 0 Q kÆ dt k k dt2

(9.24a)

where Æ =

N , 2pvn

Q =

1 2z

(9.24b)

and t, vn, and z are defined in Eqs. (9.10) and (9.11). In Eqs. (9.24), N is the rotational speed of the workpiece in revolutions per second, m is the overlap factor (0 … m … 1), and there is a time delay term in Eq. (9.24a).This is an example of a delay differential equation. To determine when chatter can occur, a solution of the form x = Aelt is assumed and introduced into Eq. (9.24a) to obtain the characteristic equation l2 + a

k1 1 K + bl + 1 + A 1 - me - l/Æ B = 0 Q kÆ k

(9.25)

To find the stability boundary, we let l = jv and substitute into Eq. (9.25) to obtain the equations mk1 sin(v/Æ) 1 K + + = 0 Q kÆ k v v2 = 1 +

(9.26)

k1 A 1 - m cos(v/Æ) B k

In Eq. (9.26), the quantities K/k, m, and k1/k are known, and the values of the nondimensional spindle speed Æ are varied over a specified range. At each value of Æ , the value of v is determined numerically from the second of the equations in Eq. (9.26) by using fzero. The values for Æ and v are then used in the first of the equations in Eq. (9.26) to determine the positive values of Q that satisfy the equation; that is, those values of Æ and v for which mk1 sin(v/Æ) 1 K = Q kÆ k v

Workpiece Workpiece

N x

c

K Fc k1

Tool Figure 9.8

12

Ibid, Section 4.5.

Tool

x

Model of a tool and workpiece during turning.

m k

Section 9.2

Single-Degree-of-Freedom Vibratory Systems

461

In the plot of Æ versus Q, we can show the regions for which the system is either stable or unstable. For K/k = 0.0029, k1/k = 0.0785, and m = 1, the system of equations given by Eq. (9.26) is solved numerically using the following script: chat = inline('1-w.^2+k1k*(1-u*cos(w/Ob))', 'w', 'u', 'k1k', 'Ob'); k1k = 0.0785; Kk = 0.0029; u = 1; Ob = linspace(0.03, 0.35, 300); L = length(Ob); w = zeros(L,1); for n = 1:L w(n) = fzero(chat, [0.8 1.2], [], u, k1k, Ob(n)); end xx = -1./(Kk./Ob'+u*sin(w./Ob')./w*k1k); indx = find(xx >= 0); hold on a = axis; a(4) = 50; a(2) = 0.35; axis(a) fill(Ob(indx), xx(indx), 'c') B = sqrt(2)*sqrt(1+k1k-sqrt(1+2*k1k+(k1k^2)*(1-u^2))); Qm = 1./(B-Kk./Ob); ind = find(Ob > 0.05); plot(Ob(ind), Qm(ind), 'k--') xlabel('\Omega') ylabel('Q') text(.22, 40, 'Unstable') text(.15, 5, 'Stable') text(0.02, 10, ['K/k=' num2str(Kk, 5)]) 50 45 Unstable

40 35

Q

30 25 20 15 K/k = 0.0029

10

k1/k = 0.0785

5 0

0

0.05

Stable 0.1

0.15

0.2

0.25

0.3

0.35

Ω Figure 9.9 Stability chart for K/k = 0.0029, k1/k = 0.0785, and m = 1. Chatter is expected to occur in the shaded regions marked unstable in the figure. In between the stability lobes, as well as below the stability lobes, the cutting operations are expected to be stable.

462

Chapter 9

Dynamics and Vibrations

text(0.02, 6, ['k_1/k=' num2str(k1k, 5)]) box on grid on The execution of the script results in Figure 9.9. The shaded regions or lobes in this figure are the unstable regions where the machine tool can chatter. The time-domain solution of this model is given in Example 5.12.

9.2.3 Linear Systems: Forced Oscillations # # For forced oscillations of linear systems, we set g(y,y ) = y(0) = y (0) = 0 and Eq. (9.9) becomes d2y dt2

+ 2z

dy + y = f(t) dt

(9.27)

We now illustrate two ways to determine and display the displacement response of a linear system subjected to an impulse force and to a step force and two ways to determine the frequency response. One way is to use the functions step, impulse, bode, and tf from the Controls toolbox.13 The transfer function of Eq. (9.27) is given by Eq. (9.17); that is, G(s) =

1 s + 2zs + 1 2

(9.28)

In order to create the transfer function, we use sys = tf(N, D) where N and D are vectors containing the coefficients of their respective polynomials in the same way that the coefficient vectors were defined for roots in Section 5.5.1. In this case, N and D are given by Eq. (9.20). The frequency response function G(jÆ) can be computed and plotted with bode(tf(N, D), Om) which plots the magnitude and phase of G(jÆ), or with [magnitude, phase] = bode(tf(N, D), Om) which provides arrays of numerical values for the magnitude and phase. The quantity Om is either a two-element cell that specifies the minimum and maximum values of the frequency range of interest or an array of frequency values. The functions impulse and step can be used to determine the impulse and step responses, respectively, of linear time-invariant systems set into motion from rest.Thus, impulse(tf(N, D))

13

See Chapter 10 for additional applications of these functions.

TABLE 9.2 Various Response Functions of a Single-Degree-of-Freedom System Determined by Two Different Methods

Impulse

Control toolbox T = linspace(0, 35, 200); z = 0.15; N = [0, 0, 1]; D = [1, 2*z, 1]; impulse(tf(N, D), T)

Output

MATLAB function Impulz T = linspace(0, 35, 400); z = 0.15; IC = [0,0]; [t, yy] = ode45(@Imp, T, . . . IC, [], z); plot(t, yy(:,1), 'k-')

Impulse Response

1 0.8 0.6

Amplitude

Response

0.4 0.2 0 −0.2

T = linspace(0, 35, 200); z = 0.15; N = [0, 0, 1]; D = [1, 2*z, 1]; step(tf(N, D), T)

0

5

10

15 20 Time (sec)

25

30

35

Step Response 1.8 1.6 1.4

Amplitude

Step

1.2 1 0.8 0.6 0.4 0.2 0

5

10

15 20 Time (sec)

25

30

5 0 −5 −10 −15 −20 0

Phase (deg)

function dd = Imp(t, y, z) h = (1/0.01).*(t 0, 1)) == 0 disp('In-span attachments: ') disp(['Translation spring (K) = ' num2str(a(3)) ' at eta = ' num2str(e(2))]) disp(['Torsion spring (Kt) = ' num2str(a(4)) ' at eta = ' num2str(e(3))]) disp(['Mass (M) = ' num2str(a(1)) ' and Rotational Mass (J) = ' . . . num2str(a(2)) ' at eta = ' num2str(e(1))]) disp(' ') end function Spac = InitialMesh(e) ep = 0.005; indx = find(e~=0); if isempty(indx) Spac = linspace(0, 1, 10); else Spac = [linspace(0, e(indx)-0.01, 5), e(indx)-ep, e(indx), e(indx)+ep, Á linspace(e(indx)+0.01, 1, 5)]; end function yinit = TimoModeGuess(x, n) yinit = [sin(n*x*pi); cos(n*x*pi); sin(n*x*pi); cos(n*x*pi)]; function dydx = TimoODE(x, y, Om, a, b, e, Ro, gbs, BCL, BCR) % a = [M, J, K, Kt] % e = [etaMJ, etaK, etat] ep = 0.004; dm = 0; dk = 0; dt = 0; if a(1) > 0 dm = ((x>=(e(1)-ep)&(x 0 dk = ((x>=(e(2)-ep)&(x 0 dk = ((x>=(e(3)-ep)&(x(1 - e>100) B Æ 4 + A -2 + 4z2 B Æ 2 + 1 = 0 Section 9.2.2 9.5 Compare the results of Example 9.4, which were obtained using ode45, with the results obtained from the following analytical solutions.29 For the underdamped case, set z = 0.1; for the critically damped case, z = 1; and for the overdamped case, set z = 2. In addition, let 0 … t … 20 and xo = 1 and vo = 1. Underdamped (z 6 1) y(t) = xoe - zt cos A 21 - z2t B +

vo + zxo 21 - z2

e - zt sin A 21 - z2t B

Critically damped (z = 1) y(t) = [xo + (vo + xo)t]e - t Overdamped (z 7 1) y(t) = xoe - zt cosh A t2z2 - 1 B +

28 29

Ibid, p. 220. Ibid., Appendix D.

zxo + vo 2z2 - 1

e - zt sinh A t2z2 - 1 B

516

Chapter 9

Dynamics and Vibrations

TABLE 9.7 Free Oscillation Data for Exercise 9.6

Time

Amplitude

Time

Amplitude

Time

Amplitude

0.000 0.692 1.538 2.308 3.077 3.846 4.615 5.385 6.154 6.923 7.692 8.461 9.231

0.801 0.365 -0.386 -0.562 -0.114 0.349 0.338 -0.301 -0.204 0.104 0.228 0.008 -0.010

10.00 10.77 11.54 12.31 13.07 13.85 14.15 15.85 16.23 17.92 18.46 19.23 20.00

-0.0151 -0.00688 0.118 0.0882 -0.028 -0.0871 -0.0551 0.0220 0.0687 0.0376 -0.040 -0.0514 -0.00641

20.77 21.54 22.31 23.08 23.85 24.61 25.38 26.15 26.92 27.69 28.46 29.23 30.00

0.0379 0.0167 -0.0184 -0.0259 -0.0141 0.0149 0.0115 0.00367 -0.0148 -0.0125 0.0157 0.00263 -0.00727

9.6 Consider the free oscillation response data given in Table 9.7. Curve fit these data by assuming that the response is of the form x(t) =

Xoe - zvnt 21 - z2

sin A vnt21 - z2 + w B

where w = tan - 1

21 - z2 z

and determine Xo, z, and vn. 9.7 A mass m slides along a rough rod of length l, which is pivoted at the end O. The angular orientation of the rod with respect to the horizontal is given by u(t) and the location of the mass along the rod from its pivot point is given by r. When the rod rotates in the horizontal plane with a constant angular speed du/dt = v, the equation of motion of mass m is $

#

r + 2mvr - v2r = 0 where m is the coefficient of friction between the rod and the mass. For m = 0.2, l = 3.0 m, v = 6 rad/s, and initial conditions r(0) = 1.0 m, u(0) = 0.0 rad>s, and # r (0) = 0.0 m>s, obtain a graph of the path of the mass in the (r, u) plane up to the time it leaves the rod; that is, the time when r 7 l. Section 9.2.3 9.8 The transfer function for a mechanical system shown in Figure 9.32 when subjected to base excitation xb(t) is G(s) =

xm(s) 2zvns + v2n = 2 xb(s) s + 2zvns + v2n

Exercises

517

xm

m

k

c xb

Figure 9.32 Spring–mass–damper system excited at its base.

Let z = 0.1 and vn = 4 rad/s. Use bode to determine the amplitude and phase response of this system for 0 … v … 10. Compare these results with those obtained from the following analytical solution:

G(v) =

SA

v4n + A 2zvvn B 2

v2n - v2 B 2 + A 2zvvn B 2

f(v) = tan - 1 a

2zv 2zvvn b - tan - 1 a 2 b vn vn - v2

# 9.9 Consider a vibratory system whose motion is described by Eq. (9.9) with g(x, x ) = 0 Determine the response of the mass when f(t) =

1 c tu(t) - (t - to)u(t - to) d to

for 0 … t … 30, z = 0.1, and to = 15, 6, and 0.7; u(t) is the unit step function. Include in each graph f(t). Section 9.2.5 9.10 A single-degree-of-freedom system is shown in Figure 9.33 with a dead zone of width 2b centered on its equilibrium position. The governing equations of the system are # $ mx + k(x + b) + 2cx = F(t) # $ mx + 2cx = F(t) # $ mx + k(x - b) + 2cx = F(t)

x 6 -b -b … x … b x 7 b

a. Determine the free response of a system with m = 10.0 kg, k = 150 * 103 N/m, and c = 50 Ns/m when the motion is initiated from x(0) = 0 m and dx(0)/dt = 2 m/s in the following cases: (a) dead zone b = 1.0 mm and (b) dead zone b = 1,000 mm. b. For b = 5.0 mm and x(0) = 0 m and dx(0)/dt = 0 m/s, determine the response of the system when F(t) = 20cos(12t)u(t) N, where u(t) is the unit step function.

518

Chapter 9

Dynamics and Vibrations

x(t) b

b k

k m

F(t) c

c

Figure 9.33 Spring–mass–damper system with dead zone.

9.11 An overhead crane’s trolley is carrying, via a cable, a load of mass m as shown in Figure 9.34. When the trolley is moved with an acceleration b(t), the governing equation of motion of the crane load is L

d2 u + g sin u = -b(t) cos u dt 2

where g = 9.8 m/s2 is the gravity constant. If the cable length is 2 m, then graph the swing motion u(t) for the following accelerations of the trolley over the time interval 0 … t … 10 s: a. b(t) = 10u(t) m/s2, u(0) = 0.2 rad, and du(0)/dt = 0 rad/s, where u(t) is the unit step function. b. b(t) = 0.2u(t) m/s2, u(0) = 0.2 rad, and du(0)/dt = 0 rad/s, where u(t) is the unit step function. 9.12 Consider a single-degree-of-freedom system with a linear spring of stiffness k (N/m) and a cubic spring of stiffness ak (N/m3) that is subjected to a base excitation w(t). If the displacement of the mass is x(t), the static deflection of the system is dst, and w(t) = w max A 1-(1 - gt)e - gt B

Crane boom b(t)

Trolley θ

L g

m Figure 9.34 Trolley on an overhead crane carrying a swinging load m.

Exercises

519

then the governing equation of the system is30 d 2z dz + 2z + z + ao A z - do B 3 = -aod3o - g2(1 - gt)e - gt 2 dt dt where z(t) = (x(t) - w(t))/wmax, do = dst/wamx, and ao = aw2max . The absolute displacement of the mass is x(t) = wmax z(t) + wmax A 1 - (1 - gt)e - gt B Determine x(t)/wmax for do = 0.3, ao = 30, g = 1, z = 0.15, and 0 … t … 25. Section 9.3.1 9.13 Consider the amplitude–response function H11(Æ) given by Eq. (9.50). Set z1 = 0, mr = 0.05, and vr = 1.0. Vary z2 from 0.05 to 0.3 in increments of 0.05 and plot H11(Æ) at each of these values on the same graph for 0.6 … Æ … 1.4. It will be found that each of the graphs for the different values of z2 intersect at two frequency locations. Verify that these two frequencies are the same as those given by Æ 1,2 =

1 C 1 + v2r (1 + mr) < 2(v2r - 1)2 + mr(2 + mr) D B 2 + mr

9.14 A model that is frequently used to study the bounce-pitch motion of a vehicle is shown in Figure 9.35. The equations governing the undamped system when undergoing free harmonic oscillations of the from x = Xejvt and u = ®e jvt are -v2mX + (k1 + k2)X + (L2k2 - L1k1)® = 0 -v2Ic ® + (k1L21 + k2L22)® + (L2k2 - L1k1)X = 0 If k1 = 14,600 N/m, k2 = 21,900 N/m, L1 = 1.52 m, L2 = 1.22 m, m = 730 kg, and Ic = 1,360 kg m2, then find the natural frequencies and mode shapes. x L2 L1

θ

c k2

k1

Figure 9.35 Two-degree-of-freedom model of a vehicle.

30

Ibid, Example 6.9.

520

Chapter 9

Dynamics and Vibrations

9.15 Consider the two-degree-of-freedom system shown in Figure 9.18. If an impulse force is applied to m2, then the Laplace transform of the ratio of the force transmitted to the ground to the force applied to mass m2 is TR(s) =

vr A 2z1s + 1 B A 2z2s + vr B D(s)

where D(s) is given by Eq. (9.47a). For z1 = z2 = 0.1 and mr = 1.0, determine TR(t) for vr = 0.05 and 0.25 over the range 0 … t … 100. Section 9.3.2 9.16 Consider the three-degree-of-freedom system shown in Figure 9.36. When the system undergoes harmonic oscillations of the form xl = Xle jvt, l = 1, 2, and u = ®e jvt and the displacements and rotation are small, the resulting equation from which the natural frequencies and mode shapes can be determined is

C [K] - v2[ M ] D E Y F = E 0 F where

EYF

[K] =

X1 = X2 , L®M

k1 + k2 + k3 -k3 J (k L - k L + k L )cos u 1 1 2 2 3 3 o

m1 CMD = 0 J 0

0 m2 0

-k3 k3 -k3L3 cos uo

(k1L1 - k2L2 + k3L3)cos uo -k3L3 cos uo K k33

k33 = -(k1L1 - k2L2 + k3L3)x1o sin uo + k3L3x2o sin uo + A k1L21 + k2L22 + k3L23 B A cos2uo - sin2uo B

L3 = (L1 - L2)>2

L2

L1 (L1 + L2)/2 θ

G

m1, JG k1

k3

x2

x1

k2

m2

Figure 9.36 Three-degree-of-freedom system.

0 0 JG K

Exercises

521

The static equilibrium positions x1o, x2o, and uo are determined from k1 + k2 + k3 -k3 J k1L1 - k2L2 + k3L3

-k3 k3 -k3L3

k1L1 - k2L2 + k3L3 x1o m1g -k3L3 x2o = m2g L 0 M k1L21 + k2L22 + k3L23 K L Zo M

and uo = sin - 1Zo. Determine the natural frequencies and mode shapes when m1 = 10 kg, m2 = 40 kg, JG = 8 kg m2, k1 = 10,000 N/m, k2 = 35,000 N/m, k3 = 8,100 N/m, L1 = 1 m, and L2 = 0.3 m. 9.17 A six-cylinder, four-cycle engine driving a generator is modeled as an eight-degree-offreedom system, which for harmonic motions is of the form31

C [Kt] - v2 [ J ] D E £ F = E 0 F

where 21 0 0 0 [J] = 0 0 0 0

[Kt] =

51 -51 0 0 0 0 0 0

0 21 0 0 0 0 0 0

0 0 21 0 0 0 0 0

-51 102 - 51 0 0 0 0 0

0 0 0 21 0 0 0 0 0 -51 102 -51 0 0 0 0

0 0 0 0 21 0 0 0 0 0 -51 102 -51 0 0 0

0 0 0 0 0 21 0 0

0 0 0 0 0 0 98 0

0 0 0 -51 102 -51 0 0

0 0 0 0 kg # m2 0 0 0 49 0 0 0 0 -51 117 -66 0

0 0 0 0 0 -66 81 -15

0 0 0 0 * 106 Nm/rad 0 0 -15 15

and £ is a vector of the angular motion of the masses of the system. Determine the natural frequencies and mode shapes associated with the system and plot the mode shapes as shown in Figure 9.37. 9.18 Consider a spinning rigid circular shaft that is elastically supported at each end, as shown in Figure 9.38. The rotor is spinning at an angular speed of v rad/s about its axis. Furthermore, the rotor has a polar moment of inertia Jp about the axis of rotation, a transverse moment of inertia Jt about any axis in the plane of rotation, and support stiffness k1 and k2 in their respective horizontal directions. The free whirling speeds Æ can be determined from the solution to the eigenvalue problem [[K*] - Æ 2[M*]]{w} = {0}

31

G. Genta, Vibration of Structures and Machines: Practical Aspects, Springer-Verlag, New York, 1993.

522

Chapter 9

Dynamics and Vibrations

ω8=3041 ω =2805 7

ω =2406 6

ω =1862 5

ω4=1219 ω3=704.8 ω =458.3 2

ω =0 1

Figure 9.37 Natural frequencies and mode shapes of an eight-degree-of-freedom system.

where

K* = c

KM - 1K G¿M - 1K

KM - 1G d K + G¿M - 1G

M* = c

K 0

0 d M

and m 0 M = ≥ 0 0

0 Jt 0 0

0 0 m 0

0 0 ¥ 0 Jt

k1 0 K = ≥ 0 0

0 k2 0 0

0 0 k1 0

0 0 ¥ 0 k2

0 0 G = ≥ 0 0

k1, k2 ω Jp, Jt, m

k1, k2

Figure 9.38 Rigid spinning rotor on an elastic support.

0 0 0 Jpv

0 0 0 0

0 -Jpv ¥ 0 0

Bibliography

523 3500

3000

2500

Ω

2000

1500

1000

500

0

0

500

1000

1500

ω Figure 9.39 Campbell diagram for a spinning rigid rotor on an elastic support.

If m = 10 kg, Jp = 2 kg m2, Jt = 1.2 kg m2, k1 = k2 = 2.5 * 106 N/m, then plot the value of Æ as a function of v in the range 0 … v … 1,500 rad/s. This graph is an example of a Campbell diagram.32 The speed at which Æ = v is called the critical speed. The results should look like those shown in Figure 9.39.

BIBLIOGRAPHY B. Balachandran and E. B. Magrab, Vibrations, 2nd ed., Cengage, Toronto, ON, 2009. D. T. Greenwood, Principles of Dynamics, 2nd ed., Prentice Hall, Englewood Cliffs, NJ, 1988. F. J. Hale, Introduction to Space Flight, Prentice Hall, Englewood Cliffs, NJ, 1994. D. J. Inman, Engineering Vibration, Prentice Hall, Englewood Cliffs, NJ, 1994. E. B. Magrab, Vibrations of Elastic Structural Members, Sijthoff & Noordhoff,The Netherlands, 1979. L. Meirovitch, Elements of Vibration Analysis, McGraw Hill, New York, 1986. F. C. Moon, Applied Dynamics with Applications to Multibody and Mechatronic Systems, John Wiley & Sons, New York, 1998. A. H. Nayfeh and B. Balachandran, Applied Nonlinear Dynamics: Analytical, Computational, and Experimental Methods, John Wiley & Sons, New York, 1995. S. S. Rao, Mechanical Vibrations, 3rd ed., Addison-Wesley, Reading, MA, 1995. B. H. Tongue, Principles of Vibration, Oxford University Press, New York, 1996.

32

Ibid.

10 Control Systems Gregory C. Walsh

10.1 Introduction to Control System Design 525 10.1.1 Tools for Controller Design 527 10.1.2 Naming and File Conventions 528 10.2 Representation of Systems in MATLAB 528 10.2.1 State–Space Models 530 10.2.2 Transfer-Function Representation 535 10.2.3 Discrete-Time Models 538 10.2.4 Block Diagrams and SIMULINK 542 10.2.5 Conversion Between Representations 546 10.3 Response of Systems 547 10.3.1 Estimating Response from Systems 548 10.3.2 Estimating Response from Poles and Zeros 551 10.3.3 Estimating Systems from Response 558 10.4 Design Tools 560 10.4.1 Design Criteria 561 10.4.2 Design Tools 564 10.5 Design Examples 573 10.5.1 Notch Control of a Flexible Pointer 574 10.5.2 PID Control of a Magnetic Suspension System 582 10.5.3 Lead Control of an Inverted Pendulum 589 10.5.4 Control of a Magnetically Suspended Flywheel 596 10.6 Summary of Functions Introduced in Chapter 10 605 Exercises 606 The representation, design, and evaluation of control systems using MATLAB’s Controls Toolbox and SIMULINK are presented. 524

Section 10.1

Introduction to Control System Design

525

10.1 INTRODUCTION TO CONTROL SYSTEM DESIGN Many products contain control systems and engineers are often faced with the challenge of implementing them. MATLAB offers tools to assist a designer in this task. In this chapter, we discuss some of these tools and provide examples on how to employ them. There are many different examples of controls, but for the purpose of illustration, in this chapter we will focus on the use of MATLAB to design controllers for the servomotor shown in Figure 10.1. The motor shown in Figure 10.1 has an optical encoder attached to the shaft, an amplifier to drive the motor, and a joystick to command the motor. Between the joystick and the motor is an embedded computer. The computer can read the position of the joystick, track the angle of the motor shaft, and from this information apply an algorithm that computes the appropriate voltage that is applied to the motor. The embedded computer typically will make this computation many times a second. In the servomotor example, the design goal is for the angle of the motor to track the position of the joystick. If the joystick is moved quickly from one position to another, the motor should follow swiftly without overshoot or without oscillating around its new location. In addition, the position of the shaft should be very close to the position commanded by the joystick. Engineers solve many variations of control system design problems. The joystick might command the velocity of the motor instead of its position. The motor might be replaced by a heater and the angle encoder replaced by a temperature sensing device. If the controller adjusts the height of an elevator or the position of a driverless airport train, the design goal of being swift might not be nearly as important as not overshooting or oscillating about the final destination. If the controller is to point a telescope, then the final position becomes a dominant concern. Also, as a system’s components wear, the system should preserve as much as possible its performance, and in the event of failure it should fail safely. Control system design objectives fall into three categories: performance, safety, and robustness. In this chapter, we shall focus on quantifiable performance goals. Objectives verified over short time periods such as overshoot and swiftness (rise time) are called transient response design goals. Those tested over longer periods of time such as the eventual pointing accuracy of a telescope are called steady-state design goals. Other important controller design goals include insuring that a system does not enter a dangerous state nor do damage to itself or others; insulating the performance against disturbances and noise; and designing the controller so that the performance Motor v(t)

v(t) Joystick

R

L

J

Load

Controller Encoder

Figure 10.1 Common electric servomotor.

kb

dθ dt

k τi(t)

526

Chapter 10

Control Systems

is maintained even in the face of changes to the plant itself. Safety and graceful failure objectives are clear for such systems as the driverless airport train. Disturbances in control systems refer to uncontrolled and possibly unmeasured inputs to the system, such as wind buffeting a servomotor’s load. Noise in control systems typically enters in the measurement of its output. Although control systems and control design problems wear many guises, they contain certain key elements shown in the block diagram of Figure 10.2. The system being controlled is called the plant. In the servomotor example, the plant is composed of the motor, amplifier, and encoder. A plant generally has one or more inputs u(t), such as the power applied to the motor, and one or more outputs y(t), such as the motor angle measured by the optical encoder. The joystick in the servomotor example is a source of commands and these commands are called the reference r(t). The difference between the output of the plant y(t) and the commanded output reference r(t) is called the error signal e(t) = r(t) - y(t). The controller uses the error signal e(t), and possibly the output y(t) and reference r(t), to compute the needed u(t). The concept of using the output y(t) to compute the input u(t) is called feedback and is the hallmark of a control problem. The output is literally fed back into the input. MATLAB provides a tool called SIMULINK, which allows the engineer to literally draw the block diagram in Figure 10.2 and simulate the resulting behavior of the control system. The signals connecting the blocks such as r(t) and y(t) become time sequences represented by vectors. The contents of the blocks such as the plant or the controller may be filled with transfer-function and state–space models representing differential or difference equations. The engineer can also place a program in the controller block to run on the embedded processor through the MATLAB–MEX interface, or conversely, there are tools that instantiate the controller block in code for the embedded processor. In this chapter, we demonstrate how one may use the tools available in MATLAB for designing controllers and analyzing control problems. In Section 10.2, different representations of plants and controllers are reviewed and include block diagrams, transfer functions, and state–space models.The representation of models in discrete time, that is, as an embedded controller would view them, is also reviewed. With different representations in hand, we show in Section 10.3 how to compute the response y(t) given the plant and the input u(t). Section 10.3 also considers the inverse problem of system identification; that is, identifying the plant given the response y(t) and the input u(t). In Section 10.4, design tools such as bode plots, root locus, and

Reference r(t) +

Error e(t)

Input u(t) Algorithm

Controller Figure 10.2 Schematic diagram of a feedback loop.

Measured output y(t) Plant

Section 10.1

Introduction to Control System Design

527

LQR/LQG are presented. Finally, Section 10.5 is devoted to the detailed discussion of the four different applications. 10.1.1 Tools for Controller Design In control systems, the designer knows from the outset what the desired behavior of the systems is. The control design problem, therefore, involves changing the physical system so that the desired behavior occurs. This requires not only the ability to predict what will happen to a given model of the system but also what changes in the system model are needed to obtain the desired behavior. Thus, control system design is an inverse problem and design demands a good understanding of the solutions of ordinary differential equations. Ordinary differential equations are used to describe the behavior of many physical systems. Prior to the advent of computational tools like MATLAB, the understanding had to be gained by solving hundreds of differential equations by hand. Now one can direct MATLAB to solve the differential equations provided they know how to present them to the program. In this chapter, we consider linear, time-invariant ordinary differential equations. MATLAB has three representations of linear time-invariant ordinary differential equations that are convenient for the solution of control problems: 1. State–space equations 2. Transfer functions 3. Block diagrams State–space representations are time domain based and use matrices. Transfer functions are Laplace domain based and use polynomials of the complex variable s. Block diagram representations, available through the SIMULINK toolbox in MATLAB, visually depict the input and output connections. Conversion between the various representations is facilitated by built-in functions provided by MATLAB. In this chapter, only the performance design objectives in the following three categories are considered. 1. Transient 2. Steady state 3. Stability Transient design requirements focus on the short-term behavior of the system and address concerns such as responsiveness and stiffness. Steady-state requirements focus on the long-term behavior of the system, answering questions about how the system will perform over long periods of time. Standard input signals such as steps, ramps, and sinusoids are applied to test whether or not the system meets the transient and steady-state design requirements. MATLAB provides functions for finding the response of systems to the standard test signals. Transient and steady-state requirements are performance oriented, while feedback stability has more to do with safety. Feedback has the potential both to remove and to introduce instability into otherwise well-behaved physical processes, and instability must always be avoided.

528

Chapter 10

Control Systems

Transient and steady-state design requirements are typically in conflict, forcing one to make a design trade-off. In practice, limitations in control performance come from inherent limitations in the sensors, actuators, and the plant. Graphical tools used to solve control problems include Bode plots, Nyquist plots, and root locus plots. Linear algebra-based tools are used in more advanced design techniques such as LQG (linear quadratic Gaussian), Hq, and m-synthesis. For most single-input and single-output control designs, one of five controllers that are presented will provide a means to control the system. 10.1.2 Naming and File Conventions In the course of this chapter, we shall use a standard set of naming conventions. Because the description of even a simple differential equation requires multiple vectors and matrices, MATLAB has provided a method for gathering the necessary matrices and vectors under a single name. These collections of matrices, vectors, and even strings are called systems. We will use the name Plant to label systems whose structure is fixed during the controller design and the name Control to label the part that we will be able to choose. The final closed-loop system consisting of the Plant connected with the Control will be labeled clSys. If the feedback connection is broken, we will call the resulting open loop system olSys. The MATLAB functions used in this chapter to assemble and analyze control systems take systems as arguments, instead of vectors and matrices. Several example systems are considered in this chapter. For convenience, we shall create function M files that return these model systems. The functions will return a system object. The examples covered include the following: • • • • •

A permanent magnet motor with a load (MotorSS.m) A pointer with a flexible shaft (Pointer.m) A magnetic levitator (MagLev.m) An inverted pendulum (Pend.m) A flywheel (Fly.m).

Controllers such as lead, lag, PI, and PD are generated as needed.

10.2 REPRESENTATION OF SYSTEMS IN MATLAB We now return to the servomotor shown in Figure 10.1 to illustrate the different ways a set of differential equations may be represented. The controller, at any particular time, may select the voltage v(t) applied to the windings and may read the angular position of the rotor u(t). By reading through the manufacturer’s data sheets, one can find values of parameters describing the behavior of the motor such as the conversion factor kt which when multiplied by the current in the motor coils i(t) gives the torque applied to the motor shaft. Other parameters include the electrical resistance of the motor coils R and the motor coil’s inductance L . The motor as it is spun will act as a generator and produce a

Section 10.2

Representation of Systems in MATLAB

529

voltage proportional to the angular velocity of the rotor that is proportional to kb. The inertia J seen by the rotor is the sum of the rotor inertia Jm and the inertia of the load Jload. With the values of these parameters known, one can write down a set of coupled linear ordinary differential equations by using torque balance and circuit analysis. The resulting set of equations constitutes a model of the motor behavior. In the case of the servomotor, the following coupled ordinary differential equations1 describe the relationship between the input voltage v(t) and the output angle u(t): L J

du(t) di(t) + kb + Ri(t) = v(t) dt dt

d2u(t) 2

dt

+ b

(10.1)

du(t) - kti(t) = 0 dt

The electrical constants are R, L, kt, and kb, where R is the motor resistance, L is the winding inductance, kt is the conversion factor from current to torque, and kb is the back electromotive force (emf) generator constant. The total inertia J is usually dominated by the load inertia Jload. The motor friction b is generally small if there is no gearbox. The model described by Eq. (10.1) allows the engineer to predict the output motor angle u(t) given the input voltages v(t) applied over time. MATLAB provides the tools needed to estimate solutions to these differential equations. In general, the input to a control system or control system component is described by a real-valued function of time u(t). This quantity typically represents some physical variable under control, such as a force, voltage, or temperature. The output of a control system is also described by a real-valued function of time y(t). The value of this function is some measured quantity, such as position, pressure, or velocity. In this chapter, we will limit the discussion primarily to models where the relationship between the input function u(t) and the output function y(t) is represented by a linear time-invariant ordinary differential equation of the general form an

dny(t) dn - 1y(t) Á dmu(t) dm - 1u(t) Á +a + +a y(t) = b + b + +b0u(t) n 1 0 m m 1 dt n dt m dt n - 1 dt m - 1 (10.2)

where n Ú m. The coefficients of the equation, aj and bj, are constant real-valued numbers. In the servomotor example, these constants depend on the performance characteristics of the motor, which are either given in data sheets or are measured. System models in MATLAB are stored as objects, and much like the graphics objects of Chapters 6 and 7, the properties of these models are accessible though the use of get and set. Introductory control topics typically focus on differential 1

D. K. Anand and R. B. Zmood, Introduction to Control Systems, 3rd ed., Butterworth-Heinemann Ltd, Oxford, England, 1995.

530

Chapter 10

Control Systems

equations of the form shown in Eq. (10.2), and MATLAB provides three classes to represent this type of input–output relationship: • Transfer-function representation (class tf) • State–space representation (class ss) • Zero-pole-gain representation (class zpk). Discrete-time linear systems are also of great practical interest, since control loops are often implemented on computers. All three representations also have discrete-time versions, where the additional information concerning the sampling time is appended. Having the system models encapsulated as objects allows the user to attach auxiliary data to the representation. Examples of data fields attached to system objects include InputName, OutputName, and Notes. 10.2.1 State–Space Models State–space models use matrices to represent the ordinary differential equations and have gained popularity with the widespread use of computers.They can be more numerically reliable to solve than models represented by transfer functions. State–space models are models composed of a system of first-order-coupled differential equations. In order to represent the motor as a state–space model, we first have to convert Eq. (10.1) to a system of first-order equations as shown in Section 5.5.4. If we let x1(t) = u(t) x2(t) =

du(t) = v(t) dt

x3(t) = i(t) then Eq. (10.1) becomes dx1 = x2 dt kt dx2 b = - x2 + x dt J J 3 dx3 kb v(t) R = - x2 x3 + dt L L L If we define x(t) = [x1(t), x2(t), x3(t)]¿ u(t) = v(t) y(t) = u(t) = x1(t) then the state–space representation for the motor system is dx(t) = Ax(t) + Bu(t) dt y(t) = Cx(t) + Du(t)

(10.3)

Section 10.2

Representation of Systems in MATLAB

531

where 0 A = 0 J 0

1 -b/J -kb/L

0 kr /J K -R/L

C = [1 0 0 ]

0 B = 0 L M 1/L D = [0]

The matrices A, B, C, and D are the essential data needed to describe the differential equations in MATLAB. Notice that even though D is zero, the format demands all four matrices be provided. In general, state–space models of linear, time-invariant ordinary differential equations will take the form of Eq. (10.3), with four matrices A, B, C, and D of appropriate dimensions. Many linear algebra tools are implemented in MATLAB to compute and understand the nature of the solutions of equations described by these four matrices. We now illustrate these results with several examples. Example 10.1

State–space model of a servomotor

We shall create a function M file MotorSS that will return a state–space system model of the servomotor shown in Figure 10.1.The values assumed for the constants are L = 5 mH (motor inductance), R = 5 Æ (motor resistance), kb = 0.125 V/rad/s (back emf), kt = 15 Nm/A (motor torque), J = 0.03 kg # m2 (rotor inertia), and B = 0.01 Nm/rad/s (rotor friction). The state–space model is created in the following function M file: function Plant = MotorSS(Jload) if nargin < 1 Jload = 0; end; L = 5e-3; R = 5; kb = 12.5e-2; ki = 15; J = 3e-2 + Jload; b = 1e-2; A = [0, 1, 0; 0, -b/J, ki/J; 0, -kb/L, -R/L]; B = [0; 0; 1/L]; C = [1, 0, 0]; D = 0; Plant = ss(A, B, C, D); set(Plant, 'InputName', 'volts', 'OutputName', '\theta') set(Plant, 'StateName', {'\theta', '\omega','i'}) set(Plant, 'Notes', 'Small DC servomotor') The function ss collects the matrices A, B, C, and D into a single system object. Typing MotorSS in the command window displays a= \theta \omega i

\theta 0 0 0

\omega i 1 0 -0.33333 500 -25 -1000

532

Chapter 10

Control Systems

b= \theta \omega i

volts 0 0 200

\theta

\theta 1

c= \omega 0

i 0

d= volts \theta 0 Continuous-time model.

The default input label is u1, the default output label is y1, and the interior states are labeled x1, x2, and x3. We chose to label these quantities using our own labels, which was done with set.Thus, we have named the state–space variables u, v, and i. In addition, we have included a note to remind us what the model represents. Without labeling the model, the following would have been displayed in the command window. a= x1 x2 x3

x1 0 0 0

x1 x2 x3

u1 0 0 200

y1

x1 1

x2 1 -0.33333 -25

x3 0 500 -1000

x2 0

x3 0

b=

c=

d= u1 y1 0 Continuous-time system.

When the function MotorSS is called, only the system object is returned and not any of the constants. If we wish to recover the matrices A, B, C, and D, then we use [A, B, C, D] = ssdata(MotorSS) which displays to the command window the matrices A, B, C, and D as A= 1.0e+003 * 0 0.0010 0 0 -0.0003 0.5000 0 -0.0250 -1.0000 B= 0 0 200

Section 10.2

Representation of Systems in MATLAB

533

C= 1 0 0 D= 0

MATLAB provides functions that take system objects such as MotorSS as an argument. Suppose that we wish to examine the behavior of the motor when it is connected in a simple feedback configuration, as shown in Figure 10.3. From the schematic, we have that v(t) = r(t) - y(t) = r(t) - Cx(t) and, consequently, Eq. (10.3) becomes dx(t) = (A - BC)x(t) + Br(t) dt y(t) = Cx(t) + Dr(t) which amounts to replacing A in Eq. (10.3) with A - BC. MATLAB provides a function for the operation we have just described mathematically. The command is clSys = feedback(MotorSS, 1); which returns the closed-loop system. The number 1 in the second argument describes the transfer function of the feedback loop, which we have assumed is 1. Note that A of clSys is equal to A - BC of MotorSS. One can verify this by typing in the command window clSys = feedback(MotorSS, 1); Plant = MotorSS; clSys.a-(Plant.a - Plant.b*Plant.c) which returns a (3 * 3) matrix of zeros. The function feedback performed the algebra necessary to connect the motor system into a new configuration. Other MATLAB functions, which take systems as arguments, solve the differential equations when inputs are applied. In the next example, we use step to compute the response of the system to a step input signal.

r(t)

v(t)

+

DC Permanent magnet motor

y(t)

– y(t)

1 Figure 10.3 Simple unity gain feedback control system for controlling the servomotor.

534

Chapter 10

Example 10.2

Control Systems

Step response of a servomotor

We shall determine the response of the servomotor shown in Figure 10.1, connected with unity feedback as shown in Figure 10.3, to a step input. The script is [y, t] = step(feedback(MotorSS, 1)); plot(t, y, 'k-') xlabel('Time (s)') ylabel('Rotor angle\theta(t)(radians)') Upon execution, we obtain the results shown in Figure 10.4. We now extend the previous script to generate the step response of the servomotor for a variety of load inertias Jload. The script is as follows: t = 0:0.05:2; Jload = 0:0.01:0.1; data = zeros(length(t), length(Jload)); for i = 1:length(Jload) data(:,i) = step(feedback(MotorSS(Jload(i)), 1), t); end mesh(Jload, t, data) view([45, 30]) xlabel('Load inertia J_{load} (kg m^2)') ylabel('Time (s)') zlabel('Rotor angle \theta(t) (radians)')

1.4

Rotor angle θ(t)(radians)

1.2

1

0.8

0.6

0.4

0.2

0

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

Time (s) Figure 10.4 Step response of the servomotor control system of Figure 10.3.

0.9

Section 10.2

Representation of Systems in MATLAB

535

Rotor angle θ(t) (radians)

1.5

1

0.5

0 0

2 1.5 0.05

1 0.5 0.1

Load inertia J

0

2

load

Time (s)

(kg m )

Figure 10.5 Response of the closed-loop servomotor to a step command in position as a function of load inertia.

Upon execution, we obtain the results shown in Figure 10.5. The response overshoots the goal more as the load inertia Jload is increased. In Section 10.3, we shall develop a similar set of expectations for system responses as a function of pole and zero locations.

10.2.2 Transfer-Function Representation The transfer-function representation is obtained from the Laplace transform of the output divided by the Laplace transform of the input, assuming that the initial conditions are zero. Although this representation is less general and more sensitive to numerical errors than the state–space approach,2 it remains popular for the intuition it provides. MATLAB supports transfer-function representations as well as state–space representations. To find the transfer function of the servomotor, we take the Laplace transform of Eq. (10.1) and set the initial conditions to zero to obtain kbs®(s) + (sL - R)I(s) = V(s) (Js2 + bs)®(s) - ktI(s) = 0 Solving these equations for ®(s) gives ®(s) =

2

N(s) V(s) D(s)

MATLAB Control System Toolbox, User’s Guide, Version 4, The MathWorks, Natick, MA, 1992.

(10.4)

536

Chapter 10

Control Systems

where N(s) = kt

(10.5)

D(s) = JLs3 + (JR + bL)s2 + (bR + ktkb)s + 0 MATLAB represents these polynomials as vectors containing the polynomial coefficients, from highest power to the constant. In the case of the servomotor, the constant or zero-order coefficient of the denominator is zero. The format demands, however, that it be included in the vector even though it is zero, as was the case in the state–space representation for the matrix D. The Laplace transform of the general ordinary differential equation of the form given by Eq. (10.2) yields the following transfer function: H(s) =

Y(s) bmsm + bm - 1s m - 1 + Á + b0 = R(s) ansn + an - 1s n - 1 + Á + a1s + a0

(10.6)

where an Z 0 and n Ú m. To represent this transfer function in MATLAB, two vectors are formed, one for the coefficients of the numerator polynomial and one for the coefficients of the denominator polynomial. Hence, a transfer function is represented in MATLAB as two vectors, each containing the coefficients of s. Thus, the coefficients of the numerator polynomial are Num = [bm, ... b1, b0] and those of the denominator polynomial are Den = [an, . . . a1, a0] The coefficient an is often set to 1 by dividing all coefficients by it, but doing so is not required. The servomotor transfer-function model is now generated with the following function M file. It is the transfer-function representation of the state–space model generated by MotorSS. function PlantTF = MotorTF L = 5e-3; R = 5; kb = 12.5e-2; ki = 15; J = 3e-2; b = 1e-2; Num = ki; Den = conv([L, R], [J, b, 0]) + [0, 0, kb*ki, 0]; PlantTF = tf(Num, Den); When one types MotorTF

Section 10.2

Representation of Systems in MATLAB

537

in the command window, the following is displayed: Transfer function: 15 0.00015 s^3 + 0.15 s^2 + 1.925 s

The coefficients of the numerator and denominator polynomials, Num and Den, are the essential data for the transfer-function realization, just as the matrices A, B, C, and D were the essential data for the state–space realization. Names of the input, output, and other descriptive fields can be set as before by using set and get. To extract the coefficients of the numerator and denominator polynomials, we use [Num, Den] = tfdata(MotorTF, 'v') The character v tells the function to return Num and Den as row vectors. If v is omitted, the numerator will be returned in a cell array, which is used to represent multiple-input multiple-output (MIMO) systems. For the most part, we shall confine the discussion to single-input single-output (SISO) systems. Executing the above statement, we obtain Num = 0 0 0 15 Den = 0.0001 0.1500

1.9250

0

As with state–space systems, MATLAB functions accept transfer-function systems as input arguments. For example, the command step(feedback(MotorTF, 1)) computes and plots the response of the controlled motor subjected to a step input command. Notice that step and feedback are the same commands used for the state–space models.These functions will work with any representation of a system object. The roots of the denominator’s polynomial are called the poles of the system, and the roots of the numerator are called the zeros. The functions pole and tzero will find the poles and zeros of a given transfer function. The function pole returns the poles (roots of the denominator polynomial in the case of transfer functions). For example, p = pole(feedback(MotorTF, 1)) displays p= 1.0e+02 * -9.8744 -0.0645 + 0.0773i -0.0645 - 0.0773i

538

Chapter 10

Control Systems

which are the closed-loop poles of the simple unity feedback control system. The function tzero returns the transmission zeros of a plant. Thus, the execution of z = tzero(feedback(MotorTF, 1)) returns z as an empty matrix; that is, the system has no zeros. Both pole and tzero may be applied to state–space systems as well. The transfer function is related to the state–space model through the equation H(s) = C(sI - A) - 1B where I is the identity matrix. From this equation, it can be shown that the roots of the denominator equation, the poles, are equal to the roots of the determinant of (sI - A), which are the eigenvalues of the matrix A. The concepts of poles, zeros, and eigenvalues are frequently used to develop an understanding of the behavior of a control system. Poles and zeros so strongly characterize the behavior of a control system that MATLAB provides an additional format based on poles and zeros called the zeropole-gain format. In general, because the transfer function is a rational polynomial function, its numerator and denominator can both be factored to give H(s) = k

(s - z1) (s - z2) Á (s - zm) (s - p1) (s - p2) Á (s - pn)

(10.7)

The transfer function is uniquely defined by its list of poles and zeros together with the constant gain k. We now generate a zero-pole-gain model of the closed-loop control system shown in Figure 10.3. First, we generate the lists of the poles and zeros and then set the gain to 1 by dividing by the DC gain. The script is Poles = pole(feedback(MotorTF, 1)); Z = tzero(feedback(MotorTF, 1)); PlantZPK = zpk(Z, Poles, 1); PlantZPK = dcgain(feedback(MotorTF, 1))/dcgain(PlantZPK)*PlantZPK; step(PlantZPK) which upon execution also yields Figure 10.4. We see that the functions feedback, pole, and tzero also apply to this model. The unity gain controller step response shown in Figure 10.4 with these examples is slow and has a poor performance. We will see shortly that increasing the gain of the controller for the servomotor; that is, using a feedback gain greater than one, provides only a slight improvement. The MATLAB function feedback allows transfer functions and state–space models for controllers to be used in the place of the unity gain controller of this example. The performance of the servomotor system with controllers described by differential equations can be vastly superior to the simple feedback of this example. 10.2.3 Discrete-Time Models Although the motor current i(t) and the motor angle u(t) might operate continuously and a set of differential equations describe how v(t) and u(t) are causally related to

Section 10.2

Representation of Systems in MATLAB

539

each other, an embedded computer will only observe the angle and change the voltage v(t) at fixed times. To design a controller for an embedded computer, it is helpful to have a set of tools for studying the servomotor and the controller in a way that emulates the discrete nature of the embedded computer. MATLAB provides such a set of tools and methods to convert between continuous and discrete-time representations. Discrete-time versions of the state–space, transfer-function, and zero-pole-gain models can be generated by using c2d The function c2d uses, by default, the zero-order-hold approximation. Functions such as step, impulse, and feedback support discrete-time system models. The sampling time of the various components must be the same when combining elements. If c2d(MotorSS, 0.001) is typed in the command window, the following system description is displayed: a= \theta \omega i

\theta 1 0 0

\theta \omega i

volts 1.3203e-05 0.036748 0.12617

\omega 0.00099818 0.99507 -0.015768

i 0.00018374 0.31535 0.36458

\omega 0

i 0

b=

c= \theta

\theta 1

d= volts \theta 0 Sampling time: 0.001 Discrete-time model.

Note that the matrices a and b of the discrete-time model are substantially different from those of the continuous time models. The state equations for discretetime models evolve using difference equations, not differential equations. In the case of state–space models, we have for time indexed by k, x[k + 1] = Adx[k] + Bdu[k] y[k] = Cx[k] + Du[k] which are matrix multiplications.These matrix multiplications match the behavior of the continuous-time differential equations given by Eq. (10.3) at sample times t = k¢ ,

540

Chapter 10

Control Systems

where ¢ is the sampling interval as long as the matrices Ad and Bd are chosen properly. With a zero-order hold approximation, the discrete time matrices are given by3 Ad = e A¢ ¢

Bd =

3

e A(¢ - t)Bdt

0

which maps all left-half complex plane eigenvalues into the unit circle. The triangle approximation, the bilinear approximation (Tustin), the prewarped Tustin approximation, and the matched approximation are also available in MATLAB. If the command c2d(MotorTF, 0.001) is typed in the command window, then the following polynomial representation of a discrete-time system is displayed. Transfer function: 1.32e-005 z^2 + 4.191e-005 z + 8.023e-006 z^3 - 2.36 z^2 + 1.727 z - 0.3678 Sampling time: 0.001 Example 10.3

Conversion of a continuous-time model to a discrete-time model

We shall convert a continuous-time model to a discrete-time model with a sampling time of 1 ms. The script is as follows: [ydiscrete, time] = step(feedback(c2d(MotorSS, 0.001), 1)); ycontinous = step(feedback(MotorSS, 1), time); plot(time, ycontinous, 'k-.', time, ydiscrete, 'k-') grid on xlabel('Time (s)') ylabel('Response') legend('Continuous', 'Discrete', 'Location', 'SouthEast') The result of executing this script is shown in Figure 10.6, where it is seen that there is no observable difference between the two responses. This virtually identical response is due to the very small sampling time chosen. As the sampling time increases, however, one would find that these responses would start to diverge. In other words, a lot happens to the system in between sampling times when the embedded computer is not paying attention. An investigation of how to keep the responses the same would show that one should adjust the voltage on the motor at a higher rate than the change of the motor itself and that in the conversion to discrete time some information is lost in the operation. For this reason, design will be considered primarily using continuous time in this chapter, and some implementation will be done in discrete time because embedded controllers are typically used to implement a control loop. 3

See, for example,T. Kailith, Linear Systems Theory, Prentice Hall, Englewood Cliffs, NJ, 1980 and K.Astrom and B. Wittenmark, Computer Controlled Systems, 3rd ed., Prentice Hall, Upper Saddle River, NJ, 1997.

Section 10.2

Representation of Systems in MATLAB

541

Figure 10.6 Comparison of the discrete-time step response and the continuoustime step response. (The continuous-time step response and the discrete-time response overlap.)

In discrete time, transfer functions are polynomials of the complex variable z instead of the complex variable s. The variable z is used to represent one sample delay. Consider the following generic discrete-time transfer function: H(z) =

Y(z) bmzm + bm - 1zm - 1 + Á + b0 = R(z) anzn + an - 1zn - 1 + Á + a1z + a0

(10.8)

Multiplying both sides of Eq. (10.8) by R(z), we obtain anznY(z) + an - 1zn - 1Y(z) + Á + a0Y(z) = bmzmR(z) + bm - 1zm - 1R(z) + Á + b0R(z) This can be converted to discrete sample times any[j + n] + an - 1y[j + n - 1] + Á + a0y[j] = bmr[j + m] + bm - 1r[j + m - 1] + Á + b0r[j] Setting k = j + n and p = n - m, we solve for y[k] and obtain y[k] =

1 (-an - 1y[k - 1] - Á - a0y[k - n] + bmr[k - p] an - 1 + bm - 1r[k - p - 1] + Á + b0r[k - p - m])

(10.9)

Implementing control and filtering algorithms in an embedded system often involve a computation such as Eq. (10.9), which is known as an infinite impulse

542

Chapter 10

Control Systems

response (IIR) filter. A computer can implement this type of algorithm at each sample time with a series of multiplications and additions as long as the computer stores previous values of the computed output and measured inputs. Special-purpose computer architectures for embedded control and filtering systems, called digital signal processors, have been developed to implement this equation and other similar equations quickly. For many control implementations, however, special processors are not needed because the time scales of physical systems are much slower than the computational times of general-purpose microcontrollers.

10.2.4 Block Diagrams and SIMULINK A typical control system is composed of several distinct units, such as the plant and the controller. More complicated structures involving many distinct subsystems are often studied, and these input–output maps are sketched by system designers using block diagrams, the basic elements of which are shown in Figure 10.7. MATLAB has provided a collection of built-in functions and operators to compute their transfer functions, a process referred to as block-diagram algebra. MATLAB supplies

Block diagram

Equivalent

H2(s)

H1(s)

H3(s) = H1(s)*H2(s)

(a) Cascade H1(s) + H3(s) = H1(s)+H2(s) + H2(s)

(b) Parallel +

H4(s) H3(s) = feedback (H4(s), H5(s))

– H5(s)

(c) Feedback Figure 10.7 Most common block-diagram algebra operations: (a) Series (cascade). (b) Parallel. (c) Feedback.

Section 10.2

Representation of Systems in MATLAB

543

standard operators +, -, *, / and provides feedback, series, and connect, among others, so that from the command line the block diagrams may be implemented and simulated. The SIMULINK toolbox provides a graphical user interface from which one can literally sketch the block diagram and simulate the characteristics of the resulting system. The cascade connection of two systems shown in Figure 10.7a can be determined using the multiplication operator. For example, if system objects H1 and H2 represent the transfer functions H1(s) and H2(s), respectively, then the resulting cascaded system H3(s) can be obtained by H3 = H1*H2 Division is also supported, but is applicable only to strictly proper models and will not be considered here. The parallel connection of two systems illustrated in Figure 10.7b can be found using the addition and subtraction operators. If systems H1 and H2 are connected in parallel, then the resulting system is H3 = H1 + H2 Subtraction is obtained by changing the sign in the above equation to minus. The feedback connection shown in Figure 10.7c differs from the other two operations in that a function, instead of an operator, implements the operation. If systems H4 and H5 are connected in feedback, then the resulting closed loop system is given by H3 = feedback(H4, H5); Negative feedback is assumed; if positive feedback is desired, then H3(s) is obtained from H3 = feedback(H4, H5,+1); One common control configuration is called cascade feedback, which was shown in Figure 10.2. This configuration is the combination of Figure 10.7a, the cascade, with Figure 10.7c, feedback. In this case, the output of the Plant (H2) is subtracted from the input, and the resulting error signal is fed to the Controller (H1). To build the closed-loop model, we set H4 = Controller*Plant and H5 = 1 The closed-loop system clSys is then obtained from clSys = feedback(Controller*Plant, 1); The functions feedback and series and the operators *, + , and - also support MIMO systems by allowing vector-valued inputs and outputs. In addition, matrix

544

Chapter 10

Control Systems

operations allow the quick construction of MIMO systems. For example, a two-input, one-output system H3 can be created from SISO plants, H1 and H2, using H3 = [H1, H2] A one-input, two-output system can be created with H3 = [H1; H2] The subsystems H1 and H2 can be extracted from H3 using the same operations used to extract submatrices discussed in Section 2.4. Cascade, parallel, and feedback connections require specifications as to which inputs are connected to which outputs when working with MIMO systems. The functions series and parallel are provided for these purposes. More complicated MIMO structures may be formed using ift and connect. We consider SISO control systems almost exclusively. If the systems H1 and H2 are of different types, then an implicit conversion is performed so that the resulting model is homogeneous. MATLAB favors state–space models above all others and, therefore, if any one of the models in a computation is a state–space model, the result will be in state–space form. Between transfer-function and zero-pole-gain models, transfer-function models are favored. SIMULINK SIMULINK allows a designer to model and simulate systems by constructing them from a large library of components. The components are selected from the library, dragged to a modeling window, and connected and their individual parameters are specified. Then the model is run and the results displayed. SIMULINK is invoked by typing simulink in the command window. Variables defined in the command window are accessible from the SIMULINK window. We shall illustrate how to model the DC servomotor with SIMULINK. The final result is shown in Figure 10.8. To generate the plant model, we first define it in the command window and extract the system matrices. Then we start SIMULINK. Thus, [A, B, C, D] = ssdata(MotorSS); simulink

Step

1

x' = Ax+Bu y = Cx+Du

Slider Gain

State–Space

Scope

Figure 10.8 Block-diagram model of a DC servomotor created in SIMULINK.

Section 10.2

Representation of Systems in MATLAB

545

This brings up the SIMULINK library browser window, which displays a list of available libraries and includes the SIMULINK main library. First, we click on the new page icon (white rectangle) to open a SIMULINK modeling window. Then, we return to the browser window and double-click on SIMULINK, which displays the following directory of SIMULINK component libraries: Commonly Used Blocks Continuous Discontinuities Discrete Logic and Bit Operations Lookup Tables Math Operations Model Verification Model Wide Utilities Ports & Subsystems Signal Attributes Signal Routing Sinks Sources User-Defined Functions Additional Math & Discrete To open the components (blocks) of any of these libraries, one clicks on the library name of interest. We start by displaying the Continuous library. Next, we click on State–Space and, keeping the mouse button depressed, drag a copy of this library component to the modeling window. We place the component at its desired location and release the mouse button. Next, we go to the Math Operations library and sequentially select Slider Gain and Sum and drag them one at a time to the model window, placing each, respectively, to the left of the State–Space component. Then, we go to the Sources library and select Step and place it in the modeling window to the left of all components placed so far. The last component we select is Scope from the Sinks library. It is placed to the right of all components selected. The next steps are to specify the parameters of the components.We start with the State–Space block and double-click on it. This brings up a State–Space parameter window with five places to enter data: A, B, C, D, and Initial condition. Since these matrices have been defined in the command window, we type A, B, C, and D, respectively, for each of the four quantities. Had we selected different names in the command window, we would have entered those names in their appropriate places. We leave the initial condition at 0. The signs of the summation are changed in the same manner; the second sign is changed to negative. The range of gains for the slider may also be selected. A range of 0 for the smallest and 15 for the largest is recommended. The center selection of 1 is left as is. We use the default values for the Step block except for Step time (time offset or delay), which we set to 0. Double-clicking on Scope

546

Chapter 10

Control Systems

brings up a simulation of an oscilloscope display. There are no parameters to select at this point. We now connect the components to form a feedback control system. Each of the components in the project window may be moved and resized using the mouse, if desired. Connections are made at the small protrusions on the exterior of the blocks; by default, inputs are on the left and outputs on the right. Connections are made using the mouse and dragging a line from an output to an input. Place the crosshairs at the output of the Step block and, with the left button depressed, move the crosshairs to the plus ( + ) input of the Sum component. Continue this process until the connected block diagram looks like that shown in Figure 10.8. The line that goes from the middle of the State–Space block and the Scope to the negative input of the summing device is created as follows. Place the cursor (arrowhead) on the existing line between these two blocks and, while maintaining this position, depress the Ctrl key on the keyboard and then the left mouse button. While holding both of these down, move the crosshairs to the negative input of the summing device and release the mouse button and the Ctrl key. To adjust the line, simply click on it and, with the mouse button depressed, move it up or down to its desired position. The placement and size of each component is not material, only the connections. There will be models in which, prior to making these connections, we will have to flip one or more of the blocks around so that the inputs are on the right and the outputs on the left. This operation is performed by selecting (clicking on) the block and then going to the Format pull-down menu and selecting Flip Block. Also from the format menu one can suppress the display of the block identifier beneath the block. Select the block and then select Hide Name. To put the identifier back, select the block and then select Show Name. These two choices do not appear together. To run the simulation, we go to the Simulation menu and select Start. After the simulation has executed, double-click on Scope to see the results. Use the x- and y-axis zoom icons to obtain the desired resolution for the image. Note that under the Simulation menu, one may adjust the parameters of the simulation, such as the integration method used, by selecting Parameters. If the diagram is not completely or correctly connected, the simulation will not run, and MATLAB will send error messages to that effect to the command window and to a special popup window. When rendered as indicated in Figure 10.8, the results shown in Scope are those given in Figure 10.4. Another example of using SIMULINK is given in Section10.5.2. 10.2.5 Conversion Between Representations MATLAB provides functions for conversion between the three representations by using the system constructor functions ss, tf, and zpk. For example, the transferfunction model can be generated from the state–space model using the state–space model MotorSS in tf. PlantTF = tf(MotorSS) Slight differences in the coefficients of system models result from numerical errors in the conversion process.

Section 10.3

Response of Systems

547

The state–space model can be generated from the transfer-function model by using ss. Thus, PlantTF = tf(MotorSS); PlantSS = ss(PlantTF) The resulting system matrices A, B, C, and D are not the same matrices that were defined in MotorSS, which points out that unlike the transfer-function model, there is no unique state–space representation for a given system. One typically uses ssbal to scale the input, state, and output quantities to make the simulation as well conditioned as possible. Thus, PlantTF = tf(MotorSS); PlantSS = ss(PlantTF) PlantBal = ssbal(PlantSS) attempts to find the best conditioned representation of the system. The zero-pole-gain model can also be converted from the state–space or transferfunction models. For example, the zero-pole-gain model could have been generated from the state–space model by using PlantTF = tf(MotorSS); PlantSS = ss(PlantTF) PlantZ = zpk(PlantSS) This and the other conversion methods make use of the numerical root-finding algorithms within MATLAB and are sometimes subject to large numerical errors, especially for systems of order 10 and higher.4 In practical situations, it is recommended that one resist changing representations too often.

10.3 RESPONSE OF SYSTEMS In this section, we shall illustrate the use of a number of tools available for estimating the response of a system and conversely, for estimating a system given its response. Functions for computing the response of a system applicable to all three representations in both continuous and discrete time include step, impulse, initial, and lsim. The SIMULINK toolbox also supplies a number of built-in signal sources that simplify simulation when using block diagrams. For estimating a system from its response, we will use the function arx. The locations of the poles and zeros, either in a transfer-function or state–space representation, are a shorthand notation that control engineers use to 4 N. E. Leonard and W. S. Levine, Using MATLAB to Analyze and Design Control Systems, Benjamin/ Cummings, Redwood City, CA, 1992.

548

Chapter 10

Control Systems

estimate the responses of a system. Many design specifications can be translated into pole and zero location constraints. The controller design problem often becomes one of designing feedback so that the closed-loop poles lie in desired regions of the complex plane. Zeros cannot be moved by feedback. 10.3.1 Estimating Response from Systems The response of a control system to a step input is the most commonly used benchmark to compare different controller designs. The MATLAB function step computes the step response and, if the return values are not requested, it plots the results. The function automatically determines a suitable range of times in which to compute the simulation if a time vector is not given. Executing the script t = linspace(0, 0.8, 100); theta = step(MotorSS, t); plot(t, theta) xlabel('Time (s)') ylabel('\theta(t)') we obtain Figure 10.9. From this figure, it is seen that the step response of the motor is a ramp, because if a constant voltage is applied to the windings, eventually a constant speed will be reached. The MATLAB function impulse is used in the same manner as step, except that it computes the response of the system to an impulse. 6

5

θ(t )

4

3

2

1

0

0

0.1

0.2

0.3

0.4

0.5

Time (s) Figure 10.9 Step response of the motor without feedback.

0.6

0.7

0.8

Section 10.3

Response of Systems

549

MATLAB does not supply functions for all standard test inputs. However, MATLAB does provide the capability of determining the response of a system to an arbitrary input by using lsim (sys, u, t) where sys is the system under consideration and u is a vector representing the amplitude of the input as a function of time t. The lengths of u and t must be equal. Example 10.4

Tracking error of a motor control system

We shall determine the steady-state tracking error of the motor control system given in Figure 10.3. The steady-state tracking error is the eventual difference between the desired position and the actual position when the input is a ramp. We will use a ramp with a slope of 1 over the range 0 … t … 1. For the DC servomotor, the error is e(t) = u(t) - t for 0 … t … 1. The script is as follows: t = linspace(0, 1, 100); theta = lsim(feedback(MotorSS, 1), t, t); plot(t, t'-theta, 'k-') error = t(end) - theta(end); hold on plot([0, t(end)], [error, error], 'k--') xlabel('Time (s)') ylabel('Error e(t)')

0.16 0.14 0.12

Error e(t)

0.1 0.08 0.06 0.04 0.02 0

0

0.2

0.4

0.6

0.8

Time (s) Figure 10.10 Tracking error of a control system as a function of time.

1

550

Chapter 10

Control Systems

Upon execution, we obtain Figure 10.10. Note that after an initial transient, the error settles to approximately 0.13. A control system design objective could be to reduce this steady-state error to less than 0.05. For a state–space system, the MATLAB function initial(sys, x0) runs a simulation with nonzero initial conditions, where sys is the system under consideration and x0 is a vector of initial conditions.

Example 10.5

Response of a DC motor to initial conditions

Consider the DC motor given in Figure 10.3 with an initial position u(0) = 0, an initial current i(0) = 0, and an initial angular velocity of v(0) = 5 rad/s. In addition, we assume a gain of 2. If the voltage across the windings is kept at zero (possibly by shorting them), then the following script will compute the response of the motor to these initial conditions. x0 = [0; 5; 0]; [theta, t, x] = initial(feedback(2*MotorSS, 1), x0); plot(x(:,1), x(:,2), 'k-') grid on xlabel('\theta(t) (radians)') ylabel('\omega(t) (radians/s)') where x(:,1) = u(t), x(:,2) = v(t), and x(:,3) = i(t). The result of executing this script is shown in Figure 10.11. 5

4

ω(t ) (radians/s)

3

2

1

0

–1 –2 –0.05

0

0.05

0.1 0.15 θ(t ) (radians)

0.2

0.25

0.3

Figure 10.11 Phase plot of the rotor with an initial angular velocity v(t) = 5 rad/s.

Section 10.3

Response of Systems

551

10.3.2 Estimating Response from Poles and Zeros When using MATLAB to solve control problems, it is important to have a qualitative understanding of the solution of differential equations. Since controller design is an inverse process, having this qualitative understanding allows one to know what the system should be like in order to achieve some desired behavior. MATLAB can be used to help develop this important qualitative understanding of the solutions to differential equations by solving many equations of particular types. In this section, we shall compute the step response to a number of systems characterized by their pole and zero locations. First, we consider a first-order system with one pole and no zeros. We assume that the pole is located at -s; therefore, the transfer function is s H(s) = s + s The numerator is set to s to keep the DC gain of the system at 1. We now obtain the response of this system to a step input. Example 10.6

Step response of first-order system to a range of pole locations

We shall generate a series of step responses for a series of pole locations ranging from slow (s = 0.1) to quick (s = 2). The script is t = 0:0.1:10; polevect = 0.1:0.1:2; hold on for i = 1:length(polevect) 1 σ=2 0.9 0.8

Step response

0.7 0.6 0.5 0.4 0.3 0.2 σ = 0.1 (Δp = 0.1)

0.1 0

0

2

4

6

8

Time Figure 10.12 Response of a first-order system for a variety of pole locations s.

10

552

Chapter 10

Control Systems

y = step(tf([polevect(i)], [1, polevect(i)]), t); plot(t, y, 'k-') end xlabel('Time') ylabel('Step response') text(0.2, 0.95, '\sigma = 2') text(3, 0.1 ,'\sigma = 0.1 (\Delta\sigma = 0.1)') The results from executing this script are shown in Figure 10.12.

As the pole of a first-order system approaches the imaginary axis, that is, as s becomes small, the control system becomes more sluggish. Sluggishness is usually not a good characteristic of a control system, but sometimes, if the slow response is with respect to some disturbance that needs to be rejected, this slowness is a good characteristic. The best location of the system poles will depend on the objective of the control system. If two first-order systems are cascaded, then the system becomes a second-order one. Many mechanical systems behave as second order, so a good understanding of second-order systems is important. Consider the following second-order system: H(s) =

s2 + v2 s2 + 2ss + s2 + v2

(10.10)

The system has complex poles located at -s ; jv, where s is the real part of the pole locations and v is the complex part. In general, s represents the amount of damping in the system and v specifies the strength of the storage mechanism or spring. However, since we are interested in relating the system’s response to the location of the pole, the transfer function is parameterized by the pole location. We shall now examine Eq. (10.10) as a function of its pole locations. Example 10.7

Step response of second-order system to a range of pole locations

We shall explore the response of the system represented by Eq. (10.10) to a variety of pole locations. First, we plot the step response as a function of s with v = 1.0. Then, we plot the step response as a function of v with s = 0.5. We also sketch the locus of pole locations next to each response plot. The script is as follows: t = 0:0.4:10; sigma = linspace(0.05, 1.0, 10); data = zeros(length(t), length(sigma)); omega = 1.0; for i = 1:length(sigma) data(:,i) = step(tf([sigma(i)^2 + omega^2], [1, 2*sigma(i) sigma(i)^2+omega^2]), t); end subplot(2,2,1) mesh(t, -sigma, data') ylabel('\sigma') xlabel('Time') zlabel('Response') title('Response as a function of \sigma: \omega = 1.0') data = zeros(length(t), length(omega)); sigma = 0.5; omega = linspace(0.3,2.0,10);

Section 10.3

Response of Systems

553

for i = 1:length(omega) data(:,i) = step(tf([sigma^2 + omega(i)^2], [1 2*sigma sigma^2+omega(i)^2]), t); end subplot(2,2,3) mesh(t, omega, data') ylabel('\omega') xlabel('Time') zlabel('Response') title('Response as a function of \omega: \sigma = 0.5') subplot(2,2,2) hold on plot([-0.1, -0.1], [1.0, -1], 'x') plot([-0.1, -1], [1.0, 1.0]) plot([-0.1, -1], [-1.0, -1.0]) plot ([-1, -1], [1.0, -1], 'kp ki = s s ki 0.46

0.3

0.16

200 150

0.92

Imaginary axis

100 0.98

50 0 −50

300

250

−300

−250

200

150

100

50

0.98

−100 −150 −200

0.92

0.84

−250 −350

0.72

0.6

−200

0.46

−150 −100 Real axis

0.3

0.16

−50

0

50

100

Figure 10.33 Root-locus plot of the PD-cascade control magnetic-levitation system.

586

Chapter 10

Control Systems

with parameters kp and ki. The PI controller has one pole at the origin and a zero at -ki/kp. If the zero is close to the pole relative to the locations of the other poles and zeros of the system, then the effect of the PI controller on the closed-loop transient behavior is negligible when it is cascaded with the PD controller to form a PID controller. Hence, the feedback gain of 150 may still be used. The effect of the PI controller on the steady-state error is large. For this control system, we choose kp = ki = 1. The following script simulates the impulse response of the closed-loop system with the linearized model of the magnetic levitator. PD = tf(-1*[1, 20], [1, 50]); PI = tf([1, 1], [1, 0]); [y, t] = impulse(feedback(150*PI*PD*MagLev, 1)); plot(t, y, 'k-') grid xlabel('Time') ylabel('Impulse response') The result of executing this script is shown in Figure 10.34, which is the closed-loop system of the linearized plant model. However, determining the stability of the system with the nonlinear model in the loop is of far greater interest. The nonlinear system will now be simulated using SIMULINK. We will require a block called S-Function, which is a user-defined function. We will call this user-defined function MagModel, which is given by function [sys, x0] = MagModel(t, x, u, flag) m = 0.1; g = 9.82; R = 5; L = 0.040; k = 0.01; h0 = 0.02; 70 60 50

Impulse response

40 30 20 10 0 −10 −20 −30

0

0.2

0.4

0.6

0.8

1

Time Figure 10.34 Impulse response of the linear approximation to the magnetic-levitation system.

Section 10.5

Design Examples

587

i0 = h0*sqrt(m*g/k); switch flag case 1 xdot = zeros(3,1); xdot(1) = x(2); xdot(2) = m*g-k*x(3)^2/x(1)^2; xdot(3) = -R/L*x(3) + 1/L*u(1); sys = xdot; case 3 sys = x(1); case 0 sys = [3 0 1 1 0 0]; x0 = [h0+0.1*h0; 0; i0]; otherwise sys = []; end The four parameters to be passed to MagModel are in the order specified by SIMULINK’s S-Function: time t, state variables x, inputs u, and an integer flag. Hybrid models with both discrete and continuous states may be constructed using S-Function; we consider those parts that enable continuous nonlinear models. SIMULINK queries the user function to determine everything about the nonlinear model; flag determines the purpose of the query.When flag = 1, the function returns the derivatives of x using time t, states x, and input u given by Eq. (10.12).When flag = 3, the function returns the outputs. Finally, when flag = 0, the function returns a vector sys whose components are, in order, the number of continuous states, the number of discrete states, the number of outputs, the number of inputs, the number of roots, and a final flag that is set to 1 if the system has direct feedthrough. In the case of the magnetic levitator, sys = [3 0 1 1 0 0], which indicates three continuous states, no discrete states, one input, one output, no roots, and no feedthrough. When flag = 0, we also return the initial conditions of the continuous states—that is, the state of the system when it is first started.The equilibrium of the system is x(0) = [h(0) 0 i(0)]'. We will start the system near but not at the equilibrium position, by setting the initial value h(0) 10% larger than the equilibrium value. With such an initial condition, the controller must take action or the ball will drop away from the magnet. The deviation for the equilibrium position must be small, because the system is nonlinear and the linear behavior on which the controller is based is only valid for small perturbations. In addition, if the ball drops away too far, the coil might not be strong enough to pull it back to the equilibrium position. The controller will be specified using variable names rather than numerical values; therefore, these variables must be defined in the command window prior to running the simulation in SIMULINK. To generate these variables and start SIMULINK, we run the following script in the command window: PD = tf(-1*[1, 20], [1, 50]); PI = tf([1, 1], [1, 0]); v0 = 0.991; h0 = 0.02; [num, den] = tfdata(150*PD*PI, 'v'); simulink

588

Chapter 10

Control Systems

The values of v0 and h0 were computed from the values given. We now use SIMULINK to generate the block diagram shown in Figure 10.35. From the Math library, we use Sum and Gain. For Gain, we enter a gain of 2. From the User Defined Functions library, we use S-Function, which, in turn, will use MagModel. This assignment is done by double-clicking on the S-Function block in the modeling window and entering MagModel for the S-Function name. From the Continuous library, we use Transfer Fnc. Then we double-click on this block and enter the variable names num and den for the numerator and denominator, respectively, since these two quantities have been determined in the fourth line in the script that was run prior to entering SIMULINK. From the Sources library, we use Constant to enter a voltage offset and a height offset. These quantities are used to represent errors. Their values are defined by double-clicking on the block and entering either numerical values or variable names, if the variable names have been or will be assigned numerical values in the command window. We choose the latter method since v0 and h0 have been defined in our previously run script. For the connectivity shown, we go to the Format pull-down menu and apply Flip Block sequentially on the right-hand Sum block, on the Gain block, on the Transfer Fcn block, and on the right-hand Constant block. Finally, we use To Workspace from the Sinks library to record the bearing’s height (Height) and the magnitude of the magnet’s coil voltage (Vapp) as a function of time. The values of time are stored in the array Time by Clock, which is from the Sources library. These variable names are entered in each of these three blocks by double-clicking on them and entering the appropriate name as indicated in Figure 10.35. In addition, Array in Save Format was selected for each of these variables. The shadows around these three blocks are obtained using Show Drop Shadow from the Format pull-down menu. From this same menu, we have also selected

Time Clock Vapp

v0

+

Height

MagModel



Constant num(s) den(s)

2 Gain



+ h0 Constant1

Figure 10.35 SIMULINK block diagram for the nonlinear magnetic-levitation system.

Section 10.5

Design Examples

589

1.6 50h(t ) v(t )

Initial conditions h(0) = 0.022 m v(0) = 0.991 V

1.5 1.4

Vapp and h(t )

1.3 1.2 1.1 1 0.9 0.8 0.7

0

0.5

1

1.5

2

2.5

3

3.5

4

Time (s) Figure 10.36 Response under PID control of the nonlinear magnetic suspension system to initial conditions and modeling errors.

Hide Name for each of them. The quantities Vapp, Height, and Time are saved to the workspace each time the simulation is run and can then be displayed with plot. In Figure 10.36, we show the quantities Vapp and Height as a function of Time. These quantities were obtained with the following script run in the command window after the SIMULINK entity was executed. The values of Height have been scaled by a factor of 50. plot(Time, 50*Height, 'k-', Time, Vapp, 'k--.') legend('50h(t)', 'v(t)') text(1, 1.5, 'Initial conditions') text(1.2, 1.45, 'h(0) = 0.022 m') text(1.2, 1.4, 'v(0) = 0.991 V') xlabel('Time (s)') ylabel('V_{app} and h(t)') axis([0 4 .7 1.6]) 10.5.3 Lead Control of an Inverted Pendulum We shall design a lead controller for an inverted pendulum by using root-locus techniques. Consider an inverted pendulum mounted on a disk as shown in Figure 10.37. The objective of the control system is to command the position of the disk while

590

Chapter 10

Control Systems

m r l

J d

Figure 10.37 Inverted pendulum on a disk.

keeping the pendulum upright. Both the angle of the disk c and the angle of the pendulum u are measured. The equations of motion are ml 2 mrl cos(u)

d 2c d 2u du + mrl cos(u) = mgl sin(u) + b1 2 2 dt dt dt

(10.15)

2 dc d 2u du 2 2 d c + (J + mr ) = mrl sin(u)a b + b2 + tm 2 2 dt dt dt dt

where m is the mass of the bob, l is the length of the pendulum, r is the radius of the disk and the radius of the bob attachment, d is the thickness of the disk, J = rpdr4/4 is the inertia of the disk, b1 is the friction coefficient of the revolute joint of the pendulum, b2 is the friction in the revolute joint of the disk, and tm is the torque applied by the motor attached to the base of the disk.As with the magnetic bearing, the equations of motion may be linearized about the operating point when u and du/dt are small. We define the elements of the state vector x as x1(t) = u(t) x3(t) =

du dt

x2(t) = c(t) x4(t) =

dc dt

Substituting these equations into Eq. (10.15) and assuming that u and du/dt are very small and, hence, we can neglect all terms of order 2 and higher, we obtain dx1 = x3 dt dx2 = x4 dt

Section 10.5

Design Examples

ml2

591

dx3 dx4 + mlr = mglx1 + b1x3 dt dt

dx4 dx3 + (J + mr 2) = b2x4 + tm dt dt

mlr or in matrix form

# Mx = Qx + Wu where W = [0 1 0 M = ≥ 0 0

0 0 1 0 0

0

1]¿

0 0 ml 2 mlr

x = [x1 0 0 ¥ mlr J + mr 2

x2

x3

# x = dx>dt

x4]¿

0 0 Q = ≥ mgl 0

0 0 0 0

1 0 b1 0

0 1 ¥ 0 b2

u = tm

The upright position corresponding to x(t) = 0 is an equilibrium point of the system at which u = tm = 0. The linearized equations of the inverted pendulum system about the upright position are represented as a state–space system in the following function M file Pendulum. This system has the angle of the pendulum u and the angle of the disk c as the outputs. Therefore, the output Plant of Pendulum is a system with two outputs and one input, which can be accessed as follows: Plant(1, 1) is the transfer function from tm to u and Plant(2, 1) is the transfer function from tm to c. We assume the length of the pendulum is 30 cm, the mass of the bob 0.2 kg, the radius of the disk 15 cm, the thickness of the disk 1 cm, and its density 2,500 kg/m3. The friction in the systems is set to zero; thus, b1 = b2 = 0. function Plant = Pendulum l = 0.3; g = 9.81; m = 0.2; r = 0.15; d = 0.01; rho = 2500; b1 = 0; b2 = 0; J = 0.25*pi*rho*d*r^4; M = [1, 0, 0, 0; 0, 1, 0, 0; 0, 0, m*l^2 m*r*l; 0, 0, m*r*l, J+m*r^2]; Q = [0, 0, 1, 0; 0, 0, 0, 1; m*g*l, 0, b1, 0; 0, 0, 0, b2]; W = [0; 0; 0; 1]; A = inv(M)*Q; B = inv(M)*W; C = [1, 0, 0, 0; 0, 1, 0, 0]; D = [0]; Plant = ss(A, B, C, D); The poles of the system are found by typing pole(Pendulum)

592

Chapter 10

Control Systems

in the command window, which then displays 0 0 6.8923 -6.8923

Thus, there are two poles at the origin and a pair on the real axis mirrored about the imaginary axis at ;6.9 rad/s. The system is, therefore, open-loop unstable. The transmission zeros of the inverted pendulum from the perspective of u, the angle of the pendulum, is found by typing in the command window Plant = Pendulum; tzero(Plant(1, 1)) which displays two zeros. The system with only the first output u and first input tm may be addressed using matrix notation; hence, the (1, 1) subscript on Plant. Thus, there are two zeros right on top of the poles. This indicates that using only the output u to control the inverted pendulum will ignore some of the dynamics. In particular, the angle of the pendulum contains insufficient information to discern the position and velocity of the disk. Thus, the outputs of a sensor measuring this angular motion can be zero even when the disk is rotating at a uniform angular velocity. The dynamics, which is not at rest while the output is zero, is sometimes referred to as zero dynamics. Such (unobservable) zero dynamics will not be stabilized by feedback from u alone. The zeros of the pendulum from the perspective of the disk angle c are found by typing Plant = Pendulum; tzero(Plant(2, 1)) in the command window. Since the plant has two outputs, we address the subsystem with the second output and the first input with the subscript (2, 1). It is found from these results that the zeros are located at ;5.72, which are close to the open-loop poles of the pendulum, which are ;6.9. This indicates that while the behavior of the pendulum is observable from the disk position, it is just barely so. A single-input, single-output controller designed using either output will perform badly. A multiple-input, single-output (MISO) controller that depends on both outputs would perform much better than a SISO controller and, thus, this will be the focus of the rest of our effort. We shall design this controller shown in Figure 10.38 in two steps. First, we shall design a controller using the output u to keep the pendulum upright. Wrapped around this control loop will be a controller that uses c to keep the angle of the disk at the commanded position. We start the design process with a lead controller that keeps the pendulum upright. Such a controller will use the output u to determine which correction to apply. Recall that the open-loop poles are located at ;6.9. We put the lead zero at -5, just to the right of the stable pole in the pair in order to pull the unstable

Section 10.5

+

Design Examples

593 Disk angle ψ

− Controller 2 ψ -loop

+

Disk and pendulum −

Pendulum angle θ Controller 1 θ-loop

Figure 10.38 Block diagram for the inverted pendulum control system.

pole into the left half of the complex plane. The lead pole is placed at -10. Hence, Cu(s) = -

s + 5 s + 10

Since positive feedback is required, a negative sign appears in Cu(s). The following script generates the root-locus plot of the u control loop. MATLAB automatically picks a range of gains to apply, but in this case we select a range of 0.1 … u … 10 equally spaced on a logarithmic scale. Plant = Pendulum; PlantTheta = minreal(Plant(1,1)); ControlTheta = tf(-1*[1, 5], [1, 10]); r = rlocus(ControlTheta*PlantTheta, logspace(-1, 1, 60)); plot(real(r), imag(r), 'kx') sgrid xlabel('Real axis') ylabel('Imaginary axis') Executing the script gives the results shown in Figure 10.39a. A suitable gain can be found with Plant = Pendulum; PlantTheta = minreal(Plant(1, 1)); ControlTheta = tf(-1*[1, 5], [1, 10]); rlocus(ControlTheta*PlantTheta) rlocfind(ControlTheta*PlantTheta) Placing the crosshairs on the real axis between the imaginary axis and the lead zero, we find that a gain of 4 stabilizes the u-loop. The resulting closed-loop poles of the theta control system are found from the following script: Plant = Pendulum; PlantTheta = minreal(Plant(1, 1)); ControlTheta = tf(-1*[1, 5], [1, 10]); pole(feedback(4*ControlTheta*PlantTheta,1))

594

Chapter 10 25

0.28

0.4

0.2

0.13

0.06 20

20 0.52

15

0.7

10

0.88

5

0.88

5

−10

0.7

10

−15

0.52

15

15

Imaginary axis

10 5

Control Systems

0 −5

−20

20 0.4

0.2

0.28

−25 −10

−8

−6

0.13

−4

0.06

−2 0 Real axis

2

4

6

8

(a) 15

0.76

0.5

0.64

0.34

0.16

0.86

10 0.94

Imaginary axis

5 0.985 17.5

0

15

12.5

10

7.5

5

2.5

0.985

−5 0.94

−10 0.86

−15 −20

0.64

0.76

−15

0.5

−10

0.34

−5 Real axis

0.16

0

5

10

(b) Figure 10.39 Root locus of the control loops in feedback for (a) the u control loop and (b) the c control loop.

Section 10.5

Design Examples

595

It is found from the execution of this script that the closed-loop poles are approximately -4, -3 ; 11i, which, although stable, are not well damped. Now we design the outer feedback loop for the disk position c. The outer feedback loop is designed with the inner u loop in place, so we first form the closedloop system by wrapping the first controller inside a loop employing u. We do this with the following script: ControlTheta = tf(-[1, 5], [1, 10]); PlantPsi = feedback(Pendulum, 4*ControlTheta, [1], [1]); pole(PlantPsi(2,1)) tzero(PlantPsi(2,1)) Note that we have to specify which inputs and outputs to use since the plant is MIMO and the controller is SISO. The results show that PlantPsi has two additional poles at the origin, which is representative of a double integrator. These need to be moved to the left; however, complicating that objective is an unstable zero at 5.72. The inverted pendulum is an example of a system that is nonminimum phase. In order to move the disk, the controller must first move in the opposite direction to keep the pendulum upright during the transition from its current position to the desired position. The unstable zero attracts one of the poles of the double integrator. To solve this problem, we again use a lead controller whose zero is just inside the left half of the complex plane. The following script plots the root locus of the c control loop: ControlTheta = tf(-[1, 5], [1, 10]); PlantPsi = feedback(Pendulum, 4*ControlTheta, [1], [1]); ControlPsi = tf(-[1, 1], [1, 8]); r = rlocus(ControlPsi*PlantPsi(2,1), 0.35*logspace(-1, 1, 60)); plot(real(r), imag(r), 'kx') sgrid; xlabel('Real axis') ylabel('Imaginary axis') Executing this script results in Figure 10.39b.To find the appropriate gain, we type ControlTheta = tf(-[1, 5], [1, 10]); PlantPsi = feedback(Pendulum, 4*ControlTheta, [1], [1]); ControlPsi = tf(-[1, 1], [1, 8]); rlocus(ControlPsi*PlantPsi(2, 1)) rlocfind(ControlPsi*PlantPsi(2, 1)) in the command window and place the crosshairs near the lower half of the root locus lines that loop into the complex plane. It is found that a gain of 0.3 places all the poles inside the left-half complex plane. The step response of the final control system is computed from the following script: ControlTheta = tf(-[1, 5], [1, 10]); PlantPsi = feedback(Pendulum, 4*ControlTheta, [1], [1]);

596

Chapter 10

Control Systems

2 θ(t ) ψ(t )

Step response

1.5

1

0.5

0

−0.5

0

0.5

1

1.5

2

2.5

3

3.5

4

Time Figure 10.40 Step response of the inverted pendulum. Note that the response of the disk (broken line) initially goes the wrong way. This initial action tilts the pendulum (solid line) into the direction of the move.

ControlPsi = tf(-[1, 1], [1, 8]); [y, t] = step(feedback(0.3*ControlPsi*PlantPsi, 1, [1], [2])); plot(t, y(:,1), 'k-', t, y(:,2), 'k--') xlabel('Time') ylabel('Step response') legend('\theta(t)', '\psi(t)') The resulting step-response plot is shown in Figure 10.40, which reveals the nonminimum phase behavior of the controller and the plant. 10.5.4 Control of a Magnetically Suspended Flywheel Consider the magnetically suspended flywheel system shown in Figure 10.41. Magnetic coils are used to float the wheel so that the wheel can be run at high speeds without the losses associated with friction. The objective of the control system is to keep the wheel suspended. Like the magnetic suspension described in Section 10.5.2, the system is naturally unstable. There are four distances that are measured as outputs. These distances correspond to the x and y positions of the top and bottom shafts as measured in the inertial frame. Four coil currents may be selected to control the magnetic fields about the shaft; these coils are colocated with the sensors. The linearized equations of motion are d 2xcm dt

2

=

f1 + f3 m

d 2ycm dt

2

=

f2 + f4 m

Section 10.5

Design Examples

597

Flywheel

Jzz , ω

Top view

Flywheel

Top bearing Magnetic spring

u2 (u4 bottom bearing)

h Jxx

Inertial frame

h Bottom bearing

u1 (u3 bottom bearing)

(xcm , ycm , zcm) Flywheel frame

y1 (y3 bottom bearing) y2 (y4 bottom bearing)

Top bearing

Figure 10.41 Magnetically suspended flywheel.

d 2w dt

2

d 2c dt

2

= - bv = bv

dc h + ( f - f2 ) dt Jxx 4

dw h + ( f - f3) dt Jxx 1

where xcm and ycm are the location of the center of mass of the flywheel as measured in the inertial frame, (f, c) give the orientation of the flywheel frame with respect to the inertial frame using roll (f), pitch (c), and yaw orientation,9 m is the mass of the flywheel, Jxx is the rotational inertia of the flywheel about the nonspinning axis, b = Jzz/Jxx, and h is the distance from the center of mass to the actuators. The inputs fi are the forces applied by the magnetic bearings and obey the following relationships: fi = k1yi + k2ui where yi is the distance from the wheel to the actuator and is the system’s output. The bearings are composed of a permanent magnet surrounded by coils. The negative spring constant k1 is due to the permanent magnet, and the gain k2 is due to the field generated by the current ui in the coils. The operating speed of the wheel is v rad/s. The output values yi for small f and c are given by y1 = xcm + hc y2 = ycm - hw y3 = xcm + hc y4 = ycm - hw If we let q(t) = [xcm, ycm, w(t), c(t)]¿ 9

R. M. Murray, X. Li, and S. S. Sastry, A Mathematical Introduction to Robotic Manipulation, CRC Press, Boca Raton, FL, 1994.

598

Chapter 10

Control Systems

and u(t) = [u1

u2

u3

u4]'

then the linearized equations can be written as # $ q = vPaq + k1BaCaq + k2Bau y = Caq where 0 0 Pa = ≥ 0 0

0 0 0 0

0 0 0 -b

0 0 ¥ b 0

1>m 0 Ba = ≥ 0 h>Jxx

0 1>m -h>Jxx 0

1 0 Ca = ≥ 1 0

0 -h 0 h

0 1 0 1

1>m 0 0 -h>Jxx

0 1>m ¥ h>Jxx 0

(10.16)

h 0 ¥ -h 0

Hence, if we set q z = c #d q we have the following matrix equations # z = c

0 k1BaCa

y = [Ca

I 0 dz + c du vPa k2Ba

0]z + [0]u

where I is the identity matrix. The following function M file Flywheel generates the linearized model as a function of rotational speed in revolutions per minute (rpm) and is used in the subsequent design evaluations. If no arguments are supplied to this function, it is assumed that the operating speed is 0 rpm. For the flywheel under consideration, the rotational inertia about the x- and y-body axes of the flywheel is 1.563 * 10 - 4 Nm # s2, and the rotational inertia about the z-axis is 1.141 * 10 - 4 Nm # s2. The dimensionless shape factor b is approximately 1. The mass of the wheel is 340 gm and the height from the center of mass is 3 cm. The coil constants are k1 = 4.8 * 104 N/m and k2 = 3.75 N/A.

Section 10.5

Design Examples

599

function Plant = Flywheel(rpm) if nargin < 1 rpm = 0; end; Jxx = 1.563e-4; Jzz = 1.141e-4; beta = Jzz/Jxx; m = 0.34; h = 0.03; k1 = 4.8e4; k2 = 3.75; omega = rpm/60*2*pi; Pa = [zeros(1,4); zeros(1,4); 0, 0, 0, -beta; 0, 0, beta, 0]; Ba = [1/m, 0, 1/m, 0; 0, 1/m, 0, 1/m; 0, -h/Jxx, 0, h/Jxx; h/Jxx, 0, -h/Jxx, 0]; Ca = [1, 0, 0, h; 0, 1, -h, 0; 1, 0, 0, -h; 0, 1, h, 0]; A = [zeros(4), eye(4); k1*Ba*Ca, omega*Pa]; B = [zeros(4); k2*Ba]; C = [Ca, zeros(4)]; D = [zeros(4)]; Plant = ss(A, B, C, D); The open-loop poles change as a function of rpm. Executing the following script plots the open-loop poles for a range of typical operating speeds. rpm = [linspace(0, 16000, 15), linspace(16100, 20000, 15)]; result = zeros(8, length(rpm)); for j = 1:length(rpm) result(:,j) = pole(Flywheel(rpm(j))); end plot(real(result'), imag(result'), 'kx') grid xlabel('Real axis') ylabel('Imaginary axis') The result of executing this script is shown in Figure 10.42.There are two sets of poles (but no zeros) mirrored about the imaginary axis. One set, located at ;530 rad/s (85 Hz), is due to the translational modes and does not change with operating speed. The other set, located at ;740 rad/s (120 Hz), is due to the two rotational modes and is affected by the gyroscopic coupling. In summary, there are four unstable and four stable poles, and half of the poles change location with the operating speed. From an examination of Eq. (10.16), we see that at v = 0 rpm, Pa does not affect the solution. This suggests that the flywheel at 0 rpm may be statically decoupled, resulting in two rotational and two translational SISO systems. Thus, traditional lead-control design techniques, such as a root locus, can now be used to generate a stabilizing controller. Consider the matrix T, which forms the sums and differences between input channels: 1 0 T = ≥ 1 0

0 1 0 1

0 -1 0 1

1 0 ¥ -1 0

600

Chapter 10

Control Systems

1000 800 600

Imaginary axis

400 200 0 −200 −400 −600 −800 −1000 −800

−600

−400

−200

0 Real axis

200

400

600

800

Figure 10.42 Root locus of the flywheel as a function of operating speed from 0 to 20,000 rpm.

Note that the matrix T diagonalizes the input and output matrices of Eq. (10.16) as shown in the following equations: 2>m 0 BaT = ≥ 0 0 1 0 T - 1Ca = ≥ 0 0

0 1 0 0

0 2>m 0 0 0 0 h 0

0 0 2h>Jxx 0

0 0 ¥ 0 2h>Jxx

0 0 ¥ 0 h

After performing a static decoupling using T, we can perform our lead design on the four resulting SISO plants. Figure 10.43 shows how the matrices T would be inserted in practice. The following script generates the decoupled SISO plants and computes a root locus of the result: T = [1, 0, 0, 1;0, 1, -1, 0;1, 0, 0, -1;0, 1, 1, 0]; decoupFly = inv(T)*Flywheel(0)*T; transFly = minreal(decoupFly(1,1)); rotFly = minreal(decoupFly(3,3)); Lead = tf([1, 400], [1, 1000]); rlocus(Lead*transFly)

Section 10.5

Design Examples

T

601

Flywheel

T −1

Translational control Translational control Rotational control Rotational control Figure 10.43 Static decoupling of the flywheel.

sgrid xlabel('Real axis') ylabel('Imaginary axis') axis([-1000, 800, -2500, 2500]) figure(2) rlocus(Lead*rotFly) sgrid axis([-1000, 800, -2500, 2500]) xlabel('Real axis') ylabel('Imaginary axis') The result of executing this script is shown in Figure 10.44. Upon typing the following commands in the command window T = [1, 0, 0, 1; 0, 1, -1, 0; 1, 0, 0, -1; 0, 1, 1, 0]; decoupFly = inv(T)*Flywheel(0)*T; transFly = minreal(decoupFly(1,1)); Lead = tf([1, 400], [1, 1000]); rlocus(Lead*transFly) rlocfind(Lead*transFly) one can find a stabilizing gain for the translational system. Similarly, by typing the following commands in the command window T = [1, 0, 0, 1; 0, 1, -1, 0; 1, 0, 0, -1; 0, 1, 1, 0]; decoupFly = inv(T)*Flywheel(0)*T; rotFly = minreal(decoupFly(3,3)); Lead = tf([1, 400], [1, 1000]); rlocus(Lead*rotFly) rlocfind(Lead*rotFly)

602

Chapter 10 2500

0.36

0.26

0.18

0.11

Control Systems

0.06 2e+003

2000 0.48

1.5e+003

1500 0.66

1e+003

0.86

500

−500

0.86

500

−1000

0.66

1e+003

Imaginary axis

1000 500 0

−1500

1.5e+003 0.48

−2000

2e+003 0.26

0.36

−2500 −1000

−800

0.11

0.18

−600

−400

0.06

−200

0

200

400

600

Real axis (a) 2500 0.4

0.28

0.2

0.13

1500

Imaginary axis

1000 500

0.06 2e+003

2000 0.52

1.5e+003 1e+003

0.7 0.88

500

0.88

500

0 −500 −1000 −1500

0.7

1e+003 1.5e+003

0.52

−2000

2e+003 0.4

0.28

−2500 −1000 −800

−600

0.2

0.13

−400

0.06

−200

0

200

400

600

Real axis (b) Figure 10.44 Root locus of the control loops for (a) the translational and (b) the rotational motion.

800

Section 10.5

Design Examples

603

one can find the stabilizing gain for the rotational system. By design, the same gain (5) stabilizes both the translational and rotational components of the system. Since the gain for the translational and rotational control is the same, the controllers are identical, and decoupling is not needed in the implementation because the matrix T commutes with the transfer function of the controller. This fact makes the implementation easier. We now design an LQG controller for the flywheel. The design involves choosing the appropriate penalty R for the cost function. The following script computes the optimal closed-loop poles for 10 - 10 … R … 10 - 6. The result of its execution is shown in Figure 10.45. [A, B, C, D] = ssdata(Flywheel); L = 60; clPoles = zeros(L,8); R = logspace(-10, -6, L); for i = 1:L [K, S, E] = lqr(A, B, C'*C, R(i)*eye(4)); clPoles(i,:) = E; end plot(real(clPoles), imag(clPoles), 'kx') sgrid ylabel('Imaginary axis') xlabel('Real axis') text(-700,0,'R = 10^{-10}') text(-1000,1000,'R = 10^{-6}') 1500

0.64

0.76

0.55

0.46

0.38

0.32 1.4e+003 1.2e+003

1000

R = 10

–6

1e+003

0.88 800

Imaginary axis

500

600

0.96

R = 10–10

0

−500

0.96

600 800

0.88 1e+003

−1000 0.76

−1500 −1600

0.64

−1400

−1200

0.55

−1000 Real axis

0.46

−800

0.38

−600

Figure 10.45 Optimal root locus for the flywheel for 10 - 10 … R … 10 - 6.

1.2e+003 1.4e+003 0.32

−400

604

Chapter 10

Control Systems

To compare the two different control schemes, the following script computes the response of the two different controllers with the same initial conditions. The initial conditions are all zero, except that the flywheel is slightly tilted such that f(0) = 0.001 radians. The flywheel spins at 10,000 rpm, even though the controllers were designed for 0 rpm. The LQG controller is designed with penalty factor R = 10 - 6. Control = 4e4*eye(4)*tf([1, 400], [1, 1000]); x0 = zeros(12, 1); x0(3) = 1e-3; t = linspace(0, 0.25, 1000); yl = initial(feedback(Flywheel(10000), Control), x0, t); [A, B, C , D] = ssdata(Flywheel); K = lqr(A, B, C'*C, 1e-6*eye(4)); L = (lqr(A', C', B*B', 1e-6*eye(4)))'; ControlSS = reg(Flywheel, K, L); x0 = zeros(16, 1); x0(3) = 1e-3; ys= initial(feedback(Flywheel(10000), ControlSS, +1), x0, t); plot(1000*yl(:,1), 1000*yl(:,2), 'k-', 1000*ys(:,1), 1000*ys(:,2), 'k--') grid on xlabel('x upper bearing') ylabel('y upper bearing') legend('Lead Control', 'LQG Control', 'Location', 'SouthWest') The results from the execution of the script are the phase plots shown in Figure 10.46. Both controllers keep the flywheel suspended with comparable levels of performance. 0.015 0.01 0.005

y upper bearing

0 −0.005 −0.01 −0.015 −0.02 −0.025 −0.03 −0.035 −0.03

Lead Control LQG Control −0.025

−0.02

−0.015 −0.01 −0.005 x upper bearing

0

0.005

Figure 10.46 Phase response of the state–space and lead-controlled flywheels.

0.01

Section 10.6

Summary of Functions Introduced in Chapter 10

605

10.6 SUMMARY OF FUNCTIONS INTRODUCED IN CHAPTER 10 A summary of the functions introduced in Chapter 10 is presented in Table 10.1.

TABLE 10.1 MATLAB Functions Introduced in Chapter 10

MATLAB function

Description

acker alpha arx* bode c2d compare* connect conv dcgain detrend* feedback iddata* ident* ift impulse initial lqe lqr lsim margin minreal nyquist parallel place pole reg rlocfind rlocus series sgrid simulink ss ssbal ssdata step tf tfdata tzero zgrid zpk

Pole placement for single-input systems Sets transparency properties for objects Estimates parameters of an ARX model Bode frequency response Makes continuous-time systems discrete Compares measured outputs with model outputs

.

Obtains state–space model from block diagram description Convolution and polynomial multiplication DC gain Removes trends from output–input data Feedback connection of two LTI models Packages input–output data into the iddata object Opens the GUI Redheffer star product of two LTI models Impulse response of LTI model Response of state–space models to initial conditions Kalman estimator design for continuous-time systems Linear-quadratic state-feedback regulator for continuous plant Simulate response of LTI model to arbitrary input Gain and phase margins and associated crossover frequencies Minimal realization of pole-zero cancellation Nyquist frequency response of LTI model Parallel connection of two LTI models Pole placement Poles of an LTI system Forms regulator given the state feedback and estimator gain Finds root locus gains for a given set of roots Root locus Series connection of two LTI models s-plane grid of constant damping factors and natural frequencies Starts SIMULINK State–space model Balances state–space models using a diagonal similarity transformation Accesses state–space model data Step response of LTI systems Transfer-function model Accesses transfer function data Transmission zeros of LTI system z-plane grid of constant damping factors and natural frequencies Specifies zero-pole-gain model

*System Identification toolbox

606

Chapter 10

Control Systems

EXERCISES Sections 10.2 and 10.3 10.1 Construct a fifth-order system with five equally spaced poles on a circle of radius 2pk in the left half of the complex plane, and five zeros in the right-half plane at the mirrorimage locations. Set the DC gain to one and k = 1. a. Cascade the fifth-order system with a simple first-order plant with a pole at -1 and a DC gain of 1. Plot the step response of the system for 4 s and the step response of the plant without the fifth-order system on the same graph. b. Compute the percentage overshoot and the rise time. c. Repeat parts (a) and (b) for k = 0.5 and k = 2.0. Notice how the response delay grows with increasing k. d. Repeat parts (a) and (b) for three and seven equally spaced poles. Notice how the oscillations increase with an increase in the number of poles. Sections 10.3 10.2 The suspension system10 shown in Figure 10.47 has the level of the road surface as the input and absolute position of as the output . The transfer function of the system is y(s) sbk2 + k1k2 = r(s) m1m2s 4 + b(m1 + m2)s 3 + k1(m1 + m2)s 2 + k2m1s 2 + k2bs + k1k2 Assume that m1 = 500 kg, m2 = 100 kg, b = 1000 Ns/m, k1 = 2000 N/m, and k2 = 104 N/m. a. A washboard-like road surface can be approximated by r(t) = e sin(2 pft) Determine the value of f such that the amplitude of the induced response amplitude of the ride y(t) is 10% of the amplitude of r(t).

m1

m1 (Car) k1, b (Shock absorber)

k1

b

y(t) (Ride)

m2, k2 (Tire)

m2 k2

r (t) (Road) (a)

(b)

Figure 10.47 (a) Simplified model of an automotive wheel suspension system. (b) Mass spring equivalent.

10 U. Ozguner, H. Goktas, and H. Chan, “Automotive Suspension Control Through a Computer Communication Network,” Proceedings of 1st IEEE Conference on Control Application, Vol. 2, 1992, pp. 895–900.

Exercises

607

b. Depending on its usage, the mass of the car may double. Generate a meshed surface of the magnitude of the Bode plot as a function of m1 for 500 … m1 … 1000 kg. c. Plot the value of v for which the attenuation of the road variation r(t) is 90% as a function of b and m1. 10.3 Suppose a controller is designed using a simple nominal plant model such as11 G0(s) =

1 s + 1

The plant may not be accurately modeled. For each of the following alternate models, plot the open-loop step response of the nominal plant G0(s) with the open-loop step response of the alternate plant. Also plot the closed-loop step response of both systems with proportional error control and a gain of 20. Use a maximum time of 2 s. Notice that while the open-loop responses are very different, the closed-loop responses are nearly identical. a.

G1(s) =

3.7 0.75s + 0.6

b.

G2(s) =

1.63 0.94s + 0.92

c.

G3(s) =

0.7s 2 + 7s + 17 s + 2s 2 + 5.2s + 4 3

10.4 The appearances of nonlinear characteristics in systems are very common in practice. Consider a feedback system with an input nonlinearity as shown in Figure 10.48. The nonlinearity obeys the relationship u(t) = f(e(t)) where e(t) is the input signal and u(t) is the nonlinear output signal. The plant is given by G0(s) =

1 s + 1

Find the steady-state response of the system as a function of the magnitude of a step input signal for the three controller gains k = 1, 10, and 100 for the following nonlinear functions: a.

f (e) = 0.2(e 3 - e)

b.

f (e) = e + sin(e)

ƒeƒ 7 1 ƒeƒ … 1

= 0 -1

f(e) = tan (e)

c. + −

Gain

f (e)

Plant

Figure 10.48 Block diagram for simple system with a nonlinear input.

11

R. Jurgen, Electronic Engine Control Technologies, SAE International, Troy, MI, 1999.

608

Chapter 10

Control Systems

Sections 10.3 and 10.4 10.5 Consider the flexible drive-shaft system discussed in Section 10.5.1 with configuration shown in Figure 10.27. As mentioned in that section, it is difficult to know the exact frequency of the resonant mode. The question is whether it is better to overestimate or underestimate this frequency. To investigate this, plot together the Bode plots of the uncompensated pointer with the following two compensators: Notch filter 1:

Notch filter 2:

(s + 3 + 28i)(s + 3 - 28i) (s + 60)2 (s + 3 + 34i)(s + 3 - 34i) (s + 60)2

Set the gain of each notch filter to 1 before plotting and draw your conclusions from the plotted results. Section 10.4 10.6 Consider the guided missile in Figure 10.49. The lateral force of the air rotates a missile about its center of gravity. The force applied by the air can be considered a point force applied to the missile’s center of pressure. If this center of pressure is ahead of the center of mass, the guided missile is unstable. The input to the system is the angle of thrust c(t) and the output of the system is u(t).The force applied by the air drag can be modeled as Fd = kdsin(u), where kd depends on the shape and velocity of the rocket. The off-axis force applied by the rocket engines is given by Frsin(c). The other relevant parameters are l2, the distance from the rocket engine to the center of mass of the missile; l1, the distance from the center of mass of the missile to the center of pressure; and J, the rotational inertia of the rocket.

Actual heading θ

Desired heading

Center of pressure l1 Center of mass (M, J ) l2

Thrust

ψ

Figure 10.49 Attitude control of a missile.

Exercises

609

For a fixed kd and Fr, the effective transfer function from c to u, when c to u are small, is12 G(s) =

l2Fr>J

s 2 - l1kd>J

Assume that l2Fr/J = l1kd/J = 9 is an operating point of interest. a. Using a lead-control structure C(s) = k

s + z z + p

find the values of k, z, and p such that the closed-loop system response is stable. b. As the velocity of the rocket changes, kd changes. For the fixed controller designed in (a), use a root-locus plot to determine the range of kd for which the system remains stable. 10.7 Consider the design of a cruise controller for an automobile. The car is modeled as a mass with a damper that limits the forward motion. The open-loop transfer function G(s) from the engine throttle angle to the car’s velocity is G(s) =

1 ms + b

The controller C(s) is PI, with a transfer function C(s) = kp + ki/s Assume that the car’s mass m is 1,200 kg and the friction coefficient b is 70 Ns/m. The grade (slope) of the road acts as a disturbance into the plant. The block diagram for this system is shown in Figure 10.50. The desired speed is r(t), the input for the motor (a throttle angle) is u(t), and the speed of the vehicle is y(t) as measured by a speedometer. The disturbance d(t) represents the effect of the road grade. a. The transfer function from the disturbance d(t) to the speed y(t) is Gdy(s) =

G(s) 1 + C(s)G(s)

where G(s) is the open-loop response and C(s) is the PI transfer function defined previously. Plot the step response of the open-loop system and closed-loop system on the same figure for kp = 100 and ki = 0. Note that as the gain is increased, the disturbance is reduced. d (t) r (t)

y(t) +

C(s)



+

y (t) G(s)



Figure 10.50 Block diagram of the automobile cruise control.

12

M. Driels, Linear Control Systems, McGraw-Hill, New York, 1996.

d (t)

610

Chapter 10

Control Systems

b. The transfer function from the velocity command r(t) to speed y(t) is C(s)G(s) 1 + C(s)G(s)

Gry(s) =

Plot the step response for kp = 100 and ki = 0. c. Plot the steady-state output for the systems in (a) and (b) to a step response as a function of the proportional gain P in the range 50–150. It is seen that the integrator eliminates the steady-state error, and its speed is determined by the gain ki. 10.8 An automotive suspension is typically passive, being composed of springs and dampers. To improve the suspension of cars, active suspension systems have been proposed. In Figure 10.51, we have depicted a simplified model of an active automobile suspension system in which r(t) represents the input of the road surface and y(t) is the vertical position of the passenger compartment. Assume that the mass of the tire is negligible and that velocity feedback is used so that u(t) = Cdy(t)/dt. The actuator applies a force to the rod and the passenger compartment that is proportional to their relative velocity: C(dy/dt - dr/dt). The velocity transfer function from the road r(t) to the ride y(t) is G(s) =

(c + b)s + k ms + (c + b)s + k 2

a. Use rlocus and rlocfind to determine the value of c needed to set the damping ratio to 1, that is, to make the system critically damped. To use rlocus, notice that the denominator can be written as ms2 + bs + k + cs. Hence, it is now in standard from for rlocus, with the numerator [1 0] and the denominator [m b k]. The value determined by rlocfind will be c. Place the crosshairs at the point where the closed-loop poles first cross the real axis. b. Plot the step response and Bode diagrams for the system with and without active control (c = 0). Assume that m = 5,000 kg, k = 8 * 105 N/m, and b = 12,000 Ns/m. c. In this problem, the spring is accounted for in k. For k ranging between 4 * 105 and 10 * 105 N/m, create a meshed surface of the step response using the design in (b). Which car would you prefer to ride in? 10.9 Consider the task of designing an autopilot for a large, slowly moving ship in which the output of a compass provides the feedback. The controller sends commands to a rudder mechanism, which, with delay, turns it to the desired position, thereby turning the ship.The m

m (Car) k, b (Shock absorber)

c k

b

Input

y(t) (Ride)

r (t) (Road) (a)

(b)

Figure 10.51 (a) A simplified model of the quarter-car model with an active suspension, and (b) mass and spring equivalent.

Exercises

611

following equations have been linearized from Nomoto’s equation13 for a ship at cruising speed. The open-loop transfer function of the steering system without the controller is14 G(s) =

s + 0.03 s(s + 0.09)(s + 0.04)(s - 0.0004)

a. The plant has an unstable pole. Plot the root locus of the steering system. b. Using the lead-control structure C(s) = k

s + z z + p

find the values of k, z, and p that stabilize the closed-loop system response while maintaining less than 30% overshoot. c. Using a new sensor that provides velocity information, one can now use PD control. Thus, C(s) = kp + skd Find kp and kd such that the closed-loop response is stable, has less than 5% overshoot, and has a settling time less than 275 s. 10.10 A recent model automobile has a catalytic converter to meet the exhaust-emissionperformance standards. The catalytic converter requires tight control of the engine air/fuel ratio (A/F), the ignition-spark timing, and exhaust-gas recirculation. We consider the air/fuel ratio regulation task. The transfer function of the carburetor with the effective A/F ratio as output is15 G(s) =

4e - Ts s + 4

where the time delay T is 0.2 s. The function pade may be used to generate an approximation of the time delay, or one may set the output delay property of the transfer function to 0.2. However, using pade is less difficult, because it is one of MATLAB’s few functions that supports time delay. a. Suppose that the time delay is neglected in the design of the controller and we let the controller be a PI controller so that C(s) = kp +

ki s

Set ki = 2 and select the value of kp so that the rise time for the unit-step response is smaller than 0.4 s. Determine the step response of the system. b. Consider feeding a time-delayed signal back into the controller as shown in Figure 10.52. The extra compensation element in the controller contains a 13

Ibid. C. L. Phillips and R. D. Harbor, Feedback Control Systems, 3rd ed., Prentice Hall, Englewood Cliffs, NJ, 1996. 15 B. Kuo, Automatic Control Systems, 7th ed., Prentice Hall, Englewood Cliffs, NJ, 1995, p. 815. 14

612

Chapter 10 +

C(s)

− + +

Control Systems

G(s)

4 1 − e−sT s+4

Figure 10.52 Exhaust emission control system using a Smith predictor.

model of the plant and its time delay and is called a Smith predictor. Using a lead-control structure C(s) = k

s + z z + p

find the values of k, z, and p that stabilize the closed-loop system response while having no overshoot and a rise time less than 0.2 s. Compare the results to the PI controller in (a). c. Suppose that the time delay and the plant are not modeled correctly. Determine the step responses for system time delays of 0.3 and 0.1 s with the controller generated in (b) and a plant model with a DC gain of 1.2 and a pole at -5 instead of -4. From the results, is it better to overestimate or underestimate the time delay? 10.11 Consider an automatic motorized bicycle whose block diagram is shown in Figure 10.53. An inclinometer detects the angle of the bicycle body from vertical, y(t). The inclinometer’s output is compared to the desired angle from vertical r(t) and the error is input to the controller to generate a steering signal.Any disturbances to the system d(t) are modeled as entering with the input to the bicycle.The transfer functions for the blocks shown in Figure 10.53 are G(s) =

9 s + 9

F(s) =

v2 s + 2jvs + v2

2

C(s) = k

2

s + z s + p

where C(s) is a lead controller. a. A micromachined inclinometer has a settling time of 0.2 s and a bandwidth of 125 Hz. The sensor’s parameters are v = 250p and j = 20/v. Find k, z, and p such that the overshoot for a unit step response is less than 20% and the setting time is less than 4 s. b. Suppose that there is another type of inclinometer to choose, one that is based on the principle of a pendulum. Its resonant frequency is 7.4 Hz (v = 14.8p) and its damping coefficient j = 0.4. Can this inclinometer also be used?

Bibliography

613 d(t) Controller r(t)

+

C(s)

+

+

Bicycle y(t) G(s)

– Inclinometer F(s) Figure 10.53 Block diagram of an automatic motorized bicycle.

BIBLIOGRAPHY D. K. Anand and R. B. Zmood, Introduction to Control Systems, Butterworth and Heinmann, Ltd., Oxford, England, 1995. E. Chowanietz, Automobile Electronics, SAE International, Troy, MI, 1995. R. Dorf and R. Bishop, Modern Control Systems, Addison-Wesley Publishing, Reading, MA, 1997. M. Driels, Linear Control System Engineering, McGraw-Hill, New York, 1996. G. Franklin, J. Powell, and A. Emami-Naeini, Feedback Control of Dynamic Systems, 3rd ed., Addison-Wesley, Reading, MA, 1994. B. Friedland, Advanced Control System Design, Prentice Hall, Englewood Cliffs, NJ, 1996. R. Jurgen, Electronic Engine Control Technologies, SAE International, Troy, MI, 1999. B. Kuo, Automatic Control Systems, Prentice Hall, Englewood Cliffs, NJ, 1995. W. Levine, The Control Handbook, CRC Press, Boca Raton, FL, 1996. N. Nise, Control Systems Engineering, Addison-Wesley, Reading, MA, 1995. U. Ozguner, H. Goktas, and H. Chan, “Automotive Suspension Control Through a Computer Communication Network,” Proceedings of 1st IEEE Conference on Control Application, vol. 2, 1992, pp. 895–900. C. Phillips and R. Harbor, Feedback Control Systems, Prentice Hall, Englewood Cliffs, NJ, 1996.

11 Fluid Mechanics James H. Duncan

11.1 Hydrostatics 614 11.1.1 Pressure Distribution in the Standard Atmosphere 615 11.1.2 Force on a Planar Gate 616 11.2 Internal Viscous Flow 621 11.2.1 Laminar Flow in a Horizontal Pipe with Circular Cross Section 621 11.2.2 Downward Turbulent Flow in a Vertical Pipe 622 11.2.3 Three Connected Reservoirs 624 11.3 External Flow 626 11.3.1 Boundary Layer on an Infinite Plate Started Suddenly from Rest 626 11.3.2 Blasius Boundary Layer 628 11.3.3 Potential Flow 631 11.3.4 Joukowski Airfoils 636 11.4 Open Channel Flow 641 11.5 Biological Flows 646 Exercises 648 Several types of applications in fluid mechanics and aerodynamics are analyzed, and several flow fields are presented using a variety of visualization techniques.

11.1 HYDROSTATICS In hydrostatics, the pressure is constant on any surface of constant height in a single fluid, and the pressure varies with height according to dP = -rg dz 614

(11.1)

Section 11.1

Hydrostatics

615

where r = r(z) is the density distribution, g = 9.81 m/s2 is the acceleration of gravity, P is the pressure, and z is the vertical Cartesian coordinate, with positive being up. We now apply Eq. (11.1) to two hydrostatics applications. 11.1.1 Pressure Distribution in the Standard Atmosphere If the atmosphere is a perfect gas, then r = P/(RT) where R = 287.13 J/(kg K) is the perfect gas constant, and T is the temperature in degrees Kelvin. With this assumption, Eq. (11.1) can be integrated to obtain z

g dz P(z) = P0 expc d R3 T

(11.2)

0

where P0 = 101,330 Pa is the pressure at z = 0, ground level. Example 11.1

Temperature and pressure variation as a function of altitude

We assume that the temperature distribution is that represented by fitting a spline to the temperatures at the elevations given in Table 11.1. We shall use Eq. (11.2) and the fitted spline to obtain graphs of P and T as a function of z. The program is as follows. g = 9.81; P0 = 101330; R = 287.13; np = 60; TC = [15, -56.5, -56.4, -44.5, -2.5]; z = [0, 11000, 20100, 32200, 47300]; zz = linspace(z(1), z(end), np); t = spline(z, TC+273.15, zz); subplot(1,2,1) plot(t-273.15, zz/1000, 'k-', TC, z/1000, 'ks') axis([-65, 20, 0, 50]) xlabel('Temperature (\circC)') ylabel('Elevation (km)') subplot(1,2,2) P = zeros(np,1); gR = g/R; gg = @(h, z, TC) (1./spline(z, TC+273.15, h));

TABLE 11.1 Temperature of the Standard Atmosphere as a Function of Elevation

Elevation (m)

Temperature (°C)

0.0 11,000 20,100 32,200 47,300

15.0 -56.5 -56.4 -44.5 -2.5

Chapter 11 50

50

45

45

40

40

35

35 Elevation (km)

Elevation (km)

616

30 25 20

30 25 20

15

15

10

10

5

5

0 −60

−40 −20 0 Temperature (°C)

20

(a)

Fluid Mechanics

0 0

50 Pressure (kPa)

100

(b)

Figure 11.1 The standard atmosphere: (a) Temperature versus elevation from Table 11.1 and a spline fitted to these data. (b) Pressure from Eq. (11.2) versus elevation.

for k = 1:np; Intg = quadl(gg, 0.1, zz(k), [], [], z, TC); P(k) = P0*exp(-gR*Intg); end plot(P/1000, zz/1000, 'k-') axis([0, 110, 0, 50]) ylabel('Elevation (km)') xlabel('Pressure (kPa)') The results of executing this program are shown in Figure 11.1.

11.1.2 Force on a Planar Gate Consider the reservoir shown in Figure 11.2. One wall of the reservoir is a tiltable metal gate that is hinged at the bottom and has weight W and length L. The width of the reservoir in the direction normal to the page is B. Initially, the gate is vertical and the water level reaches the top of the gate. The total volume of water is Vw = aLB. A rod holds the gate closed, and the force of the rod on the gate Frod is directed along the rod. A stop holds the opposite end of the rod in place. This stop can be moved to the right, thus letting the gate rotate clockwise about its hinge. For

Section 11.1

Hydrostatics

617

Frod 45° L

L÷2

a

Gate

Rod Moveable stop (a)

a

FR

h u

yR

(b) Figure 11.2 Reservoir with tiltable gate: (a) Gate vertical. (b) Gate opened to an angle u.

gate angle u less than or equal to some critical angle umax, the water level is at or below the top of the gate; however, for u 7 umax, the water spills over the top. The volume V bounded by the bottom, the fixed walls, the gate, and a level surface at the top of the gate is V L cosu sinu = cosu + Vw 2a

(11.3)

The maximum volume Vmax/Vw occurs at uV. The water will spill over the dam when V 6 1.0 Vw which corresponds to the critical angle umax and is determined from cosu max +

L cosumax sinumax - 1 = 0 2a

An expression relating the water level h to the gate angle u is obtained by equating Vw to the water volume at any u. Thus, Vw = aL = ah + 0.5h2 tanu B

(11.4)

618

Chapter 11

Fluid Mechanics

or h =

-a 2L c1 < 1 + tanu d a tanu A

for u 6 umax. Only the positive root is of interest. The magnitude of Frod is obtained by taking moments about the hinge. Thus, FRyR + 0.5WL sinu L sina

Frod =

(11.5)

where FR is the total force of the water on the gate and yR is the distance from the hinge to the center of pressure. The angle a shown in Figure 11.2b is given by a = u + cos - 1 A cosu> 22 B From the hydrostatics equations, we find that FR = yR =

Br gh2 2 cosu 2Ixx cos2u h 2 cosu Bh2

where Ixx =

Bh3 12 cos3u

is the second moment of area of the submerged portion of the gate about its centroid. Thus, Eq. (11.5) becomes Frod =

Br gh3 1 WL c sinu d + L sina 6 cos 2u 2

(11.6)

The angle at which Frod is a minimum is denoted uF. We shall now use these results to determine umax, uV, uF, and Frod.

Example 11.2

Properties of a reservoir

We shall determine umax, uV, and uF and plot the volume ratio V/Vw, the depth of the water h, and the force Frod for 0 … u … umax. We assume that L = 10 m, a = 5 m, B = 10 m, and W = 100,000 N. We use fzero to determine umax and fminbnd to determine the values of uV, and uF. The program that performs these calculations is as follows. function Example11_2 a = 5.0; L = 10.0; B = 10.0;

rho = 1000;

Section 11.1

Hydrostatics

619

g = 9.81; W = 100000; La = L/a; theta = linspace(0.0, pi/2, 100); VVw = @(theta,La) (cos(theta)+0.5*La*cos(theta).*sin(theta)); figure(1) subplot(1,2,1) plot(theta*180/pi, VVw(theta,La), 'k') axis([0.0, 90.0, 0.0, 1.5]) ylabel('V/V_w') xlabel('\theta (\circ)') grid on hold on MaxTheta = @(theta, La) (1-VVw(theta, La)); ThetaMaxDeg = fzero(MaxTheta, [0.01, pi/2.0], [], La)*180/pi; plot(ThetaMaxDeg, 1.0, 'sk') text(10, 0.95, ['\theta_{max}= ', num2str(ThetaMaxDeg, 4) ' circ']) VVwNeg = @(theta, La) (-VVw(theta, La)); [ThetaMaxVol, VVwMax] = fminbnd(VVwNeg, 0.0, ThetaMaxDeg*pi/180, [], La); plot(ThetaMaxVol*180/pi, -VVwMax, 'ks') text(10, -VVwMax+0.13, ['V_{max}/V_w = ' num2str(-VVwMax, 4)]) text(10, -VVwMax+0.05, [' \theta_V = ' num2str(ThetaMaxVol*180/pi, 4) Á ' \circ ']) subplot(1,2,2) theta = linspace(0.01, ThetaMaxDeg*pi/180); plot(theta*180.0/pi, h(theta, La, a), 'k-') ylabel('h (m)') xlabel('\theta (\circ)') grid on figure(2) plot(theta*180.0/pi, Frod(theta, L, B, rho, g, W, La, a)*10^-6, 'k-') hold on [FrodThetaMin, FrodMin] = fminbnd(@Frod, 0.0, ThetaMaxDeg*pi/180, [], Á L, B, rho, g, W, La, a); plot(FrodThetaMin*180/pi, FrodMin*1e-6, 'ks') text(FrodThetaMin*180/pi, FrodMin*1e-6-0.1, ['F_{rod, min} = ' Á num2str(FrodMin*1e-6, 4) ' MN']) text(FrodThetaMin*180/pi, FrodMin*1e-6-0.22, ['\theta_F = ' Á num2str(FrodThetaMin*180/pi, 4) ' \circ']) ylim([0.4, 2.4]) ylabel('F_{rod} (MN)') xlabel('\theta (\circ)') grid on function Fr = Frod(theta, L, B, rho, g, W, La, a) D = (L*sin(theta+acos(cos(theta)/sqrt(2)))); Fr = ((B*rho*g*h(theta, La, a).^3)./(6*cos(theta).^2)+0.5*W*L*sin(theta))./D; function f = h(theta, La, a) f = (-a./tan(theta).*(1-sqrt(1+2*La*tan(theta)))); The execution of this program results in Figures 11.3 and 11.4.

620

Chapter 11 1.5

Fluid Mechanics

10 V /V = 1.299 max w θ = 30 °

9.5

V

9 1

8.5 θ

= 57.06 °

max

V/Vw

h (m)

8 7.5 7

0.5

6.5 6 5.5

0 0

20

40 60 θ (°)

5 0

80

20

θ (°)

(a)

40

60

(b)

Figure 11.3 Results for the hinged gate configuration: (a) V/Vw versus u. (b) h versus u.

2.4 2.2 2

Frod (MN)

1.8 1.6 1.4 1.2 1 0.8 Frod, min = 0.7874 MN

θF = 36.24 °

0.6 0.4 0

10

20

30 θ (°)

40

Figure 11.4 Force needed to keep the gate closed versus u.

50

60

Section 11.2

Internal Viscous Flow

621

11.2 INTERNAL VISCOUS FLOW There is a large class of flow applications that concern laminar and turbulent viscous flow in pipes and ducts. Several of these applications are given below. For low Reynolds numbers, the flow is laminar, and pdepe is used to compute the flow field in the pipe. For higher Reynolds numbers, the flow is turbulent, and the flow and pressure drop are computed with the aid of the Colebrook equation.1 11.2.1 Laminar Flow in a Horizontal Pipe with Circular Cross Section The differential equation for unsteady, axially symmetric, incompressible, fully developed, laminar flow in a circular pipe is 0uz 0t

= -

0uz 1 dP 1 0 + na ar bb r dz r 0r 0r

(11.7)

where r and z are the radial and axial coordinates, respectively; t is the time; uz = uz(r, t) is the axial velocity; r is the fluid density; dP/dz is the axial pressure gradient, which can be function of time; and n is the kinematic viscosity of the fluid.The axial velocity must satisfy two conditions: (1) the no-slip condition at the pipe wall r = R, that is, uz(R, t) = 0; and (2) the symmetry condition at the pipe centerline r = 0, that is, 0u2(0, t)>0r = 0. Equation (11.7) is solved by using pdepe, which is described in Section 5.5.6. Example 11.3

Laminar flow in a pipe that is started from rest

Unsteady laminar pipe flow is obtained by starting the flow from rest and imposing a constant pressure gradient thereafter. The effect of the no-slip condition on the axial velocity diffuses inward from the pipe walls and reaches the center of the pipe with a timescale of T = R2/n. In the long-time limit, the solution for steady flow in the pipe is obtained. We assume that R = 5.0 mm, n = 0.00038 m2/s, r = 1,000 kg/m3, and dP/dz = 1.0 * 106 Pa/m. We use pdepe with m = 1, which signifies a cylindrical coordinate system. We shall determine the solution for 0 … t … 0.07 s. The program is as follows. function Example11_3 nu = 0.00038; rho = 1000; dPdz = -1e6; nr = 100; rmax = 0.005; nt = 15; tmax = 0.07; r = linspace(0, rmax, nr); t = linspace(0, tmax, nt); u = pdepe(1, @pdPipe, @pdPipeIC, @pdPipeBC, r, t, [], nu, rho, dPdz); hold on for ijd = [2, 3, 4, 6, nt] plot(u(ijd,:), r*1000, 'k') if ijd == nt text(u(ijd,20), rmax*0.25*1000, [num2str(tmax*1000, 4) ' ms']) elseif ijd == 2 text(u(ijd,20), rmax*0.25*1000, ['t = ' num2str(t(ijd)*1000, 4) ' ms']) else text(u(ijd,20), rmax*0.25*1000, [num2str(t(ijd)*1000, 4) ' ms']) end 1

C. E. Colebrook, “Turbulent flow in pipes with particular reference to the transition region between smooth and rough pipe laws,” Journal of the Institute of Civil Engineers, London, 11, 1939, pp. 133–156.

622

Chapter 11

Fluid Mechanics

5 4.5 uz(0,0.07) = 16.413 m/s

4 3.5

r (mm)

3 2.5 2 1.5 t = 5 ms

10 ms

15 ms

25 ms 70 ms

1 0.5 0 0

2

4

6

8 10 12 Axial Velocity, u (m/s)

14

16

18

z

Figure 11.5 Development of the velocity profile for laminar flow started from rest by an applied pressure gradient in a pipe.

end xlabel('Axial Velocity, u_z (m/s)') ylabel('r (mm)') text(0.5*u(nt,1), 0.8*rmax*1000, ['u_z(0,' num2str(t(nt)) ') = ' Á num2str(u(nt,1),5)' m/s']) function [c,f,s] = pdPipe(r, t, u, DuDr, nu, rho, dPdz) c = 1.0/nu; f = DuDr; s = -dPdz/(rho*nu); function u0 = pdPipeIC(r, nu, rho, dPdz) u0 = 0; function [pl, ql, pr, qr] = pdPipeBC(rl, ul, rr, ur, t, nu, rho, dPdz) pl = 1; ql = 0; pr = 0; qr = ur; Upon execution, we obtain the results shown in Figure 11.5. In steady flow, the analytical solution for the centerline velocity is R2 |dP/dz|/(4rv) = 16.45 m/s; from Figure 11.5, it is seen that at t = 0.07, s = 1.064T, the value is 16.41 m/s. If we had increased the upper limit of the time, the numerically determined centerline velocity would be still closer to the theoretical steady-flow value.

11.2.2 Downward Turbulent Flow in a Vertical Pipe Consider a vertically oriented smooth pipe of length L and diameter D in which a fluid of density r and kinematic viscosity n is flowing downward, as shown in Figure 11.6. For a particular flow rate, the pressure drop due to the downward flow of the fluid is balanced by the pressure gain due to gravity—that is, at this flow rate, the static pressure in the pipe is independent of the distance along the pipe.

Section 11.2

Internal Viscous Flow

623

1

Flow

Gravity

L

Circular pipe of diameter D 2 Figure 11.6 Flow in a vertically oriented pipe of diameter D.

The head loss equation is P1 V21 P2 V22 lLV2 + z1 = + z2 + + + rg rg 2g 2g 2gD

(11.8)

where P is the pressure, V is the average flow speed, z is the height, and l is the friction factor. In the present problem, P1 = P2, V1 = V2, and z1 - z2 = L; therefore, Eq. (11.8) reduces to l =

2gD3

(11.9)

n2Re2

where Re is the Reynolds number, defined as Re =

VD n

(11.10)

The Colebrook formula for l versus Re in pipes of varying roughness factors k/D is given by (recall Exercise 5.17) 2.51 k/D 1 = -2 log10 a + b 3.7 1l Re1l

Re Ú 4000

(11.11)

In the present case, k = 0. Substituting l from Eq. (11.9) into Eq. (11.11) yields a transcendental equation for the Reynolds number of the pipe flow and, therefore, the desired flow rate. We shall now illustrate these results with the following example. Example 11.4

Flow rate in a pipe

Consider a vertically oriented smooth pipe of diameter D = 4.0 cm in which water of density r = 1000.0 kg/m3 and kinematic viscosity n = 1.2 * 10 - 6 m2/s is flowing downward. We shall find the flow rate Q = pD2V/4 for which the pressure drop due to the downward flow is balanced by the pressure gain due to gravity. The Colebrook expression is evaluated in ColebrookFriction. The program is as follows. function Example11_4 D = 0.04; g = 9.81; nu = 1.2e-6;

624

Chapter 11

Fluid Mechanics

Re = fzero(@ColebrookFriction, [1e3, 1e7], [], nu, g, D); disp(['Re = ', num2str(Re, 7)]) disp(['Flow Rate = ' num2str(pi*D*Re*nu/4, 4) ' m^3/s']) function value = ColebrookFriction(Re, nu, g, D) lambda = 2*g*D^3/(nu*Re)^2; value = 1/sqrt(lambda)+2*log10(2.51/(Re*sqrt(lambda))); which when executed displays to the command window Re = 240405.8 Flow Rate = 0.009063 m^3/s

11.2.3 Three Connected Reservoirs Consider the classical three-reservoir problem2 in which three reservoirs of different elevations are connected to a common junction at location J, as shown in Figure 11.7. If we are given the length Lj, diameter dj, and roughness kj of the pipes meeting at J and the elevations of each reservoir hj, then we can determine the corresponding flow rates Qj and direction of flow in each pipe. The method is as follows. If an open-ended tube were installed at the junction, then the water’s elevation in the tube would rise to hp, which is unknown. The difference between the elevations at P and J is the pressure head at the junction. Secondly, at J, the sum of the flows from each pipe must be zero—that is, 3

a Qj = 0

(11.12)

j=1

with a positive value of Qj indicating flow toward the junction and a negative value indicating flow out of the junction.

h1 hp

P

h2

L1, d1, k1, Q1

h3

L2, d2, k2, Q2 J

L3, d3, k3, Q3

Figure 11.7 Pipes connecting three reservoirs at junction J.

2

N. H. C. Hwang and C. E. Hita, Fundamentals of Hydraulic Engineering Systems, 2nd ed., Prentice-Hall, Englewood Cliffs, NJ, 1987, pp. 106–110.

Section 11.2

Internal Viscous Flow

625

The flow in each pipe is determined from Qj = 0.25pd 2j Vj sj

j = 1, 2, 3

where Vj = sj

2gdj|¢hj|

¢hj = hj - hp

E lj Lj

j = 1, 2, 3

and sj is the sign of ¢hj, g = 9.81 m/s2 is the gravity constant, and lj is the pipe friction coefficient as determined from Eq. ( 11.11) and is a function of Rej; that is [recall Eq. (11.10)], Rej =

Vjdj n

j = 1, 2, 3

where n = 1.002 * 10 - 6 m2/s is the kinematic viscosity of water at 20°C. Thus, the objective is to determine the value of hp that satisfies Eq. (11.12). The solution is obtained as follows. We assume a value for hp, which we know lies somewhere between the minimum and maximum values of hj.Then we compute a value for each Vj by first assuming a value for lj, which is obtained from Eq. (11.11) for very large Re; that is, lj = c2 log10 a3.7

dj kj

bd

-2

We use these values of Vj to determine values for Rej, which are then used to determine lj from the general Colebrook formula given by Eq. (11.11). We continue this process until the values of Vj are within an acceptable tolerance. After each Vj has been determined, we compute each Qj and determine whether Eq. (11.12) has been satisfied. If it hasn’t, then another value of hp is selected, and new values of Vj are computed as just described. It should be noted that when ¢hj = 0, Qj = 0 and the value of lj cannot be computed since Rej = 0. In the program that implements this procedure, we use nested applications of fzero, an inner one to determine Vj and an outer one to determine hp. We now illustrate this procedure with the following example. Example 11.5

Flow rates from three connected reservoirs

Using the solution method described above, we shall determine the flow rates for the values that are given in Table 11.2. We create three subfunctions: ReservoirSumQ, which determines Qj and evaluates Eq. (11.12); PipeFrictionCoeff, which evaluates TABLE 11.2 Parameters for Reservoir in Figure 11.7

Reservoir

dj(m)

Lj(m)

kj(m)

hj(m)

1

0.30

1000

0.00060

120

2 3

0.50 0.40

4000 2000

0.00060 0.00060

100 80

626

Chapter 11

Fluid Mechanics

Eq. (11.11); and ResFriction, which determines lj at each value of Vj. The script is as follows function Example11_5 d = [0.3, 0.5, 0.4]; el = [1000, 4000, 2000]; k = [0.6, 0.6, 0.6]*1e-3; h = [120, 100, 80]; hg = fzero(@ReservoirSumQ, 110, [], d, el, k, h); [sq, q] = ReservoirSumQ(hg, d, el, k, h); disp(['Elevation h_sub_p = ' num2str(hg) ' m']) disp(['Q1 = ' num2str(q(1)) ' m^3/s Q2 = ' num2str(q(2)) Á ' m^3/s Q3 = ' num2str(q(3)) ' m^3/s']) function [sq, q] = ReservoirSumQ(hg, d, el, k, h) cv = 2*9.81*d./el; ro = d/1.002e-6; dk = d./k; qd = 0.25*pi*d.^2; frictguess = (2*log10(3.7*dk)).^-2; hh = h-hg; for n = 1:length(d) if hh(n) == 0 q(n) = 0; else lambda = fzero(@ResFriction, frictguess(n), [], dk(n), hh(n), cv(n), ro(n)); q(n) = sign(hh(n))*sqrt(cv(n)*abs(hh(n))/lambda)*qd(n); end end sq = sum(q); function x = PipeFrictionCoeff(el, re, dk) if dk>100000|dk == 0 x = el-(2*log10(re*sqrt(el)/2.51))^-2; else x = el-(2*log10(2.51/re/sqrt(el)+0.27/dk))^-2; end function lamb = ResFriction(lambda, dk, dh, cv, ro) ren = sqrt(cv*abs(dh)/lambda)*ro; lamb = PipeFrictionCoeff(lambda, ren, dk); Executing the program gives Elevation h_sub_p = 98.904 m Q1 = 0.16185 m^3/s Q2 = 0.068728 m^3/s

Q3 = -0.23058 m^3/s

11.3 EXTERNAL FLOW 11.3.1 Boundary Layer on an Infinite Plate Started Suddenly from Rest Consider a layer of liquid of thickness h that extends to infinity in the x-z plane and is bounded by a rigid plate at y = 0 and a free surface at y = h. The plate and the fluid are initially at rest. At t = 0, the plate begins to move in the x direction. The resulting fluid motion is only in the x-direction, and is a function of only time and the y coordinate, that is, u = u(y, t).

Section 11.3

External Flow

627

The solution is obtained by solving the x-component of the Navier-Stokes equations, which in the present case reduces to 0u 02u = nvis 2 0t 0y

(11.13)

The initial condition is u(y, 0) = 0 The boundary condition at the surface of the plate is the no-slip condition, u(0, t) = U while the boundary condition at the free surface y = h is zero shear stress—that is, nvis

du 2 = 0 dy y = h

A variant of this problem is obtained by prescribing the stress, rather than the velocity, at y = 0; that is, t(0, t) = rnvis

Example 11.6

0u 2 0y y = 0

Acceleration of a liquid layer

Consider a case with h = 10.0 cm and nvis = 1.0 cm2/s, and where the plate and the fluid are initially at rest. At t = 0, the plate is instantaneously accelerated to a speed U = 5.0 cm/s in the positive x-direction. The following program uses pdepe with m = 0, which indicates that a Cartesian coordinate system is used. function Example11_6 nu = 1.0; Uplate = 5.0; ny = 100; ymax = 10.0; nt = 40; tmax = 100.0; A = tmax/((nt+1)^2); y = linspace(0, ymax, ny); t = A*((1:nt)+1).^2; u = pdepe(0, @pdfslpde, @pdfslic, @pdfslbc, y, t, [], nu, Uplate); hold on for ijd = 2:nt plot(u(ijd,:), y, 'k-') end xlabel('Horizontal Velocity (cm/s)') ylabel('y (cm)') text(y(ny/2), u(nt,ny/2), ['t = ' num2str(tmax, 4) ' s']) xlim([0, 6])

628

Chapter 11

Fluid Mechanics

10 9 8 7

y (cm)

6 5 t = 100 s 4 3 2 1 0 0

1

2 3 4 Horizontal Velocity (cm/s)

5

6

Figure 11.8 Horizontal velocity in a fluid layer of depth 10.0 cm that is suddenly accelerated to a speed U = 5.0 cm/s.

function [c, f, s] = pdfslpde(x, t, u, DuDy, nu, Uplate) c = 1/nu; f = DuDy; s = 0; function u0 = pdfslic(y, nu, Uplate) u0 = 0; function [pl, ql, pr, qr] = pdfslbc(yl ,ul, yr, ur, t, nu, Uplate) pl = ul-Uplate; ql = 0; pr = 0; qr = 1; Executing this program results in Figure 11.8. As seen from the figure, after a long time (t 7 h2/nvis = 100 s), the velocity distribution of the liquid layer tends to be a constant value equal to the velocity of the plate.

11.3.2 Blasius Boundary Layer The incompressible flow field in a laminar boundary layer on a flat plate is given by the solution to the boundary layer equations 0u 0v + = 0 0x 0y

(11.14)

Section 11.3

External Flow

629

u

0u 0u 0 2u + v = nvis 2 0x 0y 0y

where x and y are the coordinates parallel to and perpendicular to the plate surface, respectively; u and v are the corresponding fluid velocity components, respectively; and nvis is the kinematic viscosity. The boundary conditions are that u and v are zero on the plate surface y = 0 and that u : U as y : q .3 A similarity solution is proposed where df u = dh U

(11.15a)

and h = y

U

(11.15b)

A xnvis

The quantity f is proportional to the stream function of the flow, and d2f/dh2 is proportional to the shear. The similarity solution transforms the boundary layer equation into the ordinary nonlinear differential equation

2

d3f

+ f

dh3

d2f

= 0

(11.16)

df = 0 dh

(11.17a)

dh2

where at h = 0 f = 0, and as h : q df :1 dh

(11.17b)

To solve Eq. (11.16), we transform it to three first-order equations using the definitions f1 = f,

f2 =

df , dh

f3 =

d2f dh 2

(11.18)

3 Full details can be found in R. L. Panton, Incompressible Flow, 2nd ed., John Wiley and Sons, New York, 1996, p. 516.

630

Chapter 11

Fluid Mechanics

to obtain df1 = f2 dh df2 = f3 dh

(11.19)

df3 = -0.5f1f3 dh The boundary conditions at h = 0 become f1(0) = f2(0) = 0

(11.20a)

f2(h : q ) : 1

(11.20b)

and as h : q

We shall now illustrate these results with the following example. Example 11.7

Laminar boundary layer on a flat plate

We solve the differential equations in Eq. (11.19) by using bvp4c and approximating infinity with h = 8. Following the procedure discussed in Section 5.5.4, the program is function Example11_7 solinit = bvpinit(linspace(0, 8, 9), @Blasiusguess); sol = bvp4c(@Blasius, @Blasiusbc, solinit); x = linspace(0, 8, 100); y = deval(sol, x); plot(x, y(1,:), 'k-', x, y(2,:), 'k--', x, y(3,:), 'k-.') xlabel('\eta') ylabel('f, df/d\eta, d^2f/d\eta^2') legend('f', 'df/d\eta', 'd^2f/d\eta^2') ylim([0 2.5]) disp(['d^2f(0)/dn^2 = ' num2str(y(3,1))]) function dydx = Blasius(x, y) dydx = [y(2); y(3); -0.5*y(1)*y(3)]; function res = Blasiusbc(ya, yb) res = [ya(1); ya(2); yb(2)-1]; function y = Blasiusguess(x) y(1) = x; y(2) = x^0.5; y(3) = 5-x; When this program is executed, we obtain the results shown in Figure 11.9. The shear stress on the plate is given by rU2f –(0)/ 1Rex, where from the program, we find that f –(0) = 0.3321.

Section 11.3

External Flow

631

2.5 f df/dη d2f/dη2

1.5

2

f, df/dη, d f/dη

2

2

1

0.5

0 0

1

2

3

4 η

5

6

7

8

Figure 11.9 Blasius boundary layer profiles of the stream function f1 = f, stream-wise component of velocity f2 = df/dh, and the shear f3 = d2f/dh2.

11.3.3 Potential Flow

! In incompressible potential flows, the velocity fields u are governed by ! §#u = 0 and

! § * u = 0

These conditions dictate that the velocity can be expressed as the gradient of a potential field w as ! u = §w where w satisfies Laplace’s equation, §2w = 0

(11.21)

An alternative mathematical description for two-dimensional flows is obtained using the stream function c, where u =

0c 0y

v = -

0c 0x

632

Chapter 11

Fluid Mechanics

The stream function also satisfies Laplace’s equation. Boundary conditions consist of the Neumann conditions, where the component of the velocity normal to a boundary is specified, or the Dirichlet conditions, where the value of w is specified.At solid bound! ! ! aries, the Neumann condition is u # n = 0, where n is the unit normal to the boundary. In the following examples, several methods for obtaining flow fields for two-dimensional potential flows are discussed. In two of these methods, the flows are constructed by adding together known potentials or stream functions.We now give four such quantities. Sources and Sinks wM =

m lnr 2p M

r2M = (x - xM)2 + (y - yM)2

cM =

m u 2p M

u M = tan -1

y - yM x - xM

where (xM, yM) is the location of the source or sink and m is the source strength. Doublets (Dipoles) wM =

K cosuk rk

r2K = (x - xK)2 + (y - yK)2

ck = -

K sinuk rk

u K = tan - 1

y - yK x - xK

where (xK, yK) is the location of the dipole and K is the dipole strength. Vortices w≠ =

≠ u 2p ≠

r2≠ = (x - x≠)2 + (y - y≠)2

c≠ = -

≠ lnr≠ 2p

u ≠ = tan - 1

y - y≠ x - x≠

where (x≠, y≠) is the location of the vortex and ≠ is the vortex strength. Uniform Flow Field For flow in the positive x-direction, we have wU = Ux

cU = Uy

and for flow in the positive y-direction, we have wU = Uy

cU = -Ux

where U is the flow speed. Thus, in general, one can form an additive combination of these different stream functions (or velocity potentials) to simulate different flows around different shapes. Then, if cs is the new streamline function, cs = cM + cK + c≠ + cU

Section 11.3

External Flow

Example 11.8

633

Streamline pattern using contour

To illustrate the creation of cs, we choose a uniform flow of velocity U = 5 m/s in the positive x-direction with a dipole K and a vortex ≠ located at ( -1, -1), that is, (xK, yK) = (-1, -1) and (x≠, y≠) = (-1, -1), and give the strengths of each of these component flow fields the following values: K = 5.0 and ≠ = 8p. The easiest method of determining the streamline pattern of a flow is to plot the streamlines with contour. The following script plots the streamline cs for this flow. As illustrated in Figure 11.10, the resulting streamlines for the parameters selected show flow about a cylinder with circulation. The main difficulty in obtaining these results is in how to choose the contour levels to obtain a complete description of the flow. This is accomplished by using the value of cs at the lower left corner of the domain for the minimum value and the value of cs at the top middle of the domain for the maximum value. In Figure 11.10, the surface of a cylinder, which is also a streamline, has been superimposed on the streamlines. The program that generates Figure 11.10 is as follows. nx = 100; xmin = -3.5; xmax = 1.5; ny = 100; ymin = -3.0; ymax = 1.5; [x, y] = meshgrid(linspace(xmin, xmax, nx), linspace(ymin, ymax, ny)); U0 = 5.0; Gamma = 8*pi; xGamma = -1.0; yGamma = -1.0; K = 5.0; xK = -1.0; yK = -1.0; radius = inline('sqrt((x-x1).^2+(y-y1).^2)', 'x', 'y', 'x1', 'y1'); PsiK = K*sin(atan2(y-yK, x-xK))./radius(x, y, xK, yK);

1.5 1 0.5 0

y

0.5 1 1.5 2 2.5 3

3

2

1 x

0

1

Figure 11.10 Streamlines for a cylinder with circulation in cross flow, which have been obtained from a contour plot of cs.

634

Chapter 11

Fluid Mechanics

PsiGamma = Gamma*log(radius(x, y, xGamma, yGamma))/2/pi; StreamFunction = U0*y-PsiGamma-PsiK; levmin = StreamFunction(1, nx); levmax = StreamFunction(ny, nx/2); levels = linspace(levmin, levmax, 50)'; contour(x, y, StreamFunction, levels) hold on theta = linspace(0, 2*pi); plot(xGamma+cos(theta), yGamma+sin(theta), 'k-') axis equal axis([xmin, xmax, ymin, ymax]) ylabel('y') xlabel('x')

Example 11.9

Direct calculation of streamlines

A second method to obtain flow patterns is to use fzero to find specific streamlines. In this case, we assume that the flow consists of a uniform stream of U = 1 in the positive y-direction, a source of strength m = 4.0 at (0, -1), and a source of strength m = -4.0 at (0, 1). Thus, coval = cU + cM1 + cM2 These components produce a uniform flow over an oval-shaped body given by4 2xa xU = tan m>2p x2 + y2 - a2

(11.22)

where U is the flow speed, m is the source strength, and a is a characteristic dimension. A difficulty in using fzero in this example is the need to find a good starting guess. In the following program, this is done by finding the value of the stream function c at a set of x locations along y = -2.0a. Given this initial data, a streamline is computed by marching along it, starting at y = -2.0a. At each successive y location, fzero uses function StreamFun to determine the x location of the stream function; the value of x at the previous y location is used as the initial guess. A plot from the output of the script is given in Figure 11.11, where we have assumed that a = 1. The graph has been rotated 90° so that the flow is horizontal, which is the traditional way of presenting it. The streamline that coincides with the boundary of the oval was not computed in this manner; it is plotted directly from Eq. (11.22). In the following program, nPsi is the number of streamlines and n is the number of points computed along each streamline. U = 1.0; a = 1.0; m = 4.0; co = m/(2*pi); nPsi = 15; n = 30; yStart = -2.0*a;

4

L. M. Milne-Thomson, Theoretical Hydrodynamics, Dover, Mineola, NY, 1996, p. 216.

Section 11.3

External Flow

635

2 1.5 1

x

0.5 0 0.5 1 1.5 2 2

1.5

1

0.5

0 y

0.5

1

1.5

2

Figure 11.11 Streamlines for the oval given by Eq. (11.22).

xStart = linspace(0, 2*a, nPsi); y = linspace(-2*a, 2*a, n); x = zeros(1, n); StreamFun = inline('-U*x-co*(atan2(x, y+a)-atan2(x, y-a))-psi', 'x', 'y', Á 'psi', 'U', 'co', 'a'); Psi = StreamFun(xStart, yStart, 0, U, co, a); for j = 1:nPsi guess = xStart(j); for i = 1:n x(i) = fzero(StreamFun, guess, [], y(i), Psi(j), U, co, a); guess = x(i); end if j>1 plot(y, x, 'k-', y, -x, 'k-') end hold on end axis([-2*a, 2*a, -2*a, 2*a]) ylabel('x') xlabel('y') xx = linspace(-1, 1, 100); yy = sqrt(1-xx.^2+2*xx./tan(xx/co)); plot(yy, xx, 'k-', -yy, xx, 'k-')

636

Chapter 11

Fluid Mechanics

11.3.4 Joukowski Airfoils The potential flow over a Joukowski airfoil in the complex z-plane (z = x + iy, where i = 1-1) is obtained by conformal transformation of the flow over a cylinder with circulation in the z-plane (z = j + ih). For a uniform incoming flow with speed Q and angle a relative to the j axis over a cylinder with radius R, center at zoff = joff + ihoff and circulation ≠, the complex potential is given by5 F(z) = f + ic = Qe - ia(z - zoff) + Qe ia R2>(z - zoff) +

i≠ ln C A z-zoff B /R D 2p

where f and c are the velocity potential and the stream function, respectively. Referring to Figure 11.12, the Joukowski transformation is given by z = z + l2>z

(11.23)

where l = joff + 2R2 - h2off is a real parameter determined by the position of the center of the cylinder relative to the origin of the (j, h) coordinate system. The Joukowski transformation maps each point in the z-plane to a point in the z-plane and transfers the value of F according to F(z(z)); that is, the value of F is the same at z and the corresponding point z.The transformation leaves both the circulation and the uniform flow far from the cylinder/airfoil unchanged.The circulation is adjusted so that in the z-plane the stagnation point on the downwind side of the cylinder is moved to the point (l, 0), labeled as TE in Figure 11.13, which becomes the trailing edge of the airfoil in the z plane. This value of ≠ can be found either by trial and error from plots of the streamlines in the cylinder plane or by using the theoretical value ≠ = 4pQR sin(a - uTE) iη (ξ off, η off) θTE

ξ

R Leading edge

Trailing edge (λ, 0)

Figure 11.12 Geometry for flow over a cylinder in the z-plane. 5

Panton, Incompressible Flow, p. 516.

Section 11.3

External Flow

637

2.5 2 1.5 1



0.5 0

LE

TE

0.5 1 1.5 2 2.5

3

2

1

0

1

2

ξ

Figure 11.13 Streamline pattern around a circular cylinder with circulation ≠ in the z-plane. Cylinder radius R = 1 m, a = 8°, and (joff, hoff) = (-0.093R, 0.08R).

as is done in the program given below. See Figure 11.12 for the definition of uTE. The lift per unit span on either the cylinder or the airfoil is FL = rQ≠, where r is the density of the fluid. An important quantity in the airfoil flow field is the pressure, which is usually represented by the pressure coefficient Cp =

q2 P - Pq = 1 2 rQ >2 Q2

(11.24)

where P is the local pressure, Pq is the pressure at infinity, r is the density of the fluid, and q = 2u2 + v2 is the local flow speed, where u and v are the x and y components of the fluid velocity, respectively. The local flow speed in the z-plane is computed from the complex velocity w = u - iv Hence, ww* = u2 + v2 = q2

638

Chapter 11

Fluid Mechanics

where the * denotes the complex conjugate. The complex velocity in the airfoil flow field is given by the derivative of F with respect to z; that is, w =

dz dF dF dz i≠ = = cQe-ia -Qe iaR2> A z-zoff B 2 + d dz dz dz 2p A z - zoff B dz

where, from the above Joukowski transformation given by Eq. (11.23), dz 1 = dz 1 - l2>z2 Example 11.10

Flow over a Joukowski airfoil

We shall calculate the streamlines and pressure field around a Joukowski airfoil. We assume that the cylinder has a radius R = 1.0 m and the flow comes from the lower left with an angle of 8° relative to the horizontal. The offset of the cylinder is given by (joff, hoff) = (-0.093R, 0.08R). The following program first evaluates the complex potential F in the z-plane and plots the streamlines (lines of constant c) as shown in Figure 11.13. The points on the cylinder corresponding to the leading and trailing edges of the airfoil are marked in the figure. The coordinates are then transformed to the z-plane and the streamlines are plotted in the z-plane, as shown in Figure 11.14. Finally, the pressure contours are calculated and plotted in Figure 11.15. In all cases, the 2.5 2 1.5 1

iy

0.5 0 0.5 1 1.5 2 2.5

3

2

1

0

1

2

x

Figure 11.14 The Joukowski airfoil and streamlines obtained by transforming the cylinder and flow pattern shown in Figure 11.13. The square and circle correspond to the square and circle in Figure 11.13. This case is for R = 1 m, a = 8°, and (joff, hoff) = ( -0.093R, 0.08R).

Section 11.3

External Flow

639

2.5 2 1.5 1

iy

0.5 0

0.5 1 1.5 2 2.5

3

2

1

0

1

2

x

Figure 11.15 Contours of constant pressure coefficient in the vicinity of the Joukowski airfoil shown in Figure 11.14. This case is for R = 1 m, a = 8°, and (joff, hoff) = (- 0.093R, 0.08R).

contours are obtained using contour. The solution is complicated by the fact that while Eq. (11.23) transforms the flow outside the cylinder to the flow outside the airfoil, it transforms the flow inside the cylinder to the flow over the entire z-plane. Thus, in order to obtain only the desired streamlines and pressure contours outside the airfoil, the following procedure is used. For the streamlines, the values of the stream function inside the cylinder were set to the constant value of the stream function on its surface— the surface of the cylinder is a streamline so the stream function is constant there. For the pressure, this procedure must be modified since the value of the pressure varies along the surface of the cylinder. In this case, the value of the pressure inside was set arbitrarily to zero. Figures 11.13, 11.14, and 11.15 are obtained with the following program. R = 1.0; Q = 1.0; alpha = 8.0*pi/180; ksioff = -0.093*R; etaoff = 0.08*R; zetaoff = complex(ksioff, etaoff); nksi = 800; ksimin = -3.5*R; ksimax = 2.5*R; neta = 800; etamin = -2.5*R; etamax = 2.5*R; [ksi, eta] = meshgrid(linspace(ksimin, ksimax, nksi), Á linspace(etamin, etamax, neta)); zeta = complex(ksi, eta); figure(1) % Flow over cylinder thetaTE = -asin(etaoff/R); Gamma = 4*pi*Q*R*sin(alpha-thetaTE); F = Q*exp(-1i*alpha)*(zeta-zetaoff)+ Q*exp(1i*alpha)*R^2./(zeta-zetaoff)+ . . . 1i*Gamma/(2*pi).*log((zeta-zetaoff)/R);

640

Chapter 11

Fluid Mechanics

StreamFunction = imag(F); zetapt = complex(R+ksioff, etaoff); Fpt = Q*exp(-1i*alpha)*(zetapt-zetaoff)+Q*exp(1i*alpha)*R^2./ (zetapt-zetaoff)+1i*Gamma/(2*pi).*log((zetapt-zetaoff)/R); StreamFunctionpt = imag(Fpt); rad = sqrt((ksi-ksioff).^2+(eta-etaoff).^2); indx = find(rad A 2gA2 B = yw + Q2> A 2gb2y2w A 2 + yw>(bm)2 B B

(11.28)

The critical depth over the weir ywc occurs when the Froude number v> 2gA/B equals one at that point. Thus, at the critical condition, the specific energy equation becomes ywc +

Awc = yR 2Bwc

where Awc = bywc A 2 + ywc/(bm) B Bwc = 2b + 2ywc/m The value of Q that satisfies both the Manning equation, Eq. (11.25), and the specific energy equation, Eq. (11.28), is the flow rate for all yw 7 ywc. As the slope of the channel increases, the flow rate Q increases until the critical condition is reached at the weir. For higher channel slopes, the flow rate remains constant at the critical value. We shall now calculate Q and yw for yR = 3.0 m, n = 0.014, m = 30.0, b = 1.5 m, and S0 = 0.001. The execution of the program below results in Figure 11.19, where both yR

yw

Reservoir Weir Channel Figure 11.18 Schematic of a reservoir and a discharge channel.

Section 11.4

Open Channel Flow

645

the Manning equation and the specific energy equation are plotted. In this case, the flow condition at the weir is subcritical and the intersection of the two curves gives the flow rate and the water depth. function Example11_12 yr = 3.0; g = 9.81; b = 1.5; m = 30; S0 = 0.001; n = 0.014; yw = linspace(0, yr, 100); Qbernoulli = sqrt(2*g*b^2*(yr-yw).*(2*yw+yw.^2/(b*m)).^2); plot(Qbernoulli, yw, 'k-') hold on axis([0, 30, 0, 3.0]) xlabel('Volume flow rate, Q (m^3/s)') ylabel('y_w (m)') A = b*yw.*(2+yw/(b*m)); P = 2*(b+yw*sqrt(1+1/m^2)); Rh = A./P; Qmanning = A.*(Rh.^0.6666*sqrt(S0))/n; plot(Qmanning, yw, 'k--'); legend('Bernoulli Eqn.', 'Manning Eqn.', 'Location', 'SouthEast') ywflow = fzero(@Q2526, [8.5*0.3048, 9.5*0.3048], [], b, m, S0, n, g, yr); Awflow = b*ywflow*(2+ywflow/(b*m)); Qflow = Awflow*sqrt(2*g*(yr-ywflow)); text(5, 2.7, 'Subcritical Flow') text(5, 2.5, ['Q = ' num2str(Qflow, 4) ' m^3/s']) 3 Subcritical Flow 2.5

3

Q = 19.12 m /s yw = 2.74 m

Critical Flow Point Q = 27.17 m3/s

2

c

yw (m)

ywc = 2.014 m 1.5

1

0.5 Bernoulli Eqn. Manning Eqn. 0 0

5

10 15 20 Volume flow rate, Q (m3/s)

25

30

Figure 11.19 Reservoir discharge calculation for yr = 3.0 m, b = 1.5 m, m = 30.0, S0 = 0.001, and n = 0.014. The solution is the intersection of the dashed and solid curves, which are given by the values labeled subcritical flow.

646

Chapter 11

Fluid Mechanics

text(5, 2.3, ['y_{w} = ' num2str(ywflow, 4) ' m'] ) plot(Qflow, ywflow, 'ks') ywcrit = fzero(@Q12, 6, [], b, m, yr); Awcrit = b*ywcrit*(2+ywcrit/(b*m)); Qcrit = Awcrit*sqrt(2*g*(yr-ywcrit)); text(18, 2.2, 'Critical Flow Point') text(19, 2.0, ['Q_{c} = ' num2str(Qcrit, 4) ' m^3/s']) text(19, 1.8, ['y_{wc} = ' num2str(ywcrit, 4) ' m'] ) plot(Qcrit, ywcrit, 'ks') function A = Q2526(y, b, m, S0, n, g, yr) A = (b*y*(2+y/(b*m)))*(((b*y*(2+y/(b*m))) . . . /(2*(b+y*sqrt(1+1/m^2))))^0.6666*sqrt(S0))/n- . . . sqrt(2*g*b^2*(yr-y)*(2*y+y^2/(b*m))^2); function B = Q12(ywc, b, m, yr) B = ywc+0.5*b*ywc*(2+ywc/(b*m))/(2*b+2*ywc/m)-yr;

11.5 BIOLOGICAL FLOWS A simple approximation in modeling blood flow is to assume that it can be represented by a fluid undergoing laminar, fully developed flow in a straight pipe with an axial pressure gradient that varies sinusoidally in time. This model can be described by Eq. (11.7) by replacing the term 1/rdP/dz with Asin(vt) where A is the magnitude of the sinusoidal oscillation and v is its radian frequency. Thus, 0uz 0t

= -A sin(vt) + na

0uz 1 0 ar bb r 0r 0r

(11.29)

In this model, there are two timescales, the viscous timescale Tvis = R2/n and the timescale associated with the period of the pressure gradient term Tp = 2p/v.

Example 11.13

Laminar pulsatile flow in a pipe

We shall consider blood flow in a large artery with R = 0.004 m, n = 5.0 * 10 - 6 m2/s, r = 1,000 kg/m3, and v = 2p rad/s. Thus, the timescales are Tvis = 3.2 s and Tp = 1 s. The velocity distribution uz is determined from the following program. function Example11_13 omega = 2*pi; nu = 5e-6; A = -1e6; nr = 30; rmax = 0.004; r = linspace(0, rmax, nr); nt = 16; tmax=2*2*pi/omega; t = linspace(0, tmax, nt); u = pdepe(1, @Pulse, @PulseIC, @PulseBC, r, t, [], omega, A, nu); hold on

Section 11.5

Biological Flows

647

for ijd = 1:nt plot(u(ijd,:)/(A/omega)+(ijd-1), r/rmax, 'k') plot(u(ijd,:)/(A/omega)+(ijd-1), -r/rmax, 'k') plot([(ijd-1), (ijd-1)], [-1,1], ':k') end xlabel('u_z/(A/\omega)') ylabel('r/R') ylabel('t') function [c, f, s] = Pulse(r, t, u, DuDr, omega, A, nu) c = 1.0; f = nu*DuDr; s = A*sin(omega*t); function u0 = PulseIC(r, omega, A, nu) u0 = 0; function [pl, ql, pr, qr] = PulseBC(rl, ul, rr, ur, t, omega, A, nu) pl = 0; ql = 1; pr = 0; qr = ur; Executing this program gives the results shown in Figure 11.20. As can be seen in the figure, consistent with Tvis 7 Tp, there is a large central core of relatively uniform flow and a thick viscous boundary layer on the pipe wall.

Figure 11.20 Sixteen velocity profiles corresponding to equally spaced times over the first two periods of the sinusoidally varying pressure gradient in a tube. The fluid is initially at rest. The vertical dotted lines are the zero lines for each of the profiles. The results are shown over the diameter (-1 … r/R … 1) of the vessel.

648

Chapter 11

Fluid Mechanics

EXERCISES Section 11.2.2 11.1 Water is to flow from reservoir A to reservoir B through the piping system shown in Figure 11.21. The flow rate when the valve is completely open is to be 0.003 m3/s. The generalized head loss equation becomes zA - zB =

5 lLV2 V2 + a KLm 2gD 2g m=1

where zA - zB is the change in height between the free surfaces of the water in the two reservoirs, KLm are the minor loss coefficients at the locations shown in Figure 11.21, l is the pipe friction coefficient, and V = 4Q/pD2 is the average velocity in the pipe. If nvis = 1.3 * 10 - 6 m2/s and r = 1,000 kg/m3, then determine the pipe diameter (Answer: D = 0.04698 m). 11.2 The oscillations caused by a suddenly released fluid from a height Z that separates the fluid levels in two rectangular prismatic reservoirs connected by a long pipeline of length L shown in Figure 11.22 can be determined from9 d2Z dZ dZ 2 + signum a b pa b + qZ = 0 dt dt dt2 where fA1A2Le 2DaL(A1 + A2)

p =

q =

ga(A1 + A2) A1A2L

Moreover, it has been assumed that the motion of the liquid is mostly turbulent so that the head loss is proportional to the square of the velocity. The quantity Le is the equivalent length of the pipe incorporating minor losses, g is the gravitational constant, f is the friction coefficient in the pipe, A1 and A2 are the surface areas of the two reservoirs, a is the area of the pipeline, and D is its diameter.

A KL2 = 0.3 (Elbow)

3m

KL1 = 0.5 (Entrance) B

KL5 = 1.0 (Exit) Total length = 25 m k = 0.26 mm = pipe roughness KL3 = 0.3 (Elbow)

KL4 = 0.15 (Valve fully opened)

Figure 11.21 Piping system between two reservoirs.

9

D. N. Roy, Applied Fluid Mechanics, Ellis Horwood Limited, Chichester, England, 1988, pp. 290–293.

Exercises

649

Z A1

A2

L D, a, f Figure 11.22 Interconnected reservoirs.

If p = 0.375 m - 1 and q = 7.4 * 10 - 4 s - 2 and the initial conditions are Z(0) = Zn m and dZ(0)/dt = 0 m/s, then determine the value of the first occurrence of tn for which Z(tn) = 0 when Zn = 5, 10, Á , 50. Plot the results, which should look like those shown in Figure 11.23. Use interp1 to determine tn. 11.3 Consider a belt whose surface is moving vertically upward with velocity Vb = 1.5 m/s. There is a thin layer of oil on the surface whose thickness is held constant. Gravity acts to pull the oil downward, while viscous forces drag the oil upward. This flow is governed by the equation 0w 0 2w = n 2 - g 0t 0x 280 260

Time to first zero crossing (s)

240 220 200 180 160 140 120 100 80

5

10

15

20

25 30 35 Initial height [Z(0)]

40

45

50

Figure 11.23 Values of the first occurrence of tn for which Z(tn) = 0 as a function of Z(0) = Zn.

650

Chapter 11

Fluid Mechanics

1.6 1.4

Vertical Velocity (m/s)

1.2 1 t = 0.4 s

0.8 0.6 0.4 0.2 0 −0.2 0

0.002

0.004

0.006

0.008

0.01

y (m) Figure 11.24 Velocity distribution in an oil layer on a belt surface at x = 0 moving vertically at speed 1.5 m/s. The velocity distributions are shown at equally spaced intervals in time up to t = 0.4 s. The dotted line is the theoretical steady-state solution to the problem. It is seen that this curve is virtually coincident with the curve at t = 0.4 s.

where w(x, t) is the velocity distribution through the thickness of the oil layer, n is the kinematic viscosity, and g = 9.81 m/s2 is the acceleration of gravity. At the surface of the belt, the no-slip condition is enforced, w(0, t) = Ub, while at the free surface of the oil, the stress is zero, rnc

0w d = 0 0x x = h

Let h = 0.01 m, r = 900 kg/ m3, and n = 0.0005 m2/s. Calculate the velocity profiles for times up to the point where the velocity profile reaches a steady state, which occurs at approximately t = h2/n = 0.2 s. The results are shown in Figure 11.24 along with the theoretical steady-state solution w =

rg 2 rgh x x + Vb 2m m

11.4 Consider a horizontal layer of fluid with r = 800 kg/m3, m = 0.02 Ns/m2, and h = 0.02 m that is initially at rest. There is a free surface y = h and at y = 0 the fluid is subjected to a constant stress (t = 0.01 N/m2) that is turned on at t = 0. Compute the velocity profiles in the layer for times from t = 0 to t = 1.0 s. The results are shown in Figure 11.25. Section 11.3.1 11.5 Consider a viscous fluid with m = 0.02 kg/m # s and r = 800 kg/m3 in a channel with height 0.3 cm. The fluid is initially at rest. At t = 0, a pressure gradient of magnitude

Exercises

651 0.02 0.018 0.016 0.014

y (m)

0.012 0.01 0.008 0.006 t=1s 0.004 0.002 0 0

0.5

1 1.5 Horizontal Velocity (m/s)

2

2.5

Figure 11.25 Velocity profiles in a horizontal layer with a free surface at y = 0.02 and a constant stress condition t = 0.01 N/m2 at y = 0. The flow is started from rest.

10 kPa/m in the direction along the axis of the channel is turned on, and at the same time the upper plate begins moving at 1.5 m/s in the direction from low to high pressure. For times from 0 to 0.04 s in steps of 0.005 s, plot the velocity profile. The results should look like those shown in Figure 11.26. Section 11.3.3 11.6 The flow about a thin symmetric airfoil can be approximated by potential flow theory.10 The chord of the airfoil extends along the x axis from x = 0 to x = c and is represented by a vortex sheet whose strength g(x) is given by g(u) = 2aV q

1 + cosu sinu

where x =

c (1 - cosu) 2

0 … u … p

a is the angle of attack (in radians) of the incoming flow relative to the x axis, and V q is the flow speed. Consider the vortex sheet to be approximated by a set of N discrete vortices separated by a distance ¢x = c/N with strength ≠i = g(ui)¢x. Using the procedure employed in Example 11.8, draw the streamlines of this flow for a = 10°, c = 2 m, and V q = 100 m/s. The results should look like those shown in Figure 11.27. 10

See, for example, J. D. Anderson, Fundamentals of Aerodynamics, McGraw-Hill, New York, 1991, Chapter 4.

652

Chapter 11

Fluid Mechanics

3

2.5

y (mm)

2

1.5

t=1s

1

0.5

0 0

0.2

0.4

0.6 0.8 1 Horizontal Velocity (m/s)

1.2

1.4

1.6

Figure 11.26 Velocity profiles in a channel of height h = 0.003 m at equally spaced times from 0 to 1 s. The flow is started from rest.

1.5

1

0.5

0

0.5

1

1.5 1

0.5

0

0.5

1

1.5

2

2.5

Figure 11.27 Streamlines for a thin airfoil with a 2-m chord and an angle of attack of 10°. The flow is from left to right and the foil extends horizontally from (0, 0) to (2, 0).

3

Exercises

653

y U D

Wall

0.25D

x

Figure 11.28 Cylinder near wall with uniform horizontal flow upstream.

11.7 Consider a potential flow over a cylinder that is placed near a wall as shown in Figure 11.28. Represent the flow over the cylinder and wall with a uniform flow of speed U = 1.0 m/s and two dipoles of strength m = 2pUD2/4 located at (x, y) = (0, 0.75D) and (0, -0.75D). Plot the streamline pattern. Note that the closed streamline around each dipole is not circular. 11.8 The flow about a thin cambered airfoil shown in Figure 11.29 can be approximated by potential flow theory.11 The chord of the airfoil extends along the x-axis from x = 0 to x = c and is represented by a vortex sheet placed along the chord. The strength g(x) of this vortex sheet is given by g(u) = 2V q aA0

q

1 + cos u + a An sin (nu)b sin u n=1

where 1 x = (1 - cos u) c 2

0 … u … p

a is the angle of attack (in radians) of the incoming flow relative to the x axis and Vq is the flow speed. The constants An are given by

z

Camber line z(x)

α Γ1 V∞

Γ2

ΓN Chord

Figure 11.29 Placement of a vortex sheet on the chord line.

11

Ibid.

c

x

654

Chapter 11

Fluid Mechanics

p

1 dz A0 = a du p 3 dx o 0

p

An =

2 dz cos (nuo)duo p 3 dx 0

where z(x) is the vertical distance between the chord line and the camber line. Let the camber line be z x x 2 x = 2.6595 c a b - 0.6075 + 0.1147 d c c c c = 0.02208 a1 -

x b c

0 … x/c … 0.2025

0.2025 … x/c … 1.0

where the distance z is normal to the chord. Compute An for n = 0, 1, Á , 20. Let the vortex sheet be approximated by a set of Nv discrete vortices (see Section 11.3.3) along the x-axis in the region 0 … x/c … 1. The vortices are separated by a distance ¢x = c/N and have the strengths ≠i = g(ui)¢x. Use contour to draw the streamlines of this flow for a = 4°, c = 2 m, and Vq = 100 m/s. In the streamline plot, the camber line should closely follow a streamline (Partial answers: A0 = 0.0412, A1 = 0.0955, A2 = 0.0792, A3 = 0.0568). Section 11.3.4 11.9 Let the chord L of the Joukowski airfoil be the distance following a straight line along the x axis from leading edge to trailing edge in the z plane. Let the thickness t of the foil be the maximum vertical distance along the y-axis between the lower and upper surfaces of the foil, as shown in Figure 11.30. Let the camber b of the foil be the maximum distance between the chord line (the x axis) and the midline of the foil. (A point on the midline is located with equal vertical distance to the upper and lower surfaces of the foil.) It is found that t/L is primarily a function of joff and b/L is primarily a function of hoff. Plot t/L versus joff over the range -0.2R to 0R for hoff /R = [0.01, 0.02, 0.03, 0.04], and plot b/L versus hoff over the range 0.0R to 0.04R for joff /R = [-0.2, -0.15, -0.10, -0.05, 0]. The plots should look like those in Figure 11.31.

Maximum thickness

Maximum camber

y/L = 0 Midline

x/L = 0 Figure 11.30 Definitions of maximum foil thickness and maximum foil camber.

Exercises

655 0.02 0.018 0.25

0.016 0.014

0.2

b/L

t/L

0.012 0.15

0.01 0.008

0.1

0.006 0.004

0.05

0.002 0 0.2

0.1 ξoff

0

0

0

(a)

0.02 ηoff

0.04

(b)

Figure 11.31 (a) Foil thickness versus j offset. (b) Foil camber versus h offset. In figure (a), five curves are drawn for hoff /R = 0, 0.01, 0.02, 0.03, and 0.04. In figure (b), five curves are drawn for joff /R = -0.2, -0.15, -0.10, -0.05, and 0.0. Note that in each plot the five curves are virtually on top of one another.

11.10 Plot the pressure coefficient distribution on the upper and lower surfaces of a Joukowski airfoil as given by Eq. (11.24) for R = 1.0, a = 6°, joff = -0.093R, hoff = 0.08R, t/L = 0.1215, and b/L = 0.0401.The results should look like those given in Figure 11.32. 11.11 The lift coefficient of the foil is given by CL =

FL rQ2L/2

where FL = rQ≠ is the lift force per unit span. Plot CL versus angle of attack a, which ranges from -10° to 10° for joff = -0.093R and hoff = [0, 0.02R, 0.04R, 0.06R, 0.08R]. The results should look like the one shown in Figure 11.33. For convenience, let R = 1. Section 11.4 11.12 Find the reservoir discharge flow rate as a function of channel slope when the vertical distance between the top of the weir and the free surface in the reservoir is yr = 3.0 m and the long prismatic channel is described by n = 0.014, b = 1.5 m, and m = 1.0. The result should look like that shown in Figure 11.34. 11.13 Flow discharges from a reservoir into a prismatic channel with conditions yr = 3.0 m, n = 0.014, b = 1.5 m, m = 1.0, and S0 = 0.003. Note from Figure 11.34 that S0 is above the critical slope, indicating that the flow rate is 45.3336 m3/s, which is the maximum value. Compute the surface height profile in the channel assuming that the channel is long enough for the flow to gradually reach the supercritical normal flow depth. The results should look like those given in Figure 11.35.

656

Chapter 11

Fluid Mechanics

2 1.5 1 0.5

y or Cp

0 0.5 1 1.5 2 2.5 3

2

1.5

1

0.5

0 x

0.5

1

1.5

2

Figure 11.32 Foil and pressure coefficient distribution on upper surface (dotted line) and lower surface (dashed line) for R = 1.0, Q = 1.0, a = 6°, joff = -0.093R, hoff = 0.08R, t/L = 0.1215, and b/L = 0.0401.

2 1.5 t/L=0.1215, b/L=0.04013 1

CL

0.5 0 −0.5 t/L=0.1205, b/L=0.0 −1 −1.5 −2 −10

−5

0 α (°)

5

Figure 11.33 Lift coefficient CL versus angle of attack a for joff = -0.093 and hoff = 0, 0.02, 0.04, 0.06, and 0.08.

10

Exercises

657

60

50

3

Flow rate (m /s)

40

3

30

Critical Flow Rate = 45.334 m /s Critical Slope = 0.002227

20

10

0 0

0.5

1 1.5 Channel Slope (× 10−3)

2

2.5

Figure 11.34 Flow rate versus channel slope for a reservoir discharge problem with yr = 3.0 m, n = 0.014, b = 1.5 m, and m = 1.0.

2.5 2.4 2.3

yc

Water depth, y (m)

2.2 2.1 y

2

0

1.9 1.8 1.7 1.6 1.5 0

200

400

600

800

1000

x (m) Figure 11.35 Surface profile in a channel with a critical flow inlet condition at x = 0 and a slope that creates a supercritical flow for n = 0.014, b = 1.5 m, m = 1.0, Q = 45.3336 m3/s, and S0 = 0.003.

658

Chapter 11

Fluid Mechanics

Figure 11.36 Flow profiles in three tubes with radii of 0.001, 0.005, and 0.01 m and the same oscillatory pressure gradient and fluid viscosity. In each case, sixteen velocity profiles corresponding to equally spaced times over the first two periods of the sinusoidally varying pressure gradient are shown. The fluid is initially at rest. The vertical dotted lines are the zero lines for each of the profiles. The results are shown over the diameter of the vessel (-1 … r/R … 1).

Section 11.5 11.14 Consider flow in a tube driven by an oscillatory pressure gradient as described in Section 11.5. Let n = 5.0 * 10 - 6 m2/s, r = 1,000 kg/m3, and v = 2p rad/s. Calculate and plot the flow in the tube for three different radii: R = 0.001, 0.005, and 0.01 m. This results in viscous timescales of 0.2, 5.0, and 20.0 s, respectively. The results should look like those given in Figure 11.36.

BIBLIOGRAPHY B. R. Munson, D. F. Young, and T. H. Okiishi, Fundamentals of Fluid Mechanics, 3rd ed., John Wiley & Sons, New York, 1998. J. D. Anderson, Fundamentals of Aerodynamics, 2nd ed., McGraw-Hill, New York, 1991. V. L. Streeter, E. B. Wylie, and K. W. Bedford, Fluid Mechanics, 9th ed., McGraw-Hill, New York, 1998. R. W. Fox and A. McDonald, Introduction to Fluid Mechanics, 5th ed., John Wiley & Sons, New York, 1998.

12 Heat Transfer Keith E. Herold

12.1 Conduction Heat Transfer 660 12.1.1 Transient Heat Conduction in a Semi-Infinite Slab with Surface Convection 660 12.1.2 Transient Heat Conduction in an Infinite Solid Cylinder with Convection 662 12.1.3 Transient One-Dimensional Conduction with a Heat Source 664 12.2 Convection Heat Transfer 668 12.2.1 Internal Flow Convection: Pipe Flow 668 12.2.2 Thermal Boundary Layer on a Flat Plate: Similarity Solution 672 12.2.3 Natural Convection Similarity Solution 677 12.3 Radiation Heat Transfer 682 12.3.1 Radiation View Factor: Differential Area to Arbitrary Rectangle in Parallel Planes 682 12.3.2 View Factor Between Two Rectangles in Parallel Planes 685 12.3.3 Enclosure Radiation with Diffuse Gray Walls 687 12.3.4 Transient Radiation Heating of a Plate in a Furnace 690 Exercises 692 Several techniques for analyzing and visualizing conduction, convection, and radiation heat transfer are presented.

659

660

Chapter 12

Heat Transfer

12.1 CONDUCTION HEAT TRANSFER 12.1.1 Transient Heat Conduction in a Semi-Infinite Slab with Surface Convection The transient temperature distribution T(x, t) in a semi-infinite solid is represented by the governing equation1 1 0T 0 2T = 2 a 0t 0x where x is the spatial coordinate measured from the free surface into the solid, t is the time, and a is the thermal diffusivity of the solid. We assume that the solid is initially at a uniform temperature Ti; that is, T(x, 0) = Ti. In addition, there is convection at the boundary surface x = 0, which is given by -k

0T(0, t) = h A T q - T(0, t ) B 0x

where h is the heat transfer coefficient, k is the thermal conductivity of the solid, and T q is the ambient air temperature. Upon introducing the nondimensional variables u(h, t) =

T(h, t) - Ti , T q - Ti

h 1at, k

t =

h =

hx k

the governing equation becomes 0 2u 1 0u = 2t 0t 0h2 and the convection boundary condition at h = 0 becomes 0u = u - 1 0h The solution to this system can be written as1 u(h, t) = erfc[h/(2t)] - e(h + t )erfc[h/(2t) + t] 2

where erfc is the complementary error function. If the initial heat flux at the surface is expressed as q–o = h(T q - Ti), then the heat flux at the surface h = 0 is given by q– = q–o(1 - u) = -q–o

1

0u 0h

F. P. Incropera and D. P. DeWitt, Fundamentals of Heat and Mass Transfer, 4th ed., John Wiley & Sons, New York, 1996, p. 239.

Section 12.1

Conduction Heat Transfer

661

Example 12.1 Transient heat conduction time and temperature distributions in a semi-infinite solid We shall examine the temperature in the semi-infinite solid in two ways. In the first way, the temperature is plotted over the range 0 … h … 5 and 0.01 … t … 3; these results are shown in Figure 12.1. In the second way, the temperature is plotted as a function of t for 0.01 … t … 4 at h = 0, 1, 2, 3, 4, and 5.These results are shown in Figure 12.2.The script is tau = linspace(0.01, 3, 30); eta = linspace(0, 5, 20); [x, t] = meshgrid(eta, tau); theta = inline('erfc(0.5*x./t)-exp(x+t.^2).*erfc(0.5*x./t+t) ', 'x', 't'); figure(1) mesh(x, t, theta(x, t)) xlabel('\eta') ylabel('\tau') zlabel('\theta') figure(2) eta = 0:5; tau = linspace(0.01, 4, 40); for k = 1:length(eta) thet = theta(eta(k), tau); plot(tau, thet, 'k-') text(.92*4,1.02*thet(end), ['\eta = ' num2str(eta(k))]) hold on end xlabel('\tau') ylabel('\theta')

1 0.8

θ

0.6 0.4 0.2 0 3 2

4 3

1 τ

2 0

1 0

η

Figure 12.1 Temperature in a semi-infinite solid as a function of nondimensional position h and nondimensional time t.

5

662

Chapter 12 0.9

Heat Transfer η=0

0.8 η=1 0.7 η=2

0.5

η=3

0.4

η=4

0.3

η=5

θ

0.6

0.2 0.1 0 0

0.5

1

1.5

2 τ

2.5

3

3.5

4

Figure 12.2 Temperature in a semi-infinite solid as a function of nondimensional time t at several nondimensional locations h.

12.1.2 Transient Heat Conduction in an Infinite Solid Cylinder with Convection The transient temperature distribution T(r, t) in an infinitely long solid circular cylinder that is initially at a uniform temperature Ti and has convection at the surface is represented by the governing equation2 0 2T 1 0T 1 0T + = 2 r a 0r 0t 0r where r is the radial coordinate measured from the center of the cylinder, t is the time, and a is the thermal diffusivity of the cylinder. If the cylinder has a radius R, then the convection boundary condition at r = R is of the form -k

0T = h(T - T q ) 0r

where T q is the ambient air temperature, h is the heat transfer coefficient, and k is the thermal conductivity of the cylinder. We introduce the following dimensionless variables: j = r/R, Bi = hR/k is the Biot number, t = at/R2, and u(j, t) =

2

Ibid., p. 229.

T(j, t) - T q Ti - T q

Section 12.1

Conduction Heat Transfer

663

Then the governing equation becomes 0 2u 1 0u 0u + = 2 j 0j 0t 0j and the convection boundary condition at j = 1 becomes 0u + Bi u = 0 0j The solution can be written as3 q

u(j, t) = a Cn exp(-z2nt)J0(znj) n=1

where Cn =

J1(zn) 2 2 zn J0(zn) + J21(zn)

The quantity Jm(x) is the Bessel function of the first kind of order m and zn are the positive roots of J1(zn) Bi = 0 J0(zn) zn It is noted that the heat transfer rate in this type of problem can be approximated by a lumped parameter formulation leading to a first-order time constant ttc = 1/(2Bi); this approximation becomes more accurate as the Biot number decreases. In the case considered in the following example, a time constant of ttc = 1 is predicted by the lumped parameter model.4 When a more accurate model is used, as illustrated in Example 12.2, the value of t for which u = 1/e is ttc = 1.252 indicating that the simplified model is reasonably accurate for the case where Bi = 0.5. Example 12.2

Transient heat conduction in an infinite solid cylinder with convection

We shall plot u(j, t) for 0 … j … 1, 0 … t … 1.5, and Bi = 0.5 using the lowest fifteen positive roots of zn. The roots are determined by using FindZeros, which was introduced in Section 5.5.1. The script is Bi = .5; Nroot = 15; CylinderRoots = inline('x.*besselj(1, x)-Bi*besselj(0, x)', 'x', 'Bi'); r = FindZeros(CylinderRoots, Nroot, linspace(0, 50, 200), Bi); tau = linspace(0, 1.5, 20); [t, rt] = meshgrid(tau, r);

3

Ibid. In Exercise 12.9, the value of ttc for the centerline temperature is determined for the case where u = 1/e = 0.3679 when a lumped parameter model is used.

4

664

Chapter 12

Heat Transfer

1.2 1

θ

0.8 0.6 0.4 1

0.2 0 0.5

0.5 1 τ

1.5

0

ξ

Figure 12.3 Temperature distribution in an infinite cylinder as a function of nondimensional time t and nondimensional radial position j for Bi = 0.5.

Fn = exp(-t.*rt.^2); cn = 2*besselj(1, r)./(r.*(besselj(0, r).^2+besselj(1, r).^2)); ccn = meshgrid(cn, tau); pro = ccn'.*Fn; rstar = linspace(0, 1, 20); [R, rx] = meshgrid(rstar, r); Jo = besselj(0, rx.*R); the = Jo'*pro; [rr, tt] = meshgrid(rstar, tau); mesh(rr, tt, the') xlabel('\xi') ylabel('\tau') zlabel('\theta') view(49.5, -34) Execution of this program results in Figure 12.3.

12.1.3 Transient One-Dimensional Conduction with a Heat Source One-dimensional, transient conduction is governed by the following equation: q 0 2T 1 0T = + 2 a 0t k 0x where T = T(x, t) is the temperature, t is the time, x is the spatial coordinate, a is the thermal diffusivity, k is the thermal conductivity, and q is the volumetric heat source.

Section 12.1

Conduction Heat Transfer

665

We convert this equation to a dimensionless form by introducing the following nondimensional quantities: j =

x L

u =

T - Tq Ti - T q

t =

at L2

Bi =

hL k

L2q k(Ti - T q )

© =

x =

-q–L k(Ti - T q )

where u = u(j, t), L is the length of the domain, Ti is an arbitrary temperature that usually represents the initial temperature, q– is the heat flux, and T q is the fluid temperature for a convective boundary. For cases where a convective boundary condition is not used, T q is an arbitrary temperature with the requirement that it must be different from Ti. In terms of these variables, the governing equation becomes 0u 0 2u = + © 0t 0j2

(12.1)

The domain is illustrated in Figure 12.4. Typical boundary conditions at each end of the domain are as follows: Fixed Temperature u = uw Specified Flux 0u = xw 0j Convective 0u = -Biuw 0j where the negative sign in the convective boundary condition is used for the boundary at j = 1 and the subscript w represents the values at the wall. Equation (12.1) is a partial differential equation of the parabolic type with one spatial dimension. One method of solution that is applicable to a restricted set of boundary conditions is separation of variables. An example of this type of solution ξ

Volumetric source Σ

θ(ξ, τ)

ξ =0 Figure 12.4 Geometry of a one-dimensional transient heat transfer with source © .

ξ=1

666

Chapter 12

Heat Transfer

was used to obtain the result given in Section 12.1.2. In the present case, we shall seek a numerical solution by using pdepe, which solves parabolic partial differential equations with one spatial variable. Recall Section 5.5.6. Example 12.3

One-dimensional transient heat transfer with source

Consider the data in Table 12.1, which describes a one-dimensional system subjected to a transient source. We shall determine the temperature as a function of time at five locations in the solid: j = 0.0, 0.25, 0.5, 0.75, and 1.0. In obtaining the solution, we note that pdepe requires three functions: (1) one to define the partial differential equation, which we call pde1D; (2) one to define the initial conditions, which we call pdeIC; and (3) one to define the boundary conditions, which we call pdeBC. The boundary and initial conditions are summarized in Table 12.1. function Example12_3 Bi = 0.1; Tr = 0.55; Sigma = 1; xi = linspace(0, 1, 41); tau = linspace(0, 1, 101); theta = pdepe(0, @pde1D, @pdeIC, @pdeBC, xi, tau, [], Bi, Tr, Sigma); z = 0:0.25:1; figure(1) for k = 1:length(z) kk = find(xi == z(k)); plot(tau, theta(:, kk), 'k-') hold on if k == 1 text(0.5, 1.02*theta(end, kk), '\xi = 0.0 and 0.25') elseif k > 2 text(0.5, theta(end, kk)+.02, ['\xi = ' num2str(xi(kk))]) end end axis([0 1 0.5 1]) xlabel('\tau') ylabel('\theta') figure(2) [thmin imin] = min(theta(:,1)); plot(xi, theta(1,:), 'k-', 'LineWidth', 2) hold on TABLE 12.1 Input Values for Example 12.3

Parameter Boundary Conditions and Source Dimensionless source strength: At j = 0: At j = 1: Initial Conditions Linear distribution: Numerical Grid Parameters Number of equally spaced grid points in 0 6 j 6 1 Number of equally spaced time steps 0 6 t 6 1

Value © = 1 Bi = 0.1 u(1, t) = uw = 0.55 u(j, 0) = 1 - 0.45j 41 101

Section 12.1

Conduction Heat Transfer

667

plot(xi, theta(2,:) , 'k', xi, theta(imin,:), 'k:') solinit = bvpinit(linspace(0, 1, 20), [1 1]); sol = bvp4c(@barode, @barbc, solinit, [], Bi, Sigma); x = linspace(0, 1, 100); y = deval(sol, x); plot(x, y(1,:), 'k--'); xlabel('\xi') ylabel('\theta') legend(['\tau = 0 (Initial condition)'], ['\tau = ' num2str(tau(2))], . . . ['\tau = ' num2str(tau(imin)) ' (Minimum at \xi = 0)'], . . . '\tau > 2 (Steady state)', 'Location', 'SouthWest') function dydx = barode(x, y, Bi, Sigma) dydx = [y(2), -Sigma]'; function res = barbc(ya, yb, Bi, Sigma) res = [ya(2)-Bi*ya(1), yb(1)-0.55]'; function [c, f, s] = pde1D(x, t, u, DuDx, Bi, Tr, Sigma) c = 1; f = DuDx; s = Sigma; function T0 = pdeIC(x, Bi, Tr, Sigma) T0 = 1-0.45*x; function [pl, ql, pr, qr] = pdeBC(xl, ul, xr, ur, t, Bi, Tr, Sigma) pr = ur-Tr; qr = 0; pl = -Bi*ul; ql = 1; The execution of this program results in Figures 12.5 and 12.6.The initial condition, which is a linear temperature profile, is shown in Figure 12.6 as a straight line and in Figure 12.5 1 ξ = 0.0 and 0.25

0.95

ξ = 0.5

0.9 0.85 0.8 θ

ξ = 0.75 0.75 0.7 0.65 0.6 ξ=1 0.55 0.5

0

0.2

0.4

0.6

0.8

1

τ Figure 12.5 One-dimensional heat conduction using the data in Table 12.1. For the same data plotted against the spatial coordinate with time as a parameter, see Figure 12.6.

668

Chapter 12

Heat Transfer

1 0.95 0.9 0.85

θ

0.8 0.75 0.7 0.65 0.6 0.55 0

τ = 0 (Initial condition) τ = 0.01 τ = 0.1 (Minimum at ξ = 0) τ > 2 (Steady state) 0.2

0.4

ξ

0.6

0.8

1

Figure 12.6 One-dimensional heat conduction using the data in Table 12.1. For the same data plotted against time with location as a parameter, see Figure 12.5.

by the equal spacing between the curves at t = 0. The top curve in Figure 12.5 is the temperature at j = 0 where convection is occurring. At small values of t, the temperature drops rapidly due to convection and conduction. After about t = 0.1, the temperature of the surface begins to rise as the steady-state temperature profile, defined by the energy source, is approached. In Figure 12.6, the profile at the time of lowest temperature at j = 0 is shown as a dotted line. The steady-state solution could be obtained by running pdepe for large t. To confirm that result, the steady-state curve plotted in Figure 12.6 was computed using bvp4c.

12.2 CONVECTION HEAT TRANSFER 12.2.1 Internal Flow Convection: Pipe Flow The energy equation for flow in a pipe, where axial conduction is assumed to be negligible compared to the advection and symmetry about the longitudinal axis is assumed, can be written as 1 0 0T u 0T ar b = r 0r a 0z 0r where T = T(r, z) is the fluid temperature, r is the radial coordinate measured from the centerline, z is the axial coordinate, u is the fluid velocity, and a is the thermal diffusivity. We introduce the dimensionless coordinates j = r/R and z = z/L, where R is the pipe radius and L is the pipe length. In addition, we introduce the fluid velocity as u = 2V(1 - j2) where V is the average velocity in the pipe and u has the

Section 12.2

Convection Heat Transfer

669

parabolic profile expected in fully developed laminar flow. Then, the governing equation becomes 0T R 1 0 0T aj b = Re Pr (1 - j2 ) j 0j 0j L 0z where T = T(j, z), Re = 2RV/n is the Reynolds number, Pr = n/a is the Prandtl number, and n is the momentum diffusivity. The auxiliary conditions needed to solve this equation include an entry condition on T at z = 0; that is, T(j, 0), and two boundary conditions. The boundary condition at the centerline is symmetry. Two wall boundary conditions of interest are the constant wall temperature and constant wall heat flux. The wall heat flux can be written as q– = -k

0T k 0T = 0r R 0j

The mean temperature is defined at a pipe cross section at a specified z as R

Tm(z) = 2p

R

3

uTrdr n 2p

0

3

urdr

(12.2a)

0

or 1

Tm(z) = 4

3

(1 - j2)jT(j, z)dj

(12.2b)

0

The mean temperature can be used to define a useful dimensionless temperature u as u(j, z) =

T(j, z) - Tw Tm(z) - Tw

where Tw is the wall temperature. With this definition, Eq. (12.2b) becomes 1

4

3

u(j, z)(1 - j2)jdj = 1

0

The temperature u is used to define the concept of a thermally fully developed state, which is required to satisfy du = 0 dz The heat transfer coefficient is defined as h =

q– Tm - Tw

670

Chapter 12

Heat Transfer

which is a constant in the thermally fully developed region. It is common practice to express the heat transfer coefficient in dimensionless form as a Nusselt number, denoted Nu, Nu =

h2R k

It is well known5 that for fully developed flow, Nu = 3.66 for a constant wall temperature and Nu = 4.36 for a constant heat flux. Example 12.4

Heat transfer coefficient for laminar flow in a pipe

In this example, we shall use pdepe to solve the governing equation for the standard boundary conditions: (i) constant wall temperature and (ii) constant heat flux. It is assumed that we have laminar flow with Re = 40 and Pr = 5, and the pipe radius R = 0.01 m and the pipe length L = 0.5 m. In addition, we assume that the boundary condition for constant heat flux is qw = 10 W/m2, the boundary condition for constant wall temperature is Tw = 40°C, the entry condition is T(j, 0) = 20°C, and k = 0.6 W/(m K). The program is as follows: function Example12_4 Tw = 40; qw = 10; Re = 40; Pr = 5; R = 0.01; L = 0.5; k = 0.6; Rt = 401; zt = 50; dxi = 1/(Rt-1); xi = linspace(0, 1, Rt); zeta = linspace(0, 1, zt); solT = pdepe(1, @pdepde, @pdeic, @pdebcT, xi, zeta, [], Tw, qw, Re, Pr, R, L, k); solF = pdepe(1, @pdepde, @pdeic, @pdebcF, xi, zeta, [], Tw, qw, Re, Pr, R, L, k); NuT = zeros(zt,1); NuF = NuT; figure(1) for i = 1:zt TmT = 4*trapz(xi, xi.*(1-xi.^2).*solT(i,:)); dThdxiT = (solT(i,Rt)-solT(i,Rt-1))/(dxi*(TmT-solT(i,Rt))); NuT(i) = -2*dThdxiT; TmF = 4*trapz(xi, xi.*(1-xi.^2).*solF(i,:)); dThdxiF = (solF(i,Rt)-solF(i,Rt-1))/(dxi*(TmF-solF(i,Rt))); NuF(i) = -2*dThdxiF; end ThT = (solT(end,:)-ones(1,Rt)*Tw)/(TmT-Tw); ThF = (solF(end,:)-ones(1,Rt)*solF(end,Rt))/(TmF-solF(end,Rt)); plot(xi, ThT, 'k-', xi, ThF, 'k--') xlabel('\xi') ylabel('\theta') legend('Constant wall temperature', 'Constant wall heat flux') figure(2) plot(zeta, NuT, 'k-', zeta, NuF, 'k--') xlabel('\zeta')

5

W. M. Kays and M. E. Crawford, Convective Heat and Mass Transfer, 2nd ed., McGraw Hill, New York, 1980, p. 96.

Section 12.2

Convection Heat Transfer

671

ylabel('Nu') ylim([0 6]) legend('Constant wall temperature', 'Constant wall heat flux') function [c, f, s] = pdepde(xi, zeta, T, DTDxi, Tw, qw, Re, Pr, R, L, k) c = Re*Pr*R/L*(1-xi^2); f = DTDxi; s = 0; function T0 = pdeic(xi, Tw, qw, Re, Pr, R, L, k) T0 = 20; function [pl, ql, pr, qr] = pdebcT(xil, Tl, xir, Tr, zeta, Tw, qw, Re, Pr, R, L, k) pl = 0; ql = 1; pr = Tr-Tw; qr = 0; function [pl, ql, pr, qr] = pdebcF(xil, Tl, xir, Tr, zeta, Tw, qw, Re, Pr, R, L, k) pl = 0; ql = 1; pr = -qw; qr = k/R; Execution of the program results in Figures 12.7 and 12.8. In Figure 12.7, the temperature as a function of the nondimensional radial position in the pipe outlet is given. It is noted that the different boundary conditions result in a different temperature slope at the wall. This temperature slope, and the accompanying differences in shape of the temperature profiles, translates into a different heat transfer coefficient as shown in Figure 12.8. The asymptotic behavior of the heat transfer coefficient indicates the approach to the thermally fully developed state. The values of the fully developed Nusselt numbers computed are within 1% of published values; the calculation can be made more accurate by increasing the number of spatial grid points Rt. 2 Constant wall temperature Constant wall heat flux

1.8 1.6 1.4

θ

1.2 1 0.8 0.6 0.4 0.2 0

0

0.2

0.4

0.6

0.8

ζ Figure 12.7 Temperature versus radial position for laminar pipe flow with different boundary conditions: (i) constant wall temperature and (ii) constant wall heat flux.

1

672

Chapter 12

Heat Transfer

6 Constant wall temperature Constant wall heat flux

5

Nu

4

3

2

1

0

0

0.2

0.4

0.6

0.8

1

ζ Figure 12.8 Nusselt number versus axial position for laminar pipe flow with different boundary conditions: (i) constant wall temperature and (ii) constant wall heat flux.

12.2.2 Thermal Boundary Layer on a Flat Plate: Similarity Solution The velocity profiles for laminar boundary layer flow over a flat plate shown in Figure 12.9 are obtained from the solution of the following Blasius equation:6 d3f dh3

+

f d2f = 0 2 dh2

(12.3)

u∞, T∞ Velocity profile Temperature profile Boundary layer y

Plate x

Figure 12.9 Flow over a flat plate.

6

Incropera and DeWitt, Fundamentals of Heat, pp. 350–352.

Section 12.2

Convection Heat Transfer

673

where f is the modified stream function given by f =

c u q 1vvisx/u q

The stream function c is defined such that u = 0c>0y v = -0c>0x where u and v are the velocities in the x and y directions, respectively, and h is the similarity variable h = y2u q >(vvis x) The free stream velocity is u q and nvis is the kinematic viscosity of the fluid. Solution of the Blasius equation gives the velocity at any location within the boundary layer. See also Section 11.3.2. Under conditions of constant fluid properties and certain boundary layer assumptions, the thermal energy equation for the fluid can be expressed in terms of the similarity variable as7 f dT* d 2T* = 0 + Pr 2 dh dh2

(12.4)

where T* is a dimensionless temperature given by T* =

T-Ts T q -Ts

and T is the fluid temperature, Ts is the plate surface temperature, T q is the fluidfree stream temperature, and the Prandtl number is Pr = nvis /a, where a is the thermal diffusivity of the fluid. Note that T* is coupled to the velocity solution through the presence of f in the thermal energy equation. The boundary conditions are f(0) = 0 T *(0) = 0

df 2 = 0 dh h = 0

df 2 dh

h: q

T *(h : q ) : 1

We shall now use these results in the following example.

7

Ibid.

:1

(12.5)

674

Chapter 12

Example 12.5

Heat Transfer

Heat transfer from a flat plate: Blasius formulation

We shall obtain a solution to the extended Blasius formulation of heat transfer from a flat plate for Pr = 0.07, 0.7, and 7.0. The solution is obtained with bvp4c, with the boundary conditions at h : q being approximated by assuming a large value for h called hmax. The two coupled nonlinear equations given by Eqs. (12.3) and (12.4) are decomposed into a set of five coupled first-order ordinary differential equations by introducing the following set of dependent variables: y1 = f y2 = y3 =

y4 = T *

df dh

y5 =

dT * dh

d2f dh2

where y1 represents the stream function, y2 the velocity, y3 the shear, y4 the temperature, and y5 the heat flux. These quantities are used in Eqs. (12.3) and (12.4) to obtain the five first-order differential equations: dy1 = y2 dh

dy4 = y5 dh

dy2 = y3 dh

dy5 Pr = yy dh 2 1 5

dy3 1 = - y1y3 dh 2 The boundary conditions given by Eq. (12.5) can be expressed in terms of the new variables as y1(0) = 0

y4(h : q ) : 1

y2(0) = 0

y4(0) = 0

y2(h : q ) : 1 We create the following program, which includes two subfunctions that support bvp4c. The function BlasiusT defines the five first-order differential equations and the function BlasiusTbc defines the boundary conditions. To approximate h : q , we use a value of h max = 8 for Pr = 0.7 and 7.0, and a value of h max = 15 for Pr = 0.07. function Example12_5 Pr = [0.07, 0.7, 7.0]; etaMax = [15, 8, 8]; xm = [15, 5, 5]; for k=1:3 figure(k) solinit = bvpinit(linspace(0, etaMax(k), 8), [0, 0, 0, 0, 0]); sol = bvp4c(@BlasiusT, @BlasiusTbc, solinit, [], Pr(k));

Section 12.2

Convection Heat Transfer

675

eta = linspace(0, etaMax(k)); y = deval(sol, eta); subplot(2, 1, 1) plot(eta, y(1,:), '-.k', eta, y(2,:), '-k', eta, y(3,:), '--k') xlabel('\eta') ylabel('y_1, y_2, y_3') legend('Stream function, f = y_1', 'Velocity, df/d\eta = y_2', Á 'Shear, d^2f/d\eta^2= y_3') axis([0 xm(k) 0 2]) subplot(2,1,2) plot(eta, y(4,:), '-k', eta, y(5,:), '--k') axis([0 xm(k) 0 2]) legend('Temperature, T^* = y_4', 'Heat flux, dT^*/d\eta = y_5') xlabel('\eta') ylabel('y_4, y_5') end function F = BlasiusT(eta, y, Pr) F = [y(2); y(3); -0.5*y(1)*y(3); y(5); -Pr*0.5*y(1)*y(5)]; function res = BlasiusTbc(ya, yb, Pr) res = [ya(1); ya(2); ya(4); yb(2)-1; yb(4)-1]; The results from executing this program are shown in Figures 12.10–12.12.

2 Stream function (y = f) 1

Velocity (y2 = df/dη)

1

Shear (y3 = d2f/dη2)

2

y1, y , y

3

1.5

0.5 0 0

5

η

10

15

2 Temperature (y4 = T*)

1.5 4

y ,y

5

Heat flux (y5 = dT*/dη)

1 0.5 0 0

5

η

Figure 12.10 Extended Blasius solution for Pr = 0.07.

10

15

676

Chapter 12

Heat Transfer

2

y1, y2, y3

Stream function (y1 = f) 1.5

Velocity (y2 = df/dη)

1

Shear (y3 = d f/dη )

2

2

0.5 0 0

1

2

η

3

4

5

2 *

Temperature (y4 = T )

1.5

*

Heat flux (y = dT /dη)

4

y ,y

5

5

1 0.5 0 0

1

2

η

3

4

5

Figure 12.11 Extended Blasius solution for Pr = 0.7.

2

y1, y2, y3

Stream function (y1 = f) 1.5

Velocity (y = df/dη)

1

Shear (y3 = d f/dη )

2

2

2

0.5 0 0

1

2

η

3

4

5

2 *

Temperature (y4 = T )

y4, y5

1.5

*

Heat flux (y5 = dT /dη)

1 0.5 0 0

1

2

η

3

Figure 12.12 Extended Blasius solution for Pr = 7.

4

5

Section 12.2

Convection Heat Transfer

677

12.2.3 Natural Convection Similarity Solution Natural convection along a heated vertical plate in contact with a cooler fluid is shown in Figure 12.13. The bulk fluid is quiescent, but the heat transfer from the plate causes buoyancy-driven flow. This flow is described by the following two coupled nonlinear ordinary differential equations:8 d3f dh3

+ 3f

d2f

- 2a

dh2

df 2 b + T* = 0 dh

d 2*T* dT* + 3Pr f = 0 dh dh2 where f is the modified stream function c

f =

4vvis(Grx/4)0.25

The stream function c is defined such that u = 0c/0y v = -0c/0x where u and v are the velocities in the x and y directions, respectively. The quantity h is the similarity variable h =

y Grx 0.25 a b x 4

u( y) Quiescent fluid T∞, ρ∞ T( y) g

Ts > T∞ x, u y, Figure 12.13 Natural convection plume along a heated plate.

8

Ibid., pp. 487–490.

678

Chapter 12

Heat Transfer

defined in terms of the Grashof number Grx = gb(Ts - Tq)x3/v2vis where T q is the far-field temperature, Ts is the plate surface temperature, g is the acceleration of gravity, b is the coefficient of thermal expansion b = -

1 0r a b r 0T p

and nvis is the kinematic viscosity. The quantity Pr is the Prandtl number defined previously, and the quantity T* is the dimensionless temperature given by T - Tq Ts - T q

T* =

The boundary conditions for this system are df = 0, dh

h = 0: f = 0, h : q:

df : 0, dh

T* = 1

T*:0

This system can be decomposed into a system of five first-order equations by introducing the following set of dependent variables: y1 = f y2 = y3 =

y4 = T *

df dh

y5 =

dT * dh

d2f dh2

Then, the set of first-order differential equations in terms of these new variables are dy1 = y2 dh

dy4 = y5 dh

dy2 = y3 dh

dy5 = -3Pr y1y5 dh

dy3 = 2y22 - 3y1y3 - y4 dh and the corresponding boundary conditions become y1(0) = 0 y4(0) = 1 y2(0) = 0

y4(h : q ) : 0

y2(h : q ) : 0 We shall now use these results in the following example.

Section 12.2 Example 12.6

Convection Heat Transfer

679

Natural convection along a heated plate

We shall obtain a solution to the system of equations describing the natural convection along the heated plate for Pr = 0.07, 0.7, and 7.0. The value of h that is used to approximate the condition as h : q is denoted h max . The appropriate value of h max depends on the Prandtl number, with larger Prandtl numbers requiring smaller values of h max . A reasonably accurate solution is found when the solution becomes independent of the choice of h max . In this case, h max was set equal to 8 for Pr = 0.7 and 7 and equal to 11 for Pr = 0.07. To solve this boundary value problem, we use bvp4c, which requires two functions: NaturalConv, which defines the five ordinary differential equations; and NaturalConvbc, which defines the boundary conditions. The primary function and subfunctions to obtain the solution are as follows: function Example12_6 Pr = [.07 .7 7]; etaMax = [11, 8, 8]; xm = [10, 5, 5]; ym = [2, 0.8, 0.5]; guess = [0 0 0 0 0]; for k = 1:3 figure(k) solinit = bvpinit(linspace(0, etaMax(k), 5), guess); sol = bvp4c(@NatConv, @NatConvBC, solinit, [], Pr(k)); eta = linspace(0, etaMax(k), 300); y = deval(sol, eta); subplot(2, 1, 1) plot(eta, y(1,:), '-.k', eta, y(2,:), '-k', eta, y(3,:), '--k') legend('Stream function, f = y_1', 'Velocity, df/d\eta = y_2', . . . 'Shear, d^2f/d\eta^2 = y_3') axis([0 xm(k) -0.2 ym(k)]) xlabel('\eta') ylabel('y_1, y_2, y_3') subplot(2, 1, 2) plot(eta, y(4,:), '-k', eta, y(5,:), '--k') legend('Temperature, T^* = y_4', 'Heat flux, dT^*/d\eta = y_5') axis([0 xm(k) -1.2 1]) xlabel('\eta') ylabel('y_4, y_5') end function ff = NatConv(eta, y, Pr) ff = [y(2); y(3); -3*y(1)*y(3)+2*y(2)^2-y(4); y(5); -3*Pr*y(1)*y(5)]; function res = NatConvBC(ya, yb, Pr) res = [ya(1); ya(2); ya(4)-1; yb(2); yb(4)]; The results of the execution of this script are shown in Figures 12.14–12.16. Referring to these figures, which are for Prandtl numbers 0.07, 0.7, and 7.0, respectively, we see that in all three cases there is a wall plume where the velocity attains a maximum value in the vicinity of h = 1. The shear stress in the fluid in a direction parallel to the wall is ts =

12v2r x

2

Gr0.75 x

d2f dh2

which goes to zero at the location where the velocity is maximum.

680

Chapter 12

Heat Transfer

2 Stream function (y1 = f)

y1, y2, y3

1.5

Velocity (y2 = df/dη) Shear (y = d2f/dη2)

1

3

0.5 0 0

2

4

η

6

8

10

1 *

Temperature (y4 = T )

y4, y5

0.5

Heat flux (y = dT*/dη) 5

0 −0.5 −1 0

2

4

η

6

8

10

Figure 12.14 Natural convection solution for Pr = 0.07.

0.8 Stream function (y1 = f) Velocity (y2 = df/dη)

0.4

2

2

Shear (y = d f/dη )

2

y1, y , y3

0.6

3

0.2 0 −0.2 0

1

2

η

3

4

5

1 *

Temperature (y = T ) 4

y4, y 5

0.5

*

Heat flux (y5 = dT /dη) 0 −0.5 −1 0

1

2

η

3

Figure 12.15 Natural convection solution for Pr = 0.7.

4

5

Section 12.2

Convection Heat Transfer

681 Stream function (y = f)

y1, y2, y3

0.4

1

Velocity (y = df/dη) 2

2

0.2

2

Shear (y3 = d f/dη )

0 −0.2 0

1

2

η

3

4

5

1 Temperature (y4 = T*)

y4, y

5

0.5

Heat flux (y = dT*/dη) 5

0 −0.5 −1 0

1

2

η

3

4

5

Figure 12.16 Natural convection solution for Pr = 7.

The thermal effects drive the flow. As a result, for a thermally driven wall plume, the velocity boundary layer thickness is never less than the temperature boundary layer thickness. This is different from the result obtained for the corresponding case for forced flow over a flat plate in Section 12.2.2, where the thickness of the velocity boundary layer is much less than the thickness of the temperature boundary layer for the case Pr = 0.07. The maximum value of the stream function is a measure of the pumping action provided by the heating of the fluid, which is a strong function of Pr. High values of Pr yield low values of the modified stream function f. The maximum value of the modified stream function is related to the total volumetric flow rate in the plume. However, to interpret this for a particular fluid, one must compute the dimensional stream function using c(x, y) = 4vvisf a

Grx 0.25 b 4

When this is done, it is found that the volumetric flow rate for air at the same temperature difference is significantly greater than it is for water. Since the flow carries energy away from the surface, a similar analysis is of interest for the heat flux, which is determined from q–s = -

k(Ts - T q ) Grx 0.25 dT* 2 a b x 4 dh h = 0

When the heat flux is computed for both air and water, it is found that the heat flux for water is on the order of 100 times greater than that for air. This is primarily due to the roles of thermal conductivity, specific heat, and density, which determine the magnitude

682

Chapter 12

Heat Transfer

of the heat flux. At atmospheric pressure and 300K, the thermal conductivity is approximately 30 times greater for water as compared with air, the specific heat is 4 times greater, and the density is 1,000 times greater. Thus, even though the volumetric flow rate in the plume is larger for air, the heat flux is larger for water.

12.3 RADIATION HEAT TRANSFER 12.3.1 Radiation View Factor: Differential Area to Arbitrary Rectangle in Parallel Planes The computation of radiation view factors is required when analyzing the radiation in enclosures with diffuse surfaces. There are numerous techniques for evaluating these factors, many of which apply to specific geometries. A more general approach is to start from the relations that define the view factor and integrate them numerically. Consider first the general expression9 for the view factor between a differential area element dA1 and a finite area A2: dF2 - d1 =

dA1 cos u1 cos u2 dA2 A2 3 pS2

(12.6)

A2

where S is the line-of-sight distance between dA1 and some position on A2, as shown in Figure 12.17. The angles uj, j = 1, 2, are measured between the normal to the surface and S. The reciprocity relation for the view factors is A2dF2 - d1 = dA1Fd1 - 2

z

(12.7)

n

θ2

(x2a,y2a,z0)

A2 x2 = x2i+y2 j+z 0k (x2b,y2b,z0)

θ1 x1 = x1i+y1 j+0k

S

y2b

y

dA1 x

x 2b

Figure 12.17 Geometry when the differential area and the finite rectangle are in parallel planes.

9

R. Siegel and J. R. Howell, Thermal Radiation Heat Transfer, 3rd ed., Hemisphere Publishing, Washington, 1992, pp. 189–252.

Section 12.3

Radiation Heat Transfer

683

Thus, Fd1 - 2 can be written as Fd1 - 2 =

cosu1 cosu2 pS2

3

dA2

(12.8)

A2

Consider the case where dA1 and A2 are in parallel planes and A2 is a rectangle. Both of these restrictions could be removed with additional programming effort. For this case, Eq. (12.8) can be written as y2b x2b

Fd1 - 2

cosu1 cosu2 1 = dx2dy2 p3 3 S2 y2a x2a

where the line-of-sight vector S is S = x2 - x1 = (x2 - x1)i + (y2 - y1)j + (z2 - z1)k and S = ƒ S ƒ . Since the two surfaces are parallel, u1 = u2 = u and the angles can be expressed in terms of the line-of-sight vector and a normal vector to the rectangle n = k as cosu1 = cosu2 =

n#S

ƒSƒ

Then, y2b

Fd1 - 2

1 = I (y )dy p 3 x2 2 2

(12.9)

y2a

where x2b

Ix2(y2) =

3

f(x2, y2)dx2

x2a

and f(x2, y2) =

(n # S)2 cos2u = |S| 2 ƒSƒ4

We shall now use these results in the following example. Example 12.7

View factor for a differential area and a finite rectangle in parallel planes

To illustrate the numerical integration of Eq. (12.9), we consider the two sets of data given in Table 12.2. In the first case, we shall obtain the view factors shown in the last row of the table. In the second case, we shall obtain a plot of the view factor for data Set 1 as a function of the separation distance of the surfaces for 0.1 … zo … 5.

684

Chapter 12

Heat Transfer

TABLE 12.2 View Factors for Two Plate Configurations and View Factor Results

Parameter

Set 1

Set 2

Geometry of A2 X coordinate of first corner point, x2a Y coordinate of first corner point, y2a X coordinate of opposite corner point, x2b Y coordinate of opposite corner point, y2b Separation distance between planes, z0 Computed view factor Fd1 - 2

-1 -1 0 0 5 0.0121

-1 -1 1 1 1 0.5541

We create two subfunctions Fd1_2 and kernel2, which are used to determine the kernel f(x2, y2) at any location on surface A2. The function kernel2 uses a vectorbased formulation to determine the length S and cosu. It is noted that for compatibility with dblquad, kernel2 must return a vector whose length equals the length of the input vector x. This allows dblquad to minimize the number of calls to the integrand function while still providing the needed data. This capability is implemented in kernel2 by using length to determine the number of elements in x. We now use these functions to evaluate the two data sets given in Table 12.2. The program is as follows: function Example12_7 Set1 = Fd1_2(-1, 0, -1, 0, 5) Set2 = Fd1_2(-1, 1, -1, 1, 1) N = 100; dz = linspace(0.1, 5, N); Fd12 = zeros(N,1); for i = 1:N Fd12(i) = Fd1_2(0, 1, 0, 1, dz(i)); end plot(dz, Fd12, 'k-') xlabel('Separation distance of surfaces') ylabel('View factor') function F = Fd1_2(x_2a, x_2b, y_2a, y_2b, dz) F = dblquad(@kernel2, x_2a, x_2b, y_2a, y_2b, [], [], dz)/pi; function f = kernel2(x, y, dist) L = length(x); S = [x; repmat(y, 1, L); dist*ones(1, L)]; n = repmat([0, 0, 1]', 1, L); f = dot(n, S).^2./dot(S, S).^2; Upon execution, we obtain the results shown in the last row of Table 12.2 and the result shown in Figure 12.18. It is noted that Fd1 - 2 goes to a limiting value of 0.25 as the separation distance between the two parallel planes goes to zero. This is because the point dA1 is aligned with one of the corners of the square area A2. Thus, as the two parallel planes approach each other, A2 cuts off one-quarter of the total hemispherical view from dA1. In the geometry of Set 2, dA1 is aligned with the center point of A2 and the limiting value on Fd1 - 2 as the planes approach each other is 1.0.

Section 12.3

Radiation Heat Transfer

685

0.25

View factor

0.2

0.15

0.1

0.05

0

0

1

2 3 Separation distance of surfaces

4

5

Figure 12.18 View factor versus separation distance between two parallel planes for the geometry shown in Figure 12.17. The areas are in parallel planes and the differential area is aligned with a corner of the finite area.

12.3.2 View Factor Between Two Rectangles in Parallel Planes The view factor computed in Section 12.3.1 was for an infinitesimal area to a finite area. The infinitesimal area can be integrated over a second finite area to obtain the view factor between two finite areas. The equation defining such a view factor is F2 - 1 =

cosu1 cosu2 1 dA2dA1 pA2 3 3 S2 A1 A2 y1b x1b y2b x2b

(12.10)

cosu1 cosu2 1 = dx2dy2dx1dy1 pA2 3 3 3 3 S2 y1a x1a y2a x2a

where the variables are defined in Section 12.3.1 and those variables specific to this quadruple integral are defined in Figure 12.19. There are numerous methods to evaluate this integral. The approach used here is direct integration. Since the two plates are in parallel planes and their edges are parallel, Eq. (12.10) can be written as y1b

F2 - 1

1 = Ix1(y1)dy1 pA2 3 y1a

x1b

Ix1(y1) =

3 x1a

Iy2(x1, y1)dx1

686

Chapter 12 z

Heat Transfer

n

(x2a,y2a,zo)

θ

A2

n

(x2b,y2b,z o) S

θ

(x1a,y1a,0)

y (x1b,y1b,0)

A1 x

Figure 12.19 Geometry for the determination of the view factors between two finite rectangles in parallel planes. y2b

Iy2(x1, y1) =

3

Ix2(x1, y1, y2)dy2

y2a x2b

Ix2(x1, y1, y2) =

3

f(x1, y1, x2, y2)dx2

x2a

(n # S)2 cos2u f(x1, y1, x2, y2) = = |S|2 |S|4 S = (x1 - x2)i + (y1 - y2)j + (z1 - z2)k and n = k, z1 = 0, and z2 = z0. We shall now use these results in the following example. Example 12.8

View factor between two parallel rectangles

We shall obtain the view factors between two arbitrarily located rectangles in parallel planes for the two sets of data shown in Table 12.3. The method uses two nested calls to dblquad and is implemented in the function F1_2, which performs the integration over all the points on A1. The function InnerKernel evaluates f(x1, y1, x2, y2) and is called by OuterKernel to evaluate Iy2(x1, y1); that is, to integrate f over A2 for a particular point on A1. function Example12_8 Set1 = F1_2(-1, 1, -1, 1, -1, 1, -1, 1, 2) Set2 = F1_2(-2, 0, -2, 0, 2, 0, 2, 0, 2) function F12 = F1_2(x1a, x1b, y1a, y1b, x2a, x2b, y2a, y2b, dz) A2 = abs(x1a-x1b)*abs(y1a-y1b); F12 = dblquad(@OuterKernel, x1a, x1b, y1a, y1b, [], [], x2a, x2b, y2a, y2b, dz)/(A2*pi);

Section 12.3

Radiation Heat Transfer

687

TABLE 12.3 Data Used to Compute View Factors and View Factor Results

Parameter Geometry of A1 x coordinate of first corner point, x1a y coordinate of first corner point, y1a x coordinate of opposite corner point, x1b y coordinate of opposite corner point, y1b Geometry of A2 x coordinate of first corner point, x2a y coordinate of first corner point, y2a x coordinate of opposite corner point, x2b y coordinate of opposite corner point, y2b Separation distance between planes, zo Computed view factor (F2 - 1)

Set 1

Set 2

-1 -1 1 1

-2 -2 0 0

-1 -1 1 1 2 0.1998

2 2 0 0 2 0.0433

function f = OuterKernel(x1, y1, x2a, x2b, y2a, y2b, dz) f = zeros(length(x1), 1); for i = 1:length(x1) f(i) = dblquad(@InnerKernel, x2a, x2b, y2a, y2b, [], [], dz, x1(i), y1); end function f = InnerKernel(x, y, dz, x2, y2) L = length(x); S = [x-x2*ones(1, L); (y-y2)*ones(1, L); dz*ones(1, L)]; n = repmat([0, 0, 1]', 1, L); f = dot(n, S).^2./dot(S, S).^2; Upon execution, we obtain the results shown in the last row of Table 12.3. The areas of the two rectangles and the spacing between the parallel planes are the same for both data sets. However, the rectangles in Set 1 are directly opposed to each other, whereas the rectangles of those in Set 2 are offset from each other. The result of Set 1 in Table 12.3 was verified by comparison with an available analytical solution for the case of directly opposed rectangles10 and was found to agree with these results to four significant digits.

12.3.3 Enclosure Radiation with Diffuse Gray Walls A common task in radiation heat transfer is to determine the temperatures and heat transfer rates due to radiation in an enclosure with diffuse, gray surfaces enclosing a nonparticipating medium. These situations occur in ovens, rooms, and other enclosed spaces. Making the diffuse, gray surface assumption considerably reduces the complexity of the model compared with the general radiation model.The diffuse specification means that the intensity of the radiation leaving and arriving at all surfaces is

10

Ibid, pp. 1030.

688

Chapter 12

Heat Transfer

independent of direction.The gray specification means that the emissivity and absorptivity are independent of wavelength. However, even with these simplifications, enclosure problems still require considerable effort to set up and solve. Such problems are expressed in matrix notation and, thus, MATLAB provides an ideal environment for their solution. The equations that result from such analyses are11 Qk Ak

= qk =

ek A sTk4 - q0, k B 1 - ek

N

Qk

(12.11)

N

= qk = q0, k - a Fk - j q0, j = a Fk - j (q0, k - q0, j) Ak j=1 j=1

(12.12)

where ek is the emissivity of surface k, Qk is the heat transfer rate from surface k, Ak is its area, qk is its heat flux, q0, k is its radiosity, Fk - j is the view factor representing the fraction of the energy leaving surface k that is intercepted by surface j, N is the number of surfaces in the enclosure, and s = 5.67 * 10 - 8 W/(m2 K4) is the Stefan–Boltzmann constant. The formulation of these equations assumes that both the incoming and the outgoing radiation from each of the surfaces is uniform over that surface, and that the intensity is independent of direction. This assumption should be evaluated for a given problem by subdividing the surfaces of the enclosure until the results become independent of the area subdivision scheme. For a general enclosure problem, one must specify either the heat transfer rate or the temperature of each of the surfaces. Once such a specification has been made, Eqs. (12.11) and (12.12) yield a single independent relation for each surface. For a specified temperature, Eqs. (12.11) and (12.12) are equated to yield N ek q0, k - a Fk - jq0, j = (sT4k - q0, k) 1 - ek j=1

(12.13)

When the heat transfer rate is specified, Eq. (12.12) is written as N

Qk

= q0, k - a Fk - jq0, j

Ak

j=1

These equations can be written in matrix form as d1 - F1 - 1 -F2 - 1 ≥ o -FN - 1

-F1 - 2 d2 - F2 - 2 -FN - 2

Á

-F1 - N q0, 1 b1 -F1 - 2 q0, 2 b2 ¥ ≥ ¥ = ≥ ¥ o o o dN - FN - N q0, N bN

where, when the temperatures are specified, dk = 1/(1 - ek) bk =

11

Ibid., pp. 189–252.

ek sT4k 1 - ek

(12.14)

Section 12.3

Radiation Heat Transfer

689

and when the heat transfer rates are specified, dk = 1 bk =

Qk Ak

Each row of the matrix represents one surface whose form depends on whether the temperature or the heat transfer rate is specified for that surface. In either case, the radiosity associated with the surface is the unknown. Thus, the resulting system of equations consists of N equations in the N unknown radiosities. Once the radiosities are known, the unknown temperature or heat transfer rate for a given surface can be determined from either Eq. (12.11) or Eq. (12.12). Equation (12.11) is somewhat simpler to evaluate except for the special case where the emissivity equals one, in which case Eq. (12.12) is used. We now illustrate these results with the following example.

Example 12.9

Total heat transfer rate of a rectangular enclosure

Consider an oven that is assumed to be infinitely long into the plane of the page and that has a rectangular cross section.The geometry of the cross section is defined in Figure 12.20 and the corresponding view factors are defined in Table 12.4. These view factors can be computed using Hottel’s crossed-string method.12 The values shown in boldface type are those that were computed by this method and the remaining values are those that were computed from view-factor algebra based on the boldfaced values and their areas. The following script makes use of an identifier ck, k = 1, 2, Á , N, which equals 0 when the temperature is given and equals 1 when the heat transfer rate is given. It is then used to select the appropriate values for dk and bk. Furthermore, all vectors must be of length N and the matrix F is (N * N). The program is as follows:

Surface 3 T = 650K ε = 0.85

5m

Surface 2 T = 700K ε = 0.3

Surface 4 T = 600K ε = 0.45

Surface 1 T = 550K ε = 0.7 3m

Figure 12.20 Enclosure geometry and surface properties for radiation in an enclosure with gray walls. 12

Ibid.

690

Chapter 12

Heat Transfer

TABLE 12.4 View Factors Fi - j for the Enclosure Shown in Figure 12.20

iT\ j :

1

2

3

4

1 2 3 4

0 0.2169 0.2770 0.2169

0.3615 0 0.3615 0.5662

0.2770 0.2169 0 0.2169

0.3615 0.5662 0.3615 0

sigma = 5.6693e-8; A = [3, 5, 3, 5]; epsilon = [0.7, 0.3, 0.85, 0.45]; T = [550, 700, 650, 600]; F = -[0, 0.3615, 0.277, 0.3615; . . . 0.2169, 0, 0.2169, 0.5662; . . . 0.277, 0.3615, 0, 0.3615; . . . 0.2169, 0.5662, 0.2169, 0]; Q = zeros(1, length(A)); c = zeros(1, length(A)); b = sigma*epsilon./(1-epsilon).*(1-c).*T.^4+c.*Q./A; d = (1-c).*1./(1-epsilon)+c; F = F+diag(d); q0 = F\b'; Q = A.*epsilon./(1-epsilon).*(1-c).*(sigma*T.^4-q0') q = Q./A Execution of the script gives Q = [-8627.9, 8061.1, 4525.9, -3959.1] W and q = [-2876, 1612.2, 1508.6, -791.8] W/m2. It is seen that the heat transfer rates Q correctly sum to zero.

12.3.4 Transient Radiation Heating of a Plate in a Furnace13 Consider a vertically suspended flat plate in a furnace. The furnace walls contain heating elements.The furnace and the plate are initially at room temperature.The amount of heating power Q required in the heating elements to raise the plate’s temperature to Te in time th can be determined from energy balances on the plate and the furnace walls, which yield the following coupled equations dTw = P1Q - P2(Tw4 - Tp4) dt dTp dt

= -P3(Tp4 - Tw4 )

13 Topic suggested by Professor Yogendra Joshi, Department of Mechanical Engineering, Georgia Institute of Technology, Atlanta, GA.

Section 12.3

Radiation Heat Transfer

691

where the plate and furnace walls are modeled as lumped masses, Tw is the temperature of the furnace walls, and Tp is the temperature of the plate. If we assume that this system can be modeled as a two-surface enclosure with gray diffuse surfaces, then it is found that14 P1 =

1 mwcw

P2 =

1- ep 1- ew - 1 s 1 c + + d mw cw ep Ap Aw Fwp ew Aw

P3 =

1- ep 1- ew - 1 s 1 c + + d mpcp ep Ap Ap Fpw ew Aw

where mp and mw are the masses of the plate and wall, respectively; cp and cw are the specific heats of the plate and wall, respectively; ep and ew are the emissivities of the plate and wall, respectively; Ap and Aw are the areas of the plate and wall, respectively; Fpw and Fwp are the view factors; and s = 5.67 * 10 - 8 W/(m2K4) is the Stefan–Boltzmann constant. Example 12.10

Transient radiation heating of a plate in a furnace

Let us assume that for a certain configuration we have determined that P1 = 1.67 * 10 - 5 K/J, P2 = 8.8 * 10 - 14 s - 1K - 3, and P3 = 6.3 * 10 - 13 s - 1K - 3.We shall determine the value of Q required by the heating elements to raise the plate’s temperature to Te = 1,100K in th = 10 min (600 s). It is assumed that both the plate and the furnace are initially at 300K; that is, Tw(0) = Tp(0) = 300K. To obtain a solution, we create the following program with two subfunctions: RadTemp, which is used by ode45 to solve the two coupled first-order ordinary differential equations, and Qgen, which is used by fzero to determine the value of Q. In QGen, we have used interp1 to locate the time at which the temperature Te = 1,100K. function Example12_10 P1 = 1.67e-5; P2 = 8.8e-14; P3 = 6.3e-13; Qguess = 1e5; Te = 1100; th = 600; tend = 660; Two = 300; Tpo = 300; Q = fzero(@QGen, Qguess, [], Te, th, Two, Tpo, tend, P1, P2, P3); [t, T] = ode45(@RadTemp, [0, tend], [Two; Tpo], [], Q, Te, th, Two, Tpo, tend, P1, P2, P3); plot(t, T(:,1), 'k-', t, T(:,2), 'k--') z = axis; hold on plot([0, z(2)], [Te, Te], 'k.:', [th, th], [z(3), z(4)], 'k.:') xlabel('Time (s)') text(0.05*z(2), 0.85*z(4), ['Q = ' num2str(Q,6) ' W'])

14

Incropera and DeWitt, Fundamentals of Heat, Chapter 13.

692

Chapter 12

Heat Transfer

2000 Wall temperature Plate temperature

1800

Q = 151675 W 1600

Temperature (K)

1400 1200 1000 800 600 400 200

0

100

200

300

400

500

600

Time (s) Figure 12.21 Temperature as a function time in the plate and in the furnace.

ylabel('Temperature (K)') legend('Wall temperature', 'Plate temperature', 'Location', 'NorthWest') function dTdt = RadTemp(t, T, Q, Te, th, Two, Tpo, tend, P1, P2, P3) dTdt = [P1*Q-P2*(T(1)^4-T(2)^4); -P3*(T(2)^4-T(1)^4)]; function PlateTempDev = QGen(Q, Te, th, Two, Tpo, tend, P1, P2, P3) [t, T] = ode45(@RadTemp, [0, tend], [Two;Tpo], [], Q,Te, th, Two,Tpo, tend, P1, P2, P3); PlateTempDev = Te-interp1(t, T(:,2), th, 'spline'); When the function is executed, we obtain Figure 12.21.

EXERCISES Section 12.1.1 12.1 Referring to Section 12.1.1, demonstrate analytically that the expression for u(h, t) satisfies both the governing equation and the boundary condition by using the Symbolic toolbox. Note: When using the Symbolic toolbox, erfc must be replaced by 1 - erfc. 12.2 From the results of Section 12.1.1, it can be shown that the value of t when the heat flux at h = 0 is one-half its initial value is determined from the relation exp(t21/2)erfc(t1/2) = 0.5 Determine t1/2.

Exercises

693

Section 12.1.2 12.3 A standard plastic milk jug can be represented as a lumped capacitance for the purpose of estimating the time required to heat (or to cool) the milk. The governing equation for such a situation is Q dT hA 1 = = (T -T ) = (T -T ) ttc amb dt mcv mcv amb where Q = hA(Tamb -T ) is the heat transfer to the jug from the surroundings, h is the heat transfer coefficient, A is the surface area, T is the jug temperature, Tamb is the ambient temperature, ttc = mcv /(hA) is the time constant, cv is the specific heat, and m is the mass of the jug. For a simple radiation model, 4 Q = Ase(T 4 - Tamb )

where s = 5.667 * 10 - 8 W/m2 # K4 is the Stephan–Boltzmann constant and e is the emissivity. Thus, the governing equation with radiation included is dT 1 se 4 4 = c(Tamb -T ) (T -Tamb )d ttc dt h Determine the time constant for this system with and without radiation. The time constant ttc is the time required for the temperature difference between the jug’s temperature and the ambient temperature to decrease by 63.2% from its initial value, that is, Tamb - T(t) = 0.368 Tamb - T(0) The jug has a mass of m = 3.5 kg and specific heat of cv = 4.2 J/g # K.The surface area of the jug is 0.3 m2 and the initial temperature is T(0) = 5°C.The jug interacts with an environment at Tamb = 30°C. With no radiation, natural convection occurs from the jug surface, with a heat-transfer coefficient of h = 2 W/K # m2. With combined convection plus radiation, assume that e = 0.5 (Answers: For the case without radiation ttc = 6.8 h; with radiation present ttc = 2.78 h). 12.4 The steady-state temperature distribution in a triangular fin shown in Figure 12.22 is determined from (1 - h)

d2u du - M 2u = 0 dh dh2

where h = x/L, u(h) = M2 =

T(h) - T q Tb - T q 2hL2 t 2 1 + a b kt B 2L

h is the heat transfer coefficient, k is the thermal conductivity, and it is assumed that t/w 6 6 1.

694

Chapter 12

Heat Transfer

w t

x

L Figure 12.22 Triangular fin geometry.

Assume that the boundary condition at h = 0 is T(0) = Tb, that is, u(0) = 1 and that at h = 1, the boundary condition is du 2 = 0 dh h = 1 The fin efficiency hf for this fin is obtained from hf = -

1 du 2 M 2 dh h = 0

Determine the fin efficiency for ten logarithmically equally spaced values from 0.01 6 M2 6 100 and plot the results using semilogx. Compare these results with those from the analytically obtained expression15 hf =

1 I1(2M) M I0(2M)

where In(x) in the modified Bessel function of the first kind of order n and is determined by using besseli. 12.5 The heat loss by convection from the outer surface of the insulation of an insulated pipe is determined from q =

2pL(Ti - T q ) 1 1 ln(ro/ri) + k roh

where L is the pipe length, ro is the outer radius of the insulation, ri is the inner radius, k is the thermal conductivity, and h is the heat transfer coefficient. For small values of ro, additional insulation has the effect of increasing the heat transfer rate. Demonstrate this effect by plotting q as a function of ro for a range of ro that spans ro = k/h. Let h = 5 W/m2 # K, k = 0.1 W/m # K, ri = 0.01 m, L = 1 m, Ti = 100°C , and Tq = 20°C. Although usual experience is that adding insulation reduces the heat transfer rate, this is an exception.

15

Ibid., p. 125.

Exercises

695

12.6 From the results in Section 12.1.2, it can be shown that the value of t when the surface heat flux is one-half of its initial value is determined from the following expression: 15

0.5 = a Cn exp(-z2nt)J0(zn) n=1

where we have selected to sum 15 terms. The definitions of Cn and zn are given in Section 12.1.2. Determine the value of t that satisfies this equation for Bi = 0.5. 12.7 The transient temperature distribution in a solid sphere, which is initially at a uniform temperature and has convection at the boundary surface, is given by16 q

u(j, t) = a Cn exp(-z2nt) n=1

sin(znj) znj

where u(j, t) =

T(j, t) - T q T(j, 0) - T q

and t = at/a2, a is the thermal diffusivity, a is the radius of the sphere, t is the time, j = r/a, r is the radial location in the sphere, Tq is the ambient air temperature, Cn =

4[sinzn - zn coszn] 2zn - sin 2zn

and zn are the positive roots of 1 - zn cotzn = Bi where Bi = ha/k is the Biot number, h is the heat transfer coefficient, and k is the thermal conductivity of the sphere. Plot u(j, t) as a function of j and t for 0 … j … 1, 0 … t … 0.5, Bi = 0.5, and n = 1, 2, Á , 20. 12.8 For the cylinder in Section 12.1.2, compute and plot the temperature throughout the cylinder at t = 0, 0.001, and 0.005. This exercise highlights the accuracy of this type of infinite series solution. In particular, the truncation of higher order terms causes some error in the solution at t = 0 but these artifacts are largely gone by t = 0.001. 12.9 A lumped parameter analysis of the cylinder problem of Section 12.1.2 yields a temperature equation dT 1 1 + * T = * Tq dt t t

where t* =

R2 2aBi

If we convert this to the nondimensional constant as given in Section 12.1.2, then ttc =

16

Ibid., p.229.

t*a 1 = 2Bi R2

696

Chapter 12

Heat Transfer

From the first-order solution, we know that the temperature difference between the initial temperature and T q will be reduced to 36.79% of its original value after one time constant. Using the Bessel function solution in Section 12.1.2, determine the time when the centerline temperature changes to 36.79% of its initial value; that is, when u(0, t) = 0.3679. Section 12.1.3 12.10 One-dimensional conduction in a plane wall can be represented by - k(T)

dT = q dx

where T is the temperature, q is the heat flux, k(T) is the temperature-dependent thermal conductivity, and x is the spatial coordinate. If we assume that the wall is composed of mineral wool insulation, then the thermal conductivity varies as k(T) = -k0 + ksT

240K 6 T 6 365K

where k0 = 0.048, ks = 0.00032, k is in W/m # K, and T is in K. Determine the temperature at x = 0 when the heat flux is q = 12.5 W/m2, the wall thickness is 0.1 m, and the temperature of the surface at L = 0.1 m is 300K. Compare the results with the analytical solution k0(T(x) - T(L)) -

ks A T(x)2 - T(L)2 B = q(x - L) 2

It is noted that the heat flux computed from an average value of the thermal conductivity will give an excellent prediction of the true value. Section 12.2.1 12.11 A temperature sensor is used to measure the temperature of a flowing fluid. The sensor is mounted on a small-diameter cylindrical probe that protrudes through a duct wall into the flow normal to the direction of flow. The probe can be modeled as a fin whose temperature distribution is given by T(x) - T q coshm(L - x) = Tb - T q coshmL where m2 =

hP kAc

and Tb is the wall temperature, T q is the fluid temperature, P = pd is the perimeter of the probe of diameter d, Ac = pd2/4 is the cross-sectional area, k is the thermal conductivity, h is the heat transfer coefficient, and L is the length of the probe. The error e in the sensed temperature due to conduction along the probe is, therefore, e = T(L)-T q =

Tb - T q cosh mL

Exercises

697

Plot the error as a function of probe length for 0.005 … L … 0.1 m for several values of k in the range 20 … k … 400 W/m # K. Assume that probe diameter is 0.005 m, the fluid temperature is 100°C, and the wall temperature is 80°C. The heat transfer coefficient between the fluid and the probe is 25 W/m2 # K. 12.12 Apply the analysis of Example 12.4 for a velocity profile that is uniform over the cross section. Section 12.2.2 12.13 Use the solution method introduced in Section 12.2.2 to determine the thickness of the temperature and velocity boundary layers for Pr = 0.07, 0.7, and 7.0. In the notation of Section 12.2.2, the boundary layer thickness for the temperature dT is defined as that value of h for which y4 = T*(h = dT) = 0.99, and the boundary layer thickness for the velocity du is defined as that value of h for which y2 = u(h = du) = 0.99. At each value of the Prandtl number, compare the ratio du/dT to that predicted by the relation Pr1/3 (Answers are given in Table 12.5). 12.14 Consider air flowing over a flat plate at u q = 1 m/s for which Pr = 0.7 and nvis = 1.5 * 10 - 5 m2/s. Use the formulation of Section 12.2.2 to compute T(x, y) over the full laminar domain 0 6 x 6 xcrit and 0 6 y 6 10xcrit/(Recrit)1/2 where Recrit =

u q xcrit = 5 * 10 - 5 nvis

Create a contour plot of T(x, y) over this domain. In the notation of Section 12.2.2, T(x, y) = y4 and h = y1u q /(vvisx) 12.15 For the same conditions defined in Exercise 12.14, create a contour plot of the stream function c = f1nvisxu q Section 12.2.3 12.16 For the natural convection solution of Section 12.2.3, find the value of h at which the velocity u is a maximum for Pr = 0.07, 0.7, and 7.0. In the notation of Section 12.2.3, u = y2. Use fminbnd and spline on the negative of u and select the search region based on the curves in Figures 12.14–12.16 (Answers are given in Table 12.6). 12.17 For the natural convection solution of Section 12.2.3, determine the thickness of the thermal and velocity boundary layers for Pr = 0.07, 0.7, and 7.0. In the notation of

TABLE 12.5 Answers to Exercise 12.13

Pr

du

dT

du/dT

Pr1/3

0.07 0.7 7.0

4.92 4.92 4.92

13.66 5.63 2.45

0.36 0.87 2.01

0.41 0.89 1.91

698

Chapter 12

Heat Transfer

TABLE 12.6 Answers to Exercises 12.16 and 12.17

Pr

0.07

0.7

7.0

hmax

1.231

0.965

0.728

umax du dT

0.455 9.48 10.27

0.278 5.65 4.47

0.131 6.41 1.78

Section 12.2.3, the boundary layer thickness for the temperature dT is defined as that value of h for which y4 = T*(h = dT) = 0.01, and the boundary layer thickness for the velocity du is defined as that value of h for which y2 = u(h = du)/umax = 0.01, where umax are those values found in Exercise 12.16 (Answers are given in Table 12.6). 12.18 Consider the natural convection of air over a heated plate, as described in Section 12.2.3. The dimensional velocities can be expressed in terms of the nondimensional solution as u =

df 2nvis Gr1/2 x x dh

v =

df nvis Grx 1/4 a b ah - 3fb x 4 dh

For quiescent air at 300K, compute the velocity components u(x, y) and v(x, y) over the domain 0 6 x 6 1 m and 0 6 y 6 0.25 m. Plot u and v at five evenly spaced x locations from x = 0.1 to x = 0.5. Refer to Figure 12.13 for the definition of x and y. 12.19 The steam function was defined in Section 12.2.3 as c = 4nf a

Grx 1/4 b 4

For air at 300K, create a contour plot of the stream function over the domain 0 6 x 6 1 m and 0 6 y 6 0.25 m. Refer to Figure 12.13 for the definition of x and y. Section 12.3.1 12.20 Based on the analysis given in Section 12.3.1, alter the formulation for the view factors to evaluate the case where the rectangles are in two perpendicular planes. As shown in Figure 12.23, the differential area element is located at a distance from a perpendicular plane in which a finite rectangular area exists. For simplicity, consider only the case where the differential element can see the entire finite rectangle. In other words, the line of intersection of the perpendicular planes cannot pass through the finite rectangle. Using the data given in Table 12.7, determine the view factor for the surfaces shown in Figure 12.23. Note that in this case cosu1 Z cosu2. Section 12.3.3 12.21 Because of the nonlinear nature of radiation heat transfer, the placement of shields in the radiation path reduces heat transfer. Thus, for insulation applications, the use of

Exercises

699 z

n θ2

(x 2a,y 2a,z 0)

A2 x2 = x2i+y 2 j+z 0k

S x1 = x1i+y 1 j +0k

θ1 n

(x2b,y2b,z 0) y2b

y

dA1 x

x2b

Figure 12.23 Geometry when the differential area and the finite rectangle are in perpendicular planes.

radiation shields is important. The effect of radiation shields can be illustrated by considering the heat transfer between two infinite parallel plates at temperatures T1 and T2 that are separated by an evacuated space. When the surfaces radiate as black bodies, the heat transfer rate q with no shield is obtained from q = s(T41 - T42)

where s = 5.667 * 10 - 8 W/m2 # K4 is the Stephan–Boltzmann constant. When we have one shield, the heat transfer rate is determined from q = s(T41 - T4m) q = s(T4m - T42) where Tm is the temperature of the shield. The heat transfer rate with two shields is obtained from q = s(T41 - T4m1) q = s(T4m1 - T4m2) q = s(T4m2 - T42)

TABLE 12.7 Parameters and Answer for Exercise 12.20

Parameter

Value

Geometry of finite rectangle x coordinate of first corner point, x1a y coordinate of first corner point, y1a x coordinate of opposite corner point, x1b y coordinate of opposite corner point, y1b Separation distance between the differential element and the perpendicular plane Computed view factor (Fd1 - 2)

-1 -1 0 0 5 0.0012

700

Chapter 12

Heat Transfer

where Tm1 and Tm2 are the temperatures of shields 1 and 2, respectively. If the temperatures of the two plates are 100°C and 20°C, then determine the heat transfer rate with no shield, one shield, and two shields (Answers: With no shield, q = 680 W/m2; with one shield, q = 340.1 W/m2 and Tm = 340.15 K; and with two shields, q = 226.7 W/m2, Tm1 = 352.2 K, and Tm2 = 326.7 K). 12.22 The Planck distribution represents the power spectral density of black-body radiation at a particular temperature and is given by El, b(l, T) =

C1 l5[exp(C2/lT) - 1]

where l is the wavelength, T is the temperature, El, b is the spectral emissive power, C1 = 3.742 * 108 W # mm4/m2, and C2 = 1.439 * 104 mm # K. A common need in radiation calculations is to integrate this function over some range of wavelengths. When integrated over all wavelengths, we have that q

3

El, bdl = sT4

0

where s = 5.667 * 10 - 8 W/m2 # K4 is the Stephan–Boltzmann constant. Perform this integration numerically for T = 300K, 400K, and 500K and compare the result with the exact value. A note of caution: both integration limits give considerable difficulty numerically. Approximate the integral by using a nonzero lower limit, such as 0.5 mm. For the upper limit, use a value of 300 mm. 12.23 Consider Example 12.9 with surface 4 split into two equal size surfaces—that is, the system will now have five surfaces. Assume that the surface properties are the same as those used in the original example. Calculate the heat transfer rate from each of the surfaces and compare it with the more coarse calculation done originally. Using the surface numbering scheme given in Section 12.3.3, surface 4 is now split into two, and surface 4 refers to the upper half and surface 5 to the lower half. The view factors for this geometry were calculated and are given in Table 12.8. These values were obtained from Hottel’s crossed-string method. The results of the enclosure calculation are summarized in Table 12.9. It is noted that the energy balance is satisfied—that is, the Q’s sum to zero. Comparing these results with those in Example 12.9, it is seen that the heat transfer rates Q and the fluxes q are similar between the two calculations for surfaces 1, 2, and 3. However, for the surface that was split, it is seen that the flux varies considerably over the length. It is interesting to note that the overall heat transfer rate (the sum for surfaces 4 and 5) matches reasonably closely with the originally calculated heat transfer rate.

TABLE 12.8 View Factors for Exercise 12.23

iT\ j :

1

2

3

4

5

1 2 3 4 5

0 0.2169 0.2770 0.1148 0.3190

0.3615 0 0.3615 0.5662 0.5662

0.2770 0.2169 0 0.3190 0.1148

0.0957 0.2831 0.2658 0 0

0.2658 0.2831 0.0957 0 0

Bibliography

701

TABLE 12.9 Answers to Exercise 12.23

Surface #

1

2

3

4

5

Q (W)

-8560

8064

4451

-2373

-1582

T (K) q (W/m2)

550 -2853

700 1613

650 1484

600 -949

600 -633

BIBLIOGRAPHY J. P. Holman, Heat Transfer, 7th ed., McGraw Hill, New York, 1990. F. P. Incropera and D. P. DeWitt, Fundamentals of Heat and Mass Transfer, 4th ed., John Wiley & Sons, New York, 1996. S. Kakaç and H. Liu, Heat Exchangers: Selection, Rating and Thermal Design, CRC Press, Boca Raton, FL, 1998. W. M. Kays and M. E. Crawford, Convective Heat and Mass Transfer, 2nd ed., McGraw Hill, New York, 1980. F. Krieth and M. S. Bohn, Principles of Heat Transfer, 5th ed., West Publishing Company, New York, 1993. A. F. Mills, Heat Transfer, Irwin, Boston, 1992. R. Siegel and J. R. Howell, Thermal Radiation Heat Transfer, 3rd ed., Hemisphere Publishing Company, Washington, DC, 1992. N. V. Suryanarayana, Engineering Heat Transfer, West Publishing Company, New York, 1995.

13 Optimization Shapour Azarm

13.1 Definition, Formulation, and Graphical Solution 703 13.1.1 Introduction 703 13.1.2 Graphical Solution 703 13.2 Linear Programming 706 13.3 Binary Integer Programming 709 13.4 Nonlinear Programming: Unconstrained and Curve Fitting 710 13.4.1 Unconstrained Optimization 710 13.4.2 Curve Fitting: One Independent Variable 713 13.4.3 Curve Fitting: Several Independent Variables 715 13.5 Nonlinear Programming: Constrained Single Objective 719 13.5.1 Constrained Single-Variable Method 719 13.5.2 Constrained Multivariable Method 721 13.5.3 Quadratic Programming 730 13.5.4 Semi-Infinitely Constrained Method 732 13.6 Multiobjective Optimization 736 13.7 Genetic Algorithm-Based Optimization 742 13.8 Summary of Functions Introduced in Chapter 13 751 Exercises 752 The solutions to a wide range of engineering optimization applications are illustrated using the Optimization toolbox and Genetic Algorithm and Direct Search toolbox.

702

Section 13.1

Definition, Formulation, and Graphical Solution

703

13.1 DEFINITION, FORMULATION, AND GRAPHICAL SOLUTION 13.1.1 Introduction Optimization in engineering refers to the process of finding the “best” possible values for a set of variables for a system while satisfying various constraints. The term “best” indicates that there are one or more design objectives that the decision maker wishes to optimize by either minimizing or maximizing them. For example, one might want to design a product by maximizing its reliability while minimizing its weight and cost. In an optimization process, variables are selected to describe the system such as size, shape, material type, and operational characteristics. An objective refers to a quantity that the decision maker wants to be made as high (a maximum) or as low (a minimum) as possible. A constraint refers to a quantity that indicates a restriction or limitation on an aspect of the system’s capabilities. Generally speaking, an optimization problem involves minimizing one or more objective functions subject to some constraints, and is stated as minimize {f1 (x), f2 (x), Á , fM (x)}

(13.1)

xHD

where fi, i = 1, Á , M, are each a scalar objective function that maps a vector x into the objective space. The n-dimensional design (or decision) variable vector x is constrained to lie in a region D, called the feasible domain. Constraints to the above problem are included in the specification of the feasible domain. In general, the feasible domain is constrained by J-inequality and/or K-equality constraints as D = {x : gj (x) … 0, hk (x) = 0,

j = 1, Á , J,

k = 1, Á , K }

(13.2)

An optimization problem in which the objective and constraint functions are linear functions of their variables is referred to as a linear programming problem. On the other hand, if at least one of the objective or constraint functions is nonlinear, then it is referred to as a nonlinear programming problem. The classes of optimization problems, the MATLAB solution functions, and the examples appearing in this chapter and several other chapters are summarized in Table 13.1. 13.1.2 Graphical Solution Solutions to optimization problems with two variables can be visualized with MATLAB’s plotting capabilities. This is demonstrated with the following example. Example 13.1

Equilibrium position of a two-spring system

Consider a two-spring system1 shown in Figure 13.1. The system in Figure 13.1 shows a spring system before and after loads are applied at joint A.We shall determine the equilibrium state of the loaded system—that is, the location (x1, x2) of joint A. The equilibrium state of the system is obtained by obtaining the potential energy (PE) for the system and 1

G. Vanderplaats, Numerical Optimization Techniques for Engineering Design, McGraw-Hill, New York, 1984, pp. 72–73.

704

Chapter 13

Optimization

TABLE 13.1 Classification of Optimization Problems, MATLAB Functions, and Examples

Problem class

MATLAB function Example

Linear programming

linprog

Binary integer programming Nonlinear programming Single-objective unconstrained: Multivariable

bintprog

fminunc fminsearch

Curve fitting

lsqcurvefit

Least squares

lsqnonlin

Single-objective constrained: Single variable

Multivariable

Quadratic Semi-infinite Multiobjective:

fminbnd

fmincon

quadprog fseminf fminimax fgoalattain

Genetic Algorithm Single objective Multiobjective

ga gamultiobj

13.2 Production planning 13.3 Oil refinery profits 13.4 Loading of a knapsack

13.5 Equilibrium position of a two-spring system 13.6 Bottom of a bottle 9.16 Vibration absorber parameters 13.7 Stress–strain relationship 9.8 Estimation of system parameters 13.8 Stress–strain relationship 13.9 Semiempirical P-v-T relationship 13.10 Mineral exploration 13.11 Piping cost in a plant 13.12 Closed box 5.22 Response of an oscillatory system 13.13 Two-bar truss 13.14 Helical compression spring 13.15 Gear reducer 13.16 Production planning 13.17 Planar two-link manipulator 13.18 Vibrating platform 9.16 Vibration absorber parameters 13.19 Production planning 13.20 Loading of a knapsack revisited 13.21 Two bar truss revisited: single objective 13.22 Two bar truss revisited: multiple objective 13.23 Two bar truss revisited: single objective with continuous and discrete variables

then minimizing it with respect to the design variables x1 and x2 to obtain the new location of joint A. The potential energy is computed from the difference between the strain energies of the springs, which is given by the first two terms in Eq. (13.3), and the work done by external forces, which is given by the last two terms in Eq. (13.3). The quantities k1, k2, L1, L2, F1, and F2 are constants whose values are shown in Figure 13.1. Hence, the objective function of the unconstrained optimization problem is minimize PE(x1, x2) = 0.5k1 A 2x21 + (L1 - x2)2 - L1 B 2 x1, x2 + 0.5k2 A 2x21 + (L2 + x2)2 - L2 B 2 - F1x1 -F2x2 (13.3)

Section 13.1

Definition, Formulation, and Graphical Solution

F2 = 4.5 N

k 1= 8.8 N/cm L1= 11 cm

A F1 = 4.5 N

705

x2

A

x1 k2=1.1 N/cm L2= 11 cm

Figure 13.1 Two-spring system.

The two variables x1 and x2 in the objective function can have their values estimated graphically. The program that generates these graphical displays is as follows: k1 = 8.8; k2 = 1.1; L1 = 11; L2 = 11; F1 = 4.5; F2 = 4.5; [x1, x2] = meshgrid(linspace(-5, 15, 20), linspace(-5, 15, 20)); PE1 = 1/2*k1*(sqrt(x1.^2+(L1-x2).^2)-L1).^2; PE2 = 1/2*k2*(sqrt(x1.^2+(L2+x2).^2)-L2).^2; PE = PE1+PE2-F1*x1-F2*x2; subplot(1,2,1); h = contour(x1, x2, PE, [-40:20:20, 50:90:500], 'k'); clabel(h); axis([-5, 15, -5, 15]) xlabel('x_1'); ylabel('x_2'); subplot(1, 2, 2); surfc(x1, x2, PE); axis([-10, 15, -10, 15, -100, 500]); zlabel('PE'); xlabel('x_1'); ylabel('x_2') The execution of the above script produces the results shown in Figure 13.2, with Figure 13.2a showing a contour plot of PE. The contours are labeled with their numerical values so that the approximate location of the minimum/maximum point can be visually located. Figure 13.2b shows the surface plot of PE with the contours shown below the surface. It also shows the approximate location of the minimum or maximum point, that is, the point where the potential energy function reaches its minimum or maximum values. The more accurate location of the minimum or maximum point for this example is obtained in Example 13.5 of Section 13.4.1 by using an unconstrained minimization technique as implemented in fminunc.

706

Chapter 13 15

320

Maximum

140

410

230

50

500

10

400 0

300 PE

20 x2

Optimization

5 –20

200 100 0 –100

0

10

50

3 230

–5 –5

140 0

5 x1

10

10 0

4 x2

15

0 –10 –10

x1

Minimum

(a)

(b)

Figure 13.2 (a) Contour and (b) surface plots of the PE function for the two-spring system shown in Figure 13.1.

13.2 LINEAR PROGRAMMING Linear programming refers to an optimization method applicable to the solution of problems in which the objective and constraint functions are linear functions of the design variables. A linear programming problem can be stated as minimize f Tx subject to: Ax … b Aeqx = beq lb … x … ub

(13.4)

where f, b, beq, lb, and ub are vectors and A and Aeq are matrices. The quantity x is a vector of design variables and the superscript T indicates the transpose. The matrix A and the vector b are the coefficients of the linear inequality constraints, and Aeq and beq are the coefficients of the equality constraints. The MATLAB linear programming solver is linprog, which is used to solve Eq. (13.4). The basic command is [xopt, fopt] = linprog (f, A, b, Aeq, beq, lb, ub, x0, options)

Section 13.2

Linear Programming

707

which returns the vector xopt = [x1opt, x2opt, Á ] of the design variables and the scalar fopt, which is f(xopt). The quantity x0 sets the starting points (initial guess) of x, and options sets the parameters described in optimset. In the basic command, if lb, ub, and options are not specified, one uses []; similarly for the case when A, b, Aeq, and beq are not specified. We now demonstrate the use of linprog with the following example. Example 13.2

Production planning2

Consider two liquid products A and B that require production time in two departments. Product A requires 1 h in the first department and 1.25 h in the second department. Product B requires 1 h in the first department and 0.75 h in the second department. The available number of hours in each department is 200. Furthermore, there is a maximum market potential of 150 units for product B. Assume that the profits are $4 and $5 per unit of products A and B, respectively. We shall determine the number of units of products A and B that should be produced so that the producer’s profit is maximized. We denote x1 to represent the number of units of product A to be produced and x2 to represent the number of units of product B. Then the objective function and the constraints are minimize f(x1, x2) = -4x1 -5x2

(13.5)

subject to: x1 + x2 … 200 1.25 x1 + 0.75 x2 … 200 x2 … 150 (x1, x2) Ú 0 Thus, f T = [-4, -5]

(13.6)

and the inequality constraints are expressed as 1 C 1.25 0

1 200 x 0.75 S c 1 d … C 200 S x2 1 150

(13.7)

The program that solves Eqs. (13.5)–(13.7) is as follows: f = [-4, -5]; A = [1, 1; 1.25, 0.75; 0, 1]; x = linprog(f, A, [200, 200, 150], [], [],[0, 0]); disp(['No. of units A = ' num2str(x(1)) ' No. of units B = ' num2str(x(2))]) Upon execution, we obtain the following: No. of units A = 50

2

No. of units B = 150

A. Osyczka, Multicriterion Optimization in Engineering with Fortran Programs, Ellis Horwood Limited, West Sussex, UK, 1984, p. 4.

708

Chapter 13

Example 13.3

Optimization

Oil refinery profits

A refinery has three types of crude oil, C1, C2, and C3. Crude oil C1 costs $0.40/L and there are at most 10,000 L/day of it available. Crude oil C2 costs $0.20/L and there are at most 12,000 L/day of it available. Crude oil C3 costs $0.10/L and there are at most 15,000 L/day of it available. The refinery can convert each type of crude oil to gasoline and can produce three types of gasoline: regular, plus, and premium. The maximum market demand for the regular, plus, and premium gasoline is 9,000 L/day, 8,000 L/day, and 7,000 L/day, respectively. The refinery can sell its gasoline to a distributor for $0.70/L for regular, $0.80/L for plus, and $0.9/L for premium gasoline. It is found that (1) 1 L of crude oil C1 yields 0.2 L of regular, 0.3 L of plus, and 0.5 L of premium gasoline, (2) 1 L of crude oil C2 yields 0.5 L of regular, 0.3 L of plus gasoline, and 0.2 L of premium gasoline, and (3) 1 L of crude oil C3 yields 0.7 L of regular, 0.3 L of plus, and no premium gasoline. We shall determine the number of liters of each of the crude oils C1, C2, and C3 that the refinery should purchase to maximize its daily profit. Let x1, x2, and x3 represent the number of liters for crude oils C1, C2, and C3, respectively, that is to be purchased. Then, the objective function f and constraints on gasoline demands and crude oil availability are minimize f (x1, x2, x3) = -[0.7(0.2 x1 + 0.5 x2 + 0.7 x3) + 0.8(0.3 x1 + 0.3 x2 + 0.3 x3) +0.9(0.5x1 + 0.2x2) - 0.4x1 - 0.2x2 - 0.1x3] = -0.43x1 - 0.57x2 - 0.63x3 subject to: 0.2x1 + 0.5x2 + 0.7x3 … 9,000 0.3x1 + 0.3x2 + 0.3x3 … 8,000

(13.8)

0.5x1 + 0.2x2 … 7,000 x1 … 10,000 x2 … 12,000 x3 … 15,000 (x1, x2, x3) Ú 0 Notice that we have used the negative of the profit, since we are minimizing a positive function, which is the same as maximizing profit. This process of considering the negative of an objective function is used in several of the subsequent examples. The program to determine the maximum daily profit is as follows: f = [-0.43, -0.57, -0.62]; A = [0.2, 0.5, 0.7; 0.3, 0.3, 0.3; 0.5, 0.2, 0; 1, 0, 0; 0, 1, 0; 0, 0, 1]; b = [9000, 8000, 7000, 10000, 12000, 15000]; lb = [0, 0, 0]; [x, f] = linprog(f, A, b, [], [], lb, []); disp(['C1 = ' num2str(x(1)) ' liters/day']) disp(['C2 = ' num2str(x(2)) ' liters/day']) disp(['C3 = ' num2str(x(3)) ' liters/day']) disp(['Profit/day = $' num2str(-f,'%7.2f')])

Section 13.3

Binary Integer Programming

709

Upon execution, we obtain C1 = 9200 liters/day C2 = 12000 liters/day C3 = 1657.1429 liters/day Profit/day = $11823.43

13.3 BINARY INTEGER PROGRAMMING Binary integer programming refers to a linear programming method in which the variables are binary; that is, they can only take the value of 0 or 1. The formulation for a binary integer programming problem is similar to a linear programming problem given by Eq. (13.4), except that the bounds on the variables are replaced with the requirement that the variables are binary. The MATLAB binary integer programming solver is bintprog, whose basic command is [xopt, fopt] = bintprog(f, A, b, Aeq, beq, x0, options) where the arguments of bintprog have the same meaning as those in Eq. (13.4). We now demonstrate the use of linprog with the following example. Example 13.4

Loading of a knapsack3

The weight capacity of a knapsack container is limited to 35 kg. There are seven different objects that can be placed in the knapsack. Each object has a weight and a monetary value as given in Table 13.2. We shall determine the combination of objects that should be placed in the knapsack so as to maximize the total value of the placed objects subject to the weight limit. We assume that only one of each object can be placed in the knapsack. We select x1 to x7 as the binary variables that determine the objects such that xj, j = 1, 2, Á , 7, when the object is placed in the knapsack and xj = 0 when it is

TABLE 13.2 Weight and Value for Knapsack Objects

3

Object number

Weight (kg)

Value ($)

1

3

12

2 3 4 5 6 7

4 3 3 15 13 16

12 9 15 90 26 112

K. Murty, Linear and Combinatorial Programming, John Wiley & Sons, New York, 1976, p. 446.

710

Chapter 13

Optimization

not. The objective function f, which is the negative of the total value of the objects placed in the knapsack, and the capacity constraint are minimize f(x) = -(12x1 + 12x2 + 9x3 + 15x4 + 90x5 + 26x6 + 112x7)

(13.9)

subject to: 3x1 + 4x2 + 3x3 + 3x4 + 15x5 + 13x6 + 16x7 … 35 xi = 0 or 1

i = 1, Á ,7

The program to evaluate Eq. (13.9) is as follows: f = [-12, -12, -9, -15, -90, -26, -112]; A = [3, 4, 3, 3, 15, 13, 16]; b = 35; [x, V] = bintprog(f, A, b); disp([repmat('x(', 7,1) num2str((1:7)') repmat(') = ', 7,1) int2str(x)]) disp(['Total value of placed objects = $' num2str(-V, '%6.2f')]) Upon execution, we obtain x(1) = 0 x(2) = 0 x(3) = 0 x(4) = 1 x(5) = 1 x(6) = 0 x(7) = 1 Total value of placed objects = $217.00

13.4 NONLINEAR PROGRAMMING: UNCONSTRAINED AND CURVE FITTING Nonlinear programming refers to an optimization method in which the objective and/or constraint function is a nonlinear function of the design variables. Nonlinear programming problems and the corresponding methods are divided into two classes: the unconstrained methods and the constrained methods. We shall now discuss each of these methods. 13.4.1 Unconstrained Optimization Unconstrained nonlinear programming methods find the minimum of an unconstrained multivariable function formulated as minimize x

f(x)

(13.10)

where x is a vector of design variables and f is a scalar objective function. There are two functions that can be used to solve Eq. (13.10): fminunc and fminsearch, which are based on derivative and nonderivative optimization solution techniques, respectively. The command to invoke fminunc is [xopt, fopt] = fminunc(@UserFunction, x0, options, p1, p2, . . . )

Section 13.4

Nonlinear Programming: Unconstrained and Curve Fitting

711

where UserFunction4 is a function that computes the objective function f(x). The quantity x0 is the vector of starting values for x and options sets the parameters described in optimset. The quantities p1, p2, Á are parameters that are passed to UserFunction. The command to invoke fminsearch is x = fminsearch(@UserFunction, x0, options, p1, p2, . . . ) where the definitions of its arguments are the same as for fminunc. In both fminunc and fminsearch, the default solution method is a largescale optimization algorithm. When a medium-scale optimization algorithm is desired, one uses optimset with 'LargeScale' set to 'off'; that is, options = optimset('LargeScale', 'off'); We now illustrate the use of fminunc and fminsearch.

Example 13.5

Equilibrium position of a two-spring system revisited

The two-spring system of Example 13.1 is now solved numerically as an unconstrained optimization problem using both fminunc and fminsearch to determine the location of the minimum and maximum values. To obtain the maximum value of the PE function, one can either minimize the inverse 1/PE or the negative PE. The unconstrained objective function is created with the design variables x1 and x2 in the subfunction SpringEquilibrium. The program is as follows: function Example13_5 x0 = [0.5, 5]; k1 = 8.8; k2 = 1.1; L1 = 11; L2 = 11; F1 = 4.5; F2 = 4.5; options = optimset('LargeScale', 'off', 'display', 'off'); H = char('Minimum', 'Maximum'); for neg = 0:1 [xc, fc] = fminunc(@SpringEquilibrium, x0, options, k1, k2, L1, L2, F1, F2, neg); [xs, fs] = fminsearch(@SpringEquilibrium, x0, options, k1, k2, L1, L2, F1, F2, neg); disp(H(neg+1,:)) disp(['From fminunc x1 = ' num2str(xc(1)) ' x2 = ' num2str(xc(2)) . . . ' PE = ' num2str(fc*(-1)^neg)]) disp(['From fminsearch x1 = ' num2str(xs(1)) ' x2 = ' num2str(xs(2)) . . . ' PE = ' num2str(fs*(-1)^neg)]) end function PE = SpringEquilibrium(x, k1 ,k2, L1, L2, F1, F2, neg) PE1 = 1/2*k1*(sqrt(x(1)^2+(L1-x(2))^2)-L1)^2; PE2 = 1/2*k2*(sqrt(x(1)^2+(L2+x(2))^2)-L2)^2; PE = PE1+PE2-F1*x(1)-F2*x(2); if neg == 1 PE = -PE; end 4

When UserFunction is created either as an anonymous function or with inline, the ‘@’ symbol is omitted.

712

Chapter 13

Optimization

Upon execution, we obtain Minimum From fminunc x1 = 8.4251 x2 = 3.6331 PE = -35.0507 From fminsearch x1 = 8.4251 x2 = 3.6331 PE = -35.0507 Maximum From fminunc x1 = 2.4185e-006 x2 = 11 PE = 549.4498 From fminsearch x1 = 1.6304e-006 x2 = 11 PE = 549.4498

We see that these values agree with those that can be estimated from Figure 13.2.

It is pointed out that both fminunc and fminsearch, and all other techniques in the Optimization toolbox except linprog and bintprog, obtain only a local optimum solution and depend upon the choice of the initial point x0. In some cases, depending on the problem, if the location of the initial point is changed, the location of the solution might also change. We illustrate this occurrence in the following example. Example 13.6

Bottom of a bottle5

Consider the following two-variable function: f(x1, x2) = 0.125 A 0.5(D + 3) + sin(D + 2) + 1 B where D = (6x1 - 3)2 + (6x2 - 3)2 The optimization statement for this example is minimize

f(x1, x2)

(13.11)

0 … (x1, x2) … 1 We create the following function M file so that we can use it to plot the surface and to visualize the locations of the local maxima: function y = Bottle(x) [r, c] = size(x); x1 = x(1:r,1:c/2); x2 = x(1:r,(c/2+1):c); D = (6*x1-3).^2+(6*x2-3).^2; y = -0.125*((D+3)/2+sin(D+2)+1); We now use this function in the following script to create Figure 13.3: [x1, x2] = meshgrid(linspace(0, 1, 30), linspace(0, 1, 30)); mesh(x1, x2, -Bottle([x1, x2])); zlabel('f') xlabel('x_1') ylabel('x_2'); view(-10, 45) 5

Based on D. A. Van Veldhuizen and G. B. Lamont, “Multi-Objective Evolutionary Algorithm Research: A History and Analysis,” Technical Report TR-98-03, Air Force Institute of Technology, Wright Patterson AFB, OH, 1998.

Section 13.4

Nonlinear Programming: Unconstrained and Curve Fitting

713

Local Maxima 2 1.5

f

1 0.5 0 1 0.8 0.6 x2 0.4 0.2 0 0

0.2

0.6

0.4

0.8

1

x1

Figure 13.3 Surface plot of the bottom-of-a-bottle function.

As seen in Figure 13.3, the function is axially symmetric and has a dome-like region in the center whose shape resembles the bottom of a bottle. Also, there are three regions each having an infinite number of local maxima located on a circle: the central domelike local region, the middle maximum region, and the one further outside these two regions. These three regions lie on a circle. We now use fminsearch in the following script to obtain a local maximum for the above function with three sets of starting values of x0: x0 = [0.2, 0.8; 0.2, 0.9; 0.3, 0.6]; options = optimset('Large', 'off'); for n = 1:3 [x, f] = fminsearch(@Bottle, x0(n,:), options); disp(['For x0 = [' num2str(x0(n,:)) '], x = [' num2str(x) '] and f = ' num2str(-f)]) end Upon execution, we obtain the following values: For x0 = [0.2 0.8], For x0 = [0.2 0.9], For x0 = [0.3 0.6],

x = [0.20677 0.80195] and f = 0.81935 x = [0.18034 0.9995] and f = 1.2121 x = [0.4526 0.48062] and f = 0.42665

This problem, in fact, has an infinite number of local maxima and the location of the local optimum obtained from fminsearch, therefore, depends upon the initial point x0.

13.4.2 Curve Fitting: One Independent Variable Given a set of N input values xdata = [x1, x2, Á , xN] for an input parameter and a corresponding set of output values ydata = [y1, y2, Á , yN] for an output parameter. Consider a function f(x, a1, Á , aM) where x is the independent variable and the am

714

Chapter 13

Optimization

are the M coefficients that we are trying to determine by using a curve fitting procedure. We define the difference fn = f(xn, a1, . . . , aM) - yn The least squares procedure finds the coefficients am that best satisfies N 2

minimize x

a fn

(13.12)

n

This least squares nonlinear curve fitting method can be performed with lsqcurvefit. The basic command is [xopt, resnorm] = lsqcurvefit (@UserFunction, x0, xdata, ydata, lb, ub, options, p1, p2, Á ) where xopt is the vector of optimum values of a, resnorm is the Euclidean norm of the residual given by N 2

a fn n

at these values of a, and UserFunction is the name of the function that computes the objective function.The quantity x0 is the vector of starting values, xdata and ydata are, respectively, vectors of the input and output data, and options set the parameters described in optimset. The quantities lb and ub are vectors representing the lower and upper bounds on x, respectively, that is, lb … x … ub. An empty matrix [] is used for lb and ub when they are not used and for options when the default quantities are used. The quantities p1, p2, Á are parameters that are passed to UserFunction. We now demonstrate the use of lsqcurvefit. Example 13.7

Stress–strain relationship

Consider the stress–strain data for a plastic material that are given in Table 13.3, where s is the stress and e is the strain. Assume that the relationship between the stress and strain is of the form e = a + b ln s

(13.13)

TABLE 13.3 Stress–Strain Data for a Plastic Material

s (MPa)

e

6.38 7.76 11.20 14.65 18.1 21.55 25.0

0.11 0.16 0.35 0.48 0.61 0.71 0.85

Section 13.4

Nonlinear Programming: Unconstrained and Curve Fitting

715

The objective is to find the coefficients a and b that produce the best fit to the data values given in Table 13.3. The function required by lsqcurvefit is given by the anonymous function SigmaEpsilonFit. The program is sigma = [6.38, 7.76, 11.20, 14.65, 18.1, 21.55, 25.0]; epsilon = [0.11, 0.16, 0.35, 0.48, 0.61, 0.71, 0.85]; x0 = [0.1, 0.1]; SigmaEpsilonFit = @(x, sigma) (x(1)+x(2)*log(sigma)); [x, resnorm] = lsqcurvefit(SigmaEpsilonFit, x0, sigma, epsilon); disp(['a = ' num2str(x(1)) ' b = ' num2str(x(2)) ' Residual = ' num2str(resnorm)]) Upon execution, we obtain a = -0.92156

b = 0.53448

Residual = 0.0063323

Thus, the best fit function is given by e = - 0.92156 + 0.53448 ln s

(13.14)

13.4.3 Curve Fitting: Several Independent Variables Nonlinear least squares data fitting with multiple sets of input data x1, n, x2, n, Á , and a single set of corresponding output data yn, n = 1, 2, Á , N, are obtained with lsqnonlin. The lsqnonlin function finds x such that N 2

minimize

a hn

x

(13.15)

n=1

where hn = h(x1, n, x2, n, x3, n, Á , a1, Á , aM) - yn and xk, n, k = 1, 2, Á , are the independent input variables and am are the M coefficients that we are trying to determine by using the least squared procedure. The lsqnonlin function is [xopt, resnorm] = lsqnonlin(@UserFunction, x0, lb, ub, options, p1, p2, . . . ) where resnorm is the Euclidean norm of the residual given by N 2

a hn n

and UserFunction is the name of the function that computes the objective functions hn, not h2n. The quantity x0 is the vector of starting values, lb and ub are the lower and upper bounds on x, options sets the parameters described in optimset, and p1, p2, Á are parameters passed to UserFunction. Use the pair of brackets [] when lb and ub are not specified and when the default values are used for options. The function lsqnonlin can also be used for a single set of input data with the corresponding single set of output data, as shown in Example 13.8. The lsqnonlin function for three independent variables is demonstrated in Example 13.9.

716

Chapter 13

Example 13.8

Optimization

Stress–strain relationship revisited

The stress–strain relationship of Example 13.7 is now solved with lsqnonlin. The design variables a and b are determined by minimizing 7

minimize a, b

2 a [ei - (a + b In si)]

(13.16)

i=1

where ei and si correspond to the experimentally obtained values in Table 13.3. The program to solve Eq. (13.16) is as follows: sigma = [6.38, 7.76, 11.20, 14.65, 18.1, 21.55, 25.0]; epsilon = [0.11, 0.16, 0.35, 0.48, 0.61, 0.71, 0.85]; SigmaEpsilonFit = @(x, sigma, epsilon) (x(1)+x(2)*log(sigma)-epsilon); [x, resnorm] = lsqnonlin(SigmaEpsilonFit, [0.1, 0.1], [], [], [], sigma, epsilon); disp(['a = ' num2str(x(1)) ' b = ' num2str(x(2)) ' Residual = ' Á num2str(resnorm)]) Upon execution, we obtain a = -0.92156

b = 0.53448

Residual = 0.0063323

which are the same as those obtained in Example 13.7.

Example 13.9

Semiempirical P -v -T relationship

It is well known that the P -v- T relationship of real gases deviates from that estimated by the ideal gas formula Pv = RT

(13.17)

where P is the pressure in atmosphere (atm), v is the molar volume in cm3/g mol, T is the temperature in K, and R is the gas constant equal to 82.06 atm cm3/g mol K. A semiempirical relationship used to correct the departure from the ideal gas is6 P =

a RT v - b v(v + b)1T

(13.18)

where the values of a and b are the constants that will be determined from a fit to the experimental data. Listed in Table 13.4 are the P- v-T experimental measurements obtained for a gas. The design variables a and b are determined by minimizing the following least squares objective function: minimize a, b

8 2 RTi a a cPi - v - b + v (v + b)1T d i i=1 i i i

(13.19)

where Pi, vi, and Ti correspond to the values at the ith experimental run shown in Table 13.4. 6 G. V. Reklaitis, A. Ravindran, and K. M. Ragsdell, Engineering Optimization, John Wiley & Sons, New York, 1983, pp. 20–22.

Section 13.4

Nonlinear Programming: Unconstrained and Curve Fitting TABLE 13.4

717

P-v -T Data for a Gas

Run number

P (atm)

v (cm3/g mol)

T (K)

1

32.7

480

283

2 3 4 5 6 7 8

42.6 44.5 25.7 36.6 38.6 37.6 63.0

480 576 672 576 672 384 384

313 375 283 313 375 283 375

The program to determine the optimum values of a and b is as follows: x0 = [8000, 40]; R = 82.06; T = [283, 313, 375, 283, 313, 375, 283, 375]; v = [480, 480, 576, 672, 576, 672, 384, 384]; P = [32.7, 42.6, 44.5, 25.7, 36.6, 38.6, 37.6, 63.0]; pvt = @(x, R, T, v, P) (P-R*T./(v-x(2))+x(1)./(sqrt(T).*v.*(v+x(2)))); options = optimset('MaxFunEvals', 600); [x, resnorm] = lsqnonlin(pvt, x0, [], [], options, R, T, v, P); disp(['a = ' num2str(x(1)) ' b = ' num2str(x(2)) ' Residual = ' num2str(resnorm)]) Upon execution, we obtain a = 74223871.6748

b = 30.6819

Residual = 13.8143

Thus, the best fit function is P =

RT 7.422 * 107 v - 30.682 v(v + 30.682)1T

(13.20)

For this example, the solution is sensitive to the initial point x0, which affects the value of resnorm. We are always looking for a solution that gives the smallest value for resnorm.

Example 13.10

Mineral exploration

A 2 km * 2 km site is believed to overlay a thick layer of mineral deposits. To create a model of the mineral deposit profile and to establish the economic viability of mining the site, a preliminary subsurface exploration consisting of sixteen boreholes is conducted. Each borehole is drilled to a depth of approximately 45 m, with the upper and lower boundaries of mineral deposits being recorded. The borehole data7 are given in Table 13.5. We wish to create a three-dimensional computer model of the subsurface

7 M. Austin and D. Chancogne, Engineering Programming in C, MATLAB and JAVA, John Wiley & Sons, New York, 1998, p. 461.

718

Chapter 13

Optimization

TABLE 13.5 Subsurface Mineral Exploration Data

Bore hole number 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

Coordinates (x, y)

Depth z (top, bottom)

(10, 10) (750, 10) (1250, 10) (1990, 10) (10, 750) (750, 750) (1250, 750) (1990, 750) (10, 1250) (750, 1250) (1250, 1250) (1990, 1250) (10, 1990) (750, 1990) (1250, 1990) (1990, 1990)

(-30.5, -40.5) (-29, -39.8) (-28, -39.3) (-26.6, -38.5) (-34.2, -41.4) (-32.8, -40.6) (-31.8, -40.1) (-30.3, -39.4) (-36.7, -42) (-35.2, -41.2) (-34.2, -40.7) (-32.8, -40) (-40.4, -42.8) (-39, -42.1) (-38, -41.6) (-36.5, -40.9)

mineral deposits. The four vertical sides are defined by the 2 km * 2 km boundaries of the site. The top and bottom planes are defined by the surface z(x, y) = a0 + a1x + a2y

(13.21)

where a0, a1 , and a2 are to be determined. We use lsqnonlin in the following script to obtain the best fit and to create the top and bottom planes for the data given in Table 13.5. xb = [10.0, 750.0, 1250.0, 1990.0, 10.0, 750.0, 1250.0, 1990.0 . . . 10.0, 750.0, 1250.0, 1990.0, 10.0, 750.0, 1250.0, 1990.0]; yb = [10.0, 10.0, 10.0, 10.0, 750.0, 750.0, 750.0, 750.0, 1250.0 . . . 1250.0, 1250.0, 1250.0, 1990.0, 1990.0, 1990.0, 1990.0]; zbtop = [-30.5,-29.0,-28.0,-26.6,-34.2,-32.8,-31.8,-30.3, . . . -36.7,-35.2,-34.2,-32.8,-40.4,-39.0,-38.0 -36.5]; zbbot =[-40.5,-39.8,-39.3,-38.5,-41.4,-40.6,-40.1,-39.4, . . . -42.0,-41.2,-40.7,-40.0,-42.8,-42.1,-41.6,-40.9]; x0 = [1, 1, 1]; z = @(x, xb, yb) (x(1)+x(2)*xb+x(3)*yb); MinDepError =@ (x, xb, yb, zb) (zb-z(x, xb, yb)); [xtop, Errornormtop] = lsqnonlin(MinDepError, x0, [], [], [], xb, yb, zbtop); [xbot, Errornormbot] = lsqnonlin(MinDepError, x0, [], [], [], xb, yb, zbbot); [xb, yb] = meshgrid(linspaces(0, 2000, 12), linspace(0, 2000, 12)); disp(['Residual top = ' num2str(Errornormtop) ' Residual bottom = ' Á num2str(Errornormbot)]) mesh(xb, yb, z(xtop, xb, yb)); hold on mesh(xb, yb, z(xbot, xb, yb));

Section 13.5

Nonlinear Programming: Constrained Single Objective

719

−25

z

−30 −35 −40 −45 2000 1500

2000 1500

1000

1000

500 y

500 0

0

x

Figure 13.4 Top and bottom fitted planes for Example 13.10.

xlabel('x (m)') ylabel('y (m)') zlabel('z (m)'); Upon execution, we obtain the two best fit planes shown in Figure 13.4 and the following results are displayed to the command window: Residual top = 0.017805

Residual bottom = 0.01219

13.5 NONLINEAR PROGRAMMING: CONSTRAINED SINGLE OBJECTIVE Constrained nonlinear optimization methods find a local minimum of a constrained function as formulated by Eqs. (13.1) and (13.2) for the case of a single-objective function, that is, for M = 1 in Eq. (13.1). 13.5.1 Constrained Single-Variable Method The constrained single-variable method finds the minimum of a function of one variable on a fixed interval, that is, minimize f(x) x subject to: x1 … x … x2

(13.22)

720

Chapter 13

Optimization

The MATLAB function that performs this minimization is8 [xopt, fxopt] = fminbnd(@UserFunction, x1, x2, options, p1, p2, . . . ) where xopt = xopt is the optimum value of x, fxopt = f(xopt), and UserFunction is the name of the function that computes the objective function. The quantities x1 and x2 define the interval over which UserFunction is minimized with respect to x, options sets the parameters described in optimset, and p1, p2, Á are parameters passed to UserFunction. The fminbnd function is now demonstrated. Example 13.11

Piping cost in a plant9

Piping costs are important considerations in the design of a chemical plant. Consider the design of a pipeline that is L meters long and is to carry fluid at the rate of Q L /min. The objective is to determine the pipe diameter D in millimeters that minimizes the annual pumping cost. For a standard pump, the annual pumping cost can be estimated from f(D) = 1.476L + 0.0063LD1.5 + 325(hp)0.5 + 61.6(hp)0.925 + 102

(13.23)

where hp = 0.0281

LQ3 5

D

+ 6.677 * 10-4

LQ2.68 D4.68

(13.24)

We shall now obtain the pipe diameter D for a minimum cost of a pipe with a length of 300 m and a flow rate of 76 L/min by using the following program: function Example13_11 L = 300; Q = 76; [D, fD] = fminbnd(@PipeLineCost, 15, 50, [], L, Q); disp(['Pipe diameter = ' num2str(D) ' mm Annual pumping cost = $' Á num2str(fD, '%6.2f')]) function f = PipeLineCost(D, L, Q) hp = 0.0281*L*Q^3./D.^5+(6.6768e-004*L*Q^2.68)./(D.^4.68); f = 1.476*L+0.0063*L*D.^1.5+325*hp.^0.5+61.6*hp.^0.925+102; Upon execution, we obtain Pipe diameter = 28.4403 mm

Example 13.12

Annual pumping cost = $991.70

Maximum volume of a closed box

We shall determine the dimensions of a closed box with a maximum volume V. The box is constructed from one piece of cardboard 90 cm * 90 cm by cutting four squares from its four corners, as shown in Figure 13.5. The lower and upper values of x and the

8 9

See also Section 5.5.7. Adopted from Reklaitis, et al., Engineering Optimization, pp. 66–67.

Section 13.5

Nonlinear Programming: Constrained Single Objective

721

x/2 x x/2

x/2 y

x

x/2

x

y

90 cm

x/2

x/2 x/2 x

x

y

y

x/2 90 cm Figure 13.5 Construction of a closed box.

height of the box are 8 cm and 12 cm, respectively. From Figure 13.5, we see that y = 90 - 3x and, therefore, the volume of the closed box is V(x) = xy2 = x(90 - 3x)2 The optimization statement is maximize V(x) subject to: 8 … x … 12

(13.25)

The program to determine x is as follows: function Example13_12 L = 90; Volume = inline('-(L-3*x)^2*x', 'x', 'L'); [x, V] = fminbnd(Volume, 8, 12, [], L); disp(['x = ' num2str(x) ' cm V = ' num2str(-V) ' cm^3']) Upon execution, we obtain x = 10 cm

V = 36000 cm^3

13.5.2 Constrained Multivariable Method The constrained multivariable method finds the minimum of a nonlinear multivariable constrained optimization problem. Both equality and inequality constraints can be considered. Also, both the objective and/or the constraint functions can be nonlinear. A nonlinear multivariable constrained optimization problem is stated as minimize f(x) x subject to:

Ax … b

(linear inequality constraints)

Aeqx = beq

(linear equality constraints)

C(x) … 0

(nonlinear inequality constraints)

Ceq(x) = 0 lb … x … ub

(nonlinear equality constraints)

(13.26)

722

Chapter 13

Optimization

The basic command to solve Eq. (13.26) is [xopt, fxopt] = fmincon(@UserFunction, x0, A, b, Aeq, beq, lb, ub, . . . @NonLinConstr, options, p1, p2, . . . ) where xopt = xopt is the optimum value of x, fxopt = f(xopt), and UserFunction is the name of the function that computes the objective function. The quantity x0 is the vector of starting values, the matrix A and the vector b are the coefficients of the linear inequality constraints, the matrix Aeq and the vector beq are the coefficients of the equality constraints, lb and ub are the vectors of the lower and upper bounds on x, respectively, options sets the parameters described in optimset, and p1, p2, Á are the additional arguments that are passed to UserFunction and NonLinConstr. The quantity NonLinConstr is a function that defines the nonlinear constraints. The arguments p1, p2, Á of UserFunction and NonLinConstr must be identical, even if only one of the functions uses these values. If lb, ub, and options are not specified, one uses []; similarly for the case when A, b, Aeq, and beq are not specified. There are three solution methods for this function: active set, interior point, and trust region reflective (default). The desired solution method is selected by using optimset. For example, to select 'active-set', one uses options = optimset('Algorithm', 'active-set'); We now demonstrate the use of fmincon.

Example 13.13

Two-bar truss10

Consider the two-bar truss shown in Figure 13.6. The objective is to minimize the volume V of the two bars AC and BC. We denote x1 and x2 as the cross-sectional areas of the bars AC and BC, respectively, and we denote y as the vertical position of joint C. The constraints of the system are that the tensile stresses on the two bars must be less than or equal to s = 105 kPa and that the vertical position y remains between 1 m and 3 m. Finally, x1 and x2 are nonnegative. The optimization statement is minimize V = x1 216 + y2 + x2 21 + y2 subject to:

A 20 216 + y2 B > ( yx1) - s … 0 A 80 21 + y2 B >( yx2) - s … 0 1 … y … 3 (x1, x2) Ú 0

Therefore, A = b = Aeq = beq = Ceq = 0, lb = [1, 0, 0], and ub = [3, q , q ].

10

U. Kirsch, Optimal Structural Design, McGraw-Hill, New York, 1981.

(13.27)

Section 13.5

Nonlinear Programming: Constrained Single Objective

723

100 kN C

P1

P2

x2 x1 A

1my3m

20 2 P1  y 16  y kN 80 2 P2  y 1  y kN

B 4m

1m

Figure 13.6 Two-bar truss: x1 and x2 are cross-sectional areas.

The program that solves Eq. (13.27) is as follows. We have arbitrarily selected the solution algorithm as “active set.” function Example13_13 x0 = [1, 1, 1]; sigma = 1e5; lb = [1, 0, 0]; ub = [3, inf, inf]; options = optimset('Algorithm', 'active-set'); [x, f] = fmincon(@TrussNonLinF, x0, [], [], [], [], lb, ub, @TrussNonLinCon, . . . options, sigma); disp(['y = ' num2str(x(1)*100) ' cm x1 = ' num2str(x(2)*1e4) ' cm^2 x2 = ' . . . num2str(x(3)*1e4) ' cm^2 Volume = ' num2str(f*1e6) ' cm^3']) function f = TrussNonLinF(x, sigma) f = x(2)*sqrt(16+x(1)^2)+x(3)*sqrt(1+x(1)^2); function [C,Ceq] = TrussNonLinCon(x, sigma) C(1) = 20*sqrt(16+x(1)^2)-sigma*x(1)*x(2); C(2) = 80*sqrt(1+x(1)^2)-sigma*x(1)*x(3); Ceq = []; Upon execution, we obtain y = 195.039 cm

Example 13.14

x1 = 4.5634 cm^2

x2 = 8.9902 cm^2

Volume = 4001.2619 cm^3

Helical compression spring

Helical compression springs can be found in numerous mechanical devices. They are used to exert force, to provide flexibility, and to either store or absorb energy. To design a helical compression spring, such criteria as fatigue, yielding, surging, and buckling may have to be taken into consideration. To obtain a solution that meets the various mechanical requirements, an optimization study is performed. The design objective is to maximize the safety factor, which is equivalent to minimizing the inverse of the safety factor. Referring to Figure 13.7, the two design variables are c and d, where c = D/d is the spring index, D is the mean coil diameter, and d is the wire diameter. The design objective is to minimize the inverse of the safety factor for fatigue or yielding, whichever is critical. For fatigue, the inverse of the safety factor SFf is obtained from ta tm 1 = + SFf Sns Sus

(13.28)

724

Chapter 13

Optimization

F D d

... D+d F Figure 13.7 Helical compression spring.

where ta and tm are, respectively, the alternating and mean components of the shear stress, Sns is the material’s fatigue strength, and Sus is the ultimate strength. For yielding, the inverse of the safety factor SFy is obtained from 1 SFy

=

ta + tm Sys

(13.29)

where Sys is the shear yield strength. If the following condition is satisfied Sns(Sys - Sus) ta Ú tm Sus(Sns - Sys)

(13.30)

then the inverse of the safety factor for fatigue given by Eq. (13.28) will be the objective function, otherwise, the inverse of the safety factor for yielding, given by Eq. (13.29), will be the objective function. The mean and alternating components of the shear stress are, respectively, tm =

8FmKw c p d2

(13.31)

8FaKw c ta = p d2 where Kw =

4c - 1 0.615 + 4c + 4 c

Fa = (FU - FL)/2 Fm = (FU + FL)/2

(13.32)

Section 13.5

Nonlinear Programming: Constrained Single Objective

725

and FU and FL are, respectively, the maximum and minimum applied compressive forces along the spring’s axis, Fa and ta are the alternating force and shear stress, respectively, Fm and tm are the mean force and shear stress, respectively, and Kw is the Wahl correction factor for the curvature and direct shear effects on the spring. The overall design optimization formulation for the helical compression spring is as follows. The design objective is to minimize

ta tm 1 = + SFf Sns Sus

(13.33)

minimize

ta + tm 1 = SFy Sys

(13.34)

for fatigue or to

for yielding, depending on whether or not Eq. (13.30) is satisfied. The objective function is subjected to the following constraints: K1d2 - c … 0 …

Surging

K2 - c … 0

Buckling

K3c3 - d … 0

Minimum number of coils

K4d /c + K8d - 1 … 0

Pocket length

K5(cd + d) - 1 … 0

Maximum coil diameter

1/c + K6/(dc) - 1 … 0

Minimum coil diameter

K7c3 - d2 … 0

Clash allowance

5

2

3

(13.35)

where K1 = K4 =

Gfr ¢ 2.865 * 106(FU - FL) G(1 + A) 8kLm

K2 = K5 =

GfU(1 + A) 22.3k2 1 OD

0.8(FU - FL) K7 = AG

Q K8 = Lm

Sns = C1dA1NCB1

Sus = C2dA1

K3 =

8kNmin G

K6 = ID (13.36) FU - FL k = ¢ Sys = C3dA1

The values for the parameters of this system are as follows: A = 0.4 fr = 500 Hz G = 79,290 N/mm2 ID = 19.0 mm

dimensionless clearance constant minimum allowable natural frequency shear modulus for steel minimum allowable inside diameter of the spring

726

Chapter 13 OD = 38.1 mm Nmin = 3 Lm = 31.8 mm Q=2 NC = 106 cycles Δ = 6.35 mm FL = 66.7 N FU = 133.4 N

Optimization

maximum allowable outside diameter of the spring minimum allowable number of coils maximum spring length under maximum load number of inactive coils number of cycles to failure spring deflection minimum applied compressive force along the spring’s axis maximum applied compressive force along the spring’s axis

The spring material is piano wire for which A1 = 0.14, B1 = -0.2137, C1 = 683.72, C2 = 1735.1, and C3 = 938.6. The lower and upper bounds on the spring index c and wire diameter d are 4 … c … 20 and 0.1 … d … 6 respectively. Thus, we have one design objective, two design variables, seven constraints, and upper and lower bounds on the design variables. The script given below uses three subfunctions: SpringParameters, which computes the various spring constants Kj, j = 1, 2, Á , 8, given by Eq.(13.36), SpringNLConstr, which computes the nonlinear constraints given by Eq. (13.35), and SpringObjFunc, which computes the objective function given by Eqs. (13.28)–(13.34). function Example13_14 A = 0.4; FL = 66.7; FU = 133.4; G = 79290; fr = 500; ID = 19.0; OD = 38.1; Lm = 31.8; NC = 10^6; Nmin = 3; Q = 2; Delta = 6.35; A1 = -0.14; B1 = -0.2137; C1 = 6837.2; C2 = 1735.1; C3 = 938.6; [K, Fa, Fm] = SpringParameters(A, FL, FU, G, fr, ID, OD, Lm, Nmin, Q, Delta); options = optimset('Algorithm', 'active-set'); [x, f] = fmincon(@SpringObjFunc, [10, 2], [], [], [], [],[4, 0.1], [20, 6], . . . @SpringNLConstr, options, K, Fa, Fm, NC, A1, B1, C1, C2, C3); disp(['c = ' num2str(x(1)) ' d = ' num2str(x(2)) ' mm Safety factor = ' num2str(1/f)]) function [K, Fa, Fm] = SpringParameters(A, FL, FU, G, fr, ID, OD, Lm, Nmin, Q, Delta) Fa = (FU-FL)/2; Fm = (FU+FL)/2; k = (FU-FL)/Delta; K(1) = G*fr*Delta/(2865000*(FU-FL)); K(2) = G*FU*(1+A)/(22.3*k^2); K(3) = 8*k*Nmin/G; K(4) = G*(1+A)/(8*k*Lm); K(5) = 1/OD; K(6) = ID; K(7) = 0.8*(FU-FL)/(A*G); K(8) = Q/Lm;

Section 13.5

Nonlinear Programming: Constrained Single Objective

727

function [C, Ceq] = SpringNLConstr(x, K, Fa, Fm, NC, A1, B1, C1, C2, C3) c = x(1); d = x(2); C(1) = K(1)*d^2-c; C(2) = K(2)-c^5; C(3) = K(3)*c^3-d; C(4) = K(4)*d^2/c^3+K(8)*d-1; C(5) = K(5)*(c*d+d)-1; C(6) = 1/c+K(6)/c/d-1; C(7) = K(7)*c^3-d^2; Ceq = []; function f = SpringObjFunc(x, K, Fa, Fm, NC, A1, B1, C1, C2, C3) c = x(1); d = x(2); Sns = C1*d^A1*NC^B1; Sus = C2*d^A1; Sys = C3*d^A1; Kw = (4*c-1)/(4*c+4)+0.615/c; Temp = 8*c*Kw/(pi*d^2); TauA = Fa*Temp; TauM = Fm*Temp; Ratio = TauA/TauM; SS = Sns*(Sys-Sus)/(Sus*(Sns-Sys)); if (Ratio-SS)>=0 f = TauA/Sns+TauM/Sus; else f = (TauA+TauM)/Sys; end Upon execution, we obtain c = 8.4861

Example 13.15

d = 2.538 mm

Safety factor = 1.8411

Gear reducer11

Consider the design of a gear train with a gear and a pinion as shown in Figure 13.8. We shall minimize the volume of these two gears and their corresponding shafts. There are seven design variables as follows: x1 = gear face width x2 = module x3 = number of teeth of the pinion x4 = distance between bearing set 1 x5 = distance between bearing set 2 x6 = diameter of shaft 1 x7 = diameter of shaft 2

11 Based on J. Golinski, “Optimum synthesis problems solved by means of nonlinear programming and random methods,” Journal of Mechanisms, 5, 1970, pp. 287–309.

728

Chapter 13

Optimization

Shaft 1 Shaft 2

Bearings 2

x4 Gear 2 Bearings 1

x6 x7

x5 Gear 1

Figure 13.8 Gear reducer.

The application is such that the lower and upper limits on these variables are 2.6 … x1 … 3.6 0.7 … x2 … 0.8 17 … x3 … 28 7.3 … x4 … 8.3

(13.37)

7.3 … x5 … 8.3 2.9 … x6 … 3.9 5.0 … x7 … 5.5 where all the dimensions are in centimeters, except for the two nondimensional quantities x2 and x3. The design objective is to minimize the overall volume of the shafts, which is given by minimize V = 0.7854x1x22 (3.3333 x23 + 14.933 x3 - 43.0934) - 1.508 x1 (x26 + x27) (13.38) + 7.477 (x36 + x37) + 0.7854 (x4 x26 + x5 x27) and are subject to the constraints given in Table 13.6. Constraints 1–7 in the table form the nonlinear inequality constraints, and constraints 8–11 form the linear inequality constraints. From the linear inequality constraints, we see that -1 1 A = ≥ 0 0 b = [0

5 -12 0 0 0

-1.9

0 0 0 0

0 0 -1 0

0 0 0 -1

0 0 1.5 0

0 0 ¥ 0 1.1

-1.9]¿

and Aeq = beq = Ceq = 0. From Eq. (13.37), we find that Lbound = [2.6, 0.7, 17, 7.3, 7.3, 2.9, 5] and Ubound = [3.6, 0.8, 28, 8.3, 8.3, 3.9, 5.5]. The program that solves Eq. (13.38) subject to the constraints of Table 13.6 is as follows: function Example13_15 x0 = [2.6, 0.7, 17, 7.3, 7.3, 2.9, 5]; lb = [2.6, 0.7, 17, 7.3, 7.3, 2.9, 5]; ub = [3.6, 0.8, 28, 8.3, 8.3, 3.9, 5.5];

Section 13.5

Nonlinear Programming: Constrained Single Objective

729

TABLE 13.6 Constraints for the Gear Reducer of Exercise 13.15

Constraint number

Constraint

Constraint description

1

1 1 … 0 27 (x1x22x3)

Bending stress of gear tooth

2

1 1 … 0 397.5 (x1x22x23)

Contact stress of gear tooth

3

x34 (x2x3x46)

4

x35 (x2x3x47)

-

1 … 0 1.93

Shaft 1 deflection

-

1 … 0 1.93

Shaft 2 deflection

5

745x4 2 1 a b + 16.9 * 106 - 1100 … 0 3 B x2x3 0.1x6

Shaft 1 stress

6

745x5 2 1 a b + 157.5 * 106 - 850 … 0 3 B x2x3 0.1x7

Shaft 2 stress

7

x2x3 - 40 … 0

Space restriction

5x2 - x1 … 0 x1 - 12x2 … 0 1.9 - x4 + 1.5x6 … 0 1.9 - x5 + 1.1x7 … 0

Space restriction Space restriction Shaft requirement Shaft requirement

8 9 10 11

A = zeros(4, 7); A(1,1) = -1; A(1,2 )= 5; A(2,1) = 1; A(2,2) = -12; A(3,4) = -1; A(3,6) = 1.5; A(4,5) = -1; A(4,7) = 1.1; b = [0, 0, -1.9, -1.9]; options = optimset('Algorithm', 'active-set'); [x, V] = fmincon(@GearObjFunc, x0,A, b , [], [], lb, ub, @GearNonLinConstr, options); for n = 1:length(x) if n == 2 | n == 3 a = []; else a = ' cm'; end disp(['x(' int2str(n) ') = ' num2str(x(n)) a]) end disp(['Volume = ' num2str(V) ' cm^3']) function f = GearObjFunc(x) f = 0.7854*x(1)*x(2)^2*(3.3333*x(3)^2+14.9334*x(3)-43.0934) . . . -1.508*x(1)*(x(6)^2+x(7)^2)+7.477*(x(6)^3+x(7)^3) . . . +0.7854*(x(4)*x(6)^2+x(5)*x(7)^2);

730

Chapter 13

Optimization

function [C, Ceq] = GearNonLinConstr(x) C(1) = 1/(x(1)*x(2)^2*x(3))-1/27; C(2) = 1/(x(1)*x(2)^2*x(3)^2)-1/397.5; C(3) = x(4)^3/(x(2)*x(3)*x(6)^4)-1/1.93; C(4) = x(5)^3/(x(2)*x(3)*x(7)^4)-1/1.93; C(5) = sqrt((745*x(4)/(x(2)*x(3)))^2+16.9*10^6)/(0.1*x(6)^3)-1100; C(6) = sqrt((745*x(5)/(x(2)*x(3)))^2+157.5*10^6)/(0.1*x(7)^3)-850; C(7) = x(2)*x(3)-40; Ceq = []; Upon execution, we obtain x(1) = 3.5 cm x(2) = 0.7 x(3) = 17 x(4) = 7.3 cm x(5) = 7.7153 cm x(6) = 3.3502 cm x(7) = 5.2867 cm Volume = 2994.3413 cm^3

13.5.3 Quadratic Programming Quadratic programming refers to a special class of constrained optimization problems in which the objective function is quadratic and the constraints are linear, that is, minimize f = 0.5xT Hx + cTx x subject to: Ax … b Aeqx = beq

(13.39)

lb … x … ub where H, A, and Aeq are matrices and b, beq, c, x, lb, and ub are column vectors. The MATLAB function used to obtain a solution to this class of problems is [xopt, fopt] = quadprog(H, c, A, b, Aeq, beq, lb, ub, x0, options) where xopt = xopt is the vector of optimum values of x, fopt = f(xopt) is the symmetric matrix H and the vector c are the set of coefficients of the quadratic objective function f, the matrix A and the vector b are the coefficients of the linear inequality constraints, the matrix Aeq and the vector beq are the coefficients of the linear equality constraints, the vectors lb and ub specify the lower and upper bounds on the design variables x, the vector x0 sets the starting point, and options sets the parameters described in optimset.

Section 13.5

Nonlinear Programming: Constrained Single Objective

731

It is noted that the objective function given by Eq. (13.39) is a quadratic polynomial that can be written as12 f = 0.5{[h11x21 + h22x22 + Á + hnnx2n] + [(h12 + h21)x1x2 + Á + (h1n + hn1)x1xn] + [(h23 + h32)x2x3 + Á + (h2n + hn2)x2xn]

(13.40)

+ Á + [(h(n - 1)n + hn(n - 1))x(n - 1)xn]} + (c1x1 + Á + cnxn) where hij is the ith row and jth column of H and ci is the ith element of c. The matrix H can be written in a symmetric form, that is, in a form where hij = hji, i Z j . We now demonstrate the use of quadprog. Example 13.16

Production planning revisited

The production planning scenario discussed in Example 13.2 is revised. It is now assumed that the profits of products A and B are functions of the number of units of each product. For product A, the dollar profit per unit varies according to 4 + 2x1 + 3x2 and for product B the dollar profit varies according to 5 + 5x1 + 4x2 where x1 and x2 are the number of units produced for A and B, respectively. The remaining aspects of the problem are the same as those given in Example 13.2. Accordingly, the objective function to be minimized is f(x1, x2) = -(4 + 2x1 + 3x2)x1 - (5 + 5x1 + 4x2)x2 = 0.5([-4x21 - 8x22] + [-16x1x2]) + ( -4x1 - 5x2) We see from Eq. (13.40) that h11 = -4, h22 = -8, h12 + h21 = 2h12 = 2h21 = -16, c1 = -4, and c2 = -5. Thus, the objective function can be written in the vector format of the objective function in Eq. (13.39) as f =

1 [x 2 1

x2]c

-4 -8

-8 x1 d c d + [-4 -8 x2

-5]c

x1 d x2

The program is as follows: H = [-4, -8; -8, -8]; c = [-4;-5]; A = [1, 1; 1.25, 0.75; 0, 1]; b = [200; 200; 150]; options = optimset('LargeScale', 'off'); [x, P] = quadprog(H, c, A, b, [], [], [0, 0], [], [], options); disp(['x1 = ' num2str(x(1)) ' x2 = ' num2str(x(2)) ' Profit = $' num2str(-P)]) Upon execution, we obtain x1 = 50

12

x2 = 150

Profit = $155950

J. S. Arora, Introduction to Optimum Design, 2nd ed., Elsevier Academic Press, San Diego, 2004, p. 97.

732

Chapter 13

Optimization

13.5.4 Semi-Infinitely Constrained Method The semi-infinitely constrained method finds the solution of optimization problems expressed as minimize f(x) x subject to:

Ax … b Aeqx = beq C(x) … 0 Ceq(x) = 0

K1(x, w1) … 0

(13.41)

K2(x, w2) … 0 o Kn(x, wn) … 0 5(w1, . . . , wn) where x is the design variable vector, f is the scalar objective function, A is a matrix representing the linear inequality constraints, b is a vector representing the right-hand side of the linear inequality constraints, Aeq is a matrix representing the linear equality constraints, beq is a vector of linear equality constraints, C is a vector representing the nonlinear inequality constraints, and Ceq is a vector of nonlinear equality constraints. The quantity Kn(x, wn) is a vector or a matrix of semi-infinite functions, a function of vectors x and wn, with the free variable wn representing a range of values over which the solution for the design variable x is sought. In addition, we use 5(w1, Á , wn), with 5 representing “for all,” to indicate that the problem is considered for all values of the free variables w1, Á , wn within their corresponding ranges. For example, wn may represent a temperature range in a heat transfer problem or a frequency range in a vibration problem over which the Kn-constraint has to be satisfied for all temperature or frequency values in the range. The variables w1, Á , wn are vectors of, at most, length two. The MATLAB function to solve Eq. (13.41) is [xopt, fxopt] = fseminf(@UserFunction, x0, n, @SemiConstr, A, b, . . . Aeq, Beq, lb, ub, options, p1, p2, . . . ) where xopt = xopt is the optimum value of x, fopt = f(xopt), and UserFunction is the name of the function that computes the scalar function f. The quantity x0 sets the starting point, n is the number of semi-infinite constraints in Eq. (13.41), the matrix A and the vector b are the coefficients of the linear inequality constraints, the matrix Aeq and the vector beq are the coefficients of the linear equality constraints, lb and ub specify the lower and upper bounds, respectively, on the design variables x, options sets the parameters described in optimset, and p1, p2, Á are the additional parameters that are passed to UserFunction and SemiConstr. The arguments

Section 13.5

Nonlinear Programming: Constrained Single Objective

733

p1, p2, Á of UserFunction and SemiConstr must be identical, even if only one of the functions uses these values. If lb, ub, and options are not specified, one uses []; similarly for the case when A, b, Aeq, and beq are not specified. SemiConstr is a function that defines the nonlinear constraints and has the following form: function [C, Ceq, K1, K2, . . . , Kn, s] = SemiConstr(x, s, p1, p2, . . . ) % Initial sampling interval If isnan(s(1,1)), s = . . . % s has n rows and 2 columns end w1 = . . . % computes sample set ... wn = . . . % computes sample set K1 = . . . % 1st semi-infinite constraint at x and w ... Kn = . . . % nth semi-infinite constraint at x and w C = . . . % computes nonlinear inequalities Ceq = . . . % computes nonlinear equalities where K1, K2, Á , Kn, are the semi-infinite constraints evaluated for a range of sampled values of the free variables w1, Á , wn, respectively. The rows of the twocolumn matrix s have the sampling interval for the corresponding values of v1, Á , vn, which are used to calculate K1, K2, Á , Kn; that is, the ith row of s contains the sampling interval for evaluating Ki. When Ki is a vector, use only s(i, 1) (the second column can be zero). When Ki is a matrix, s(i, 2) is used for sampling of the rows in Ki and s(i, 1) is used for sampling of the columns in Ki. In the first iteration, s is set to NaN so that some initial sampling interval is determined. If C and/or Ceq do not exist, then set them to []. We now demonstrate the use of fseminf. Example 13.17

Planar two-link manipulator

Consider a planar two-link manipulator shown in Figure 13.9. This manipulator is capable of positioning to a point in its plane. The design objective is to maximize the workspace area covered by the manipulator. There are two design variables a and b, which represent the lengths of the two links. The constraints are as follows: (1) a lower bound and an upper bound on the ratio a/b, (2) an upper bound on a quantity k, which is a measure of dexterity, and (3) a lower and an upper bound on the design variables a and b. The dexterity refers to the ease with which the manipulator can either move or exert force or torque along arbitrary directions within its workspace. The condition number k of the Jacobian matrix for the manipulator is used as a metric for dexterity.13 It is desired that this condition number be as close to unity as possible. The condition number k is given by k = (a2 + 2b2 + 2ab cos u)>2ab cos u 13

(13.42)

C. Gosselin and J. Angeles, “A global performance index for the kinetic optimization of robotic manipulators,” ASME Journal of Mechanical Design, 113, 1991, p. 222.

734

Chapter 13

Optimization

b θ

a

Figure 13.9 Planar two-link manipulator.

The problem statement is minimize f (a, b) = -p[(a + b)2 - (a - b)2] subject to:

a/b Ú 1.1 a/b … 2 k … 1.26

(13.43)

0.1 … a … 2 0.1 … b … 2 5 u H [100°, 150°] and the semi-infinite constraints are to be satisfied for the range of 100° … u … 150° with a sampling interval of 2°. The program that solves Eq. (13.43) is as follows: function Example13_17 [x, A] = fseminf(@TwoLinkObjFunc, [1, 1], 1, @TwoLinkConstr, . . . [], [], [], [],[.1, 0.1], [2, 2]); [xx, kap] = fminbnd(@Kappa, 100*pi/180, 150*pi/180, [], x); disp(['a = ' num2str(x(1)) ' b = ' num2str(x(2)) ' Workspace area = ' num2str(-A)]) disp(['kappa = ' num2str(kap+1.26) ' at theta = ' num2str(xx*180/pi) ' degrees']) text(120, 1.17, 'Initial') text(110, 1.05, 'Optimum') ylabel('Condition number \kappa') xlabel('\theta (\circ)') text(120, 1.25, ['\kappa_{min} occurs at \theta = ' num2str(xx*180/pi,5) '\circ']) axis([100 150 1 1.30]) function [C, Ceq, K1, s] = TwoLinkConstr(x, s) if isnan(s(1,1)) s = [2, 0]; end ab = x(1)/x(2); C(1) = -ab+1.1;

Section 13.5

Nonlinear Programming: Constrained Single Objective

735

C(2) = ab-2; Ceq = []; theta = (100:s(1,1):150); K1 = Kappa(theta*pi/180, x); plot(theta, K1+1.26, 'k') hold on function f = TwoLinkObjFunc(x) f = -pi*((x(1)+x(2))^2-(x(1)-x(2))^2); function k = Kappa(theta, x) k = (x(1)^2+2* x(2)^2+2*(x(1)*x(2))*cos(theta))./(2*(x(1)*x(2))*sin(theta))-1.26; Upon execution, we obtain Figure 13.10 and the following values are displayed to the command window: a = 2 b = 1.4433 Workspace area = 36.274 kappa = 1.0004 at theta = 134.9882 degrees

In Figure 13.10, we have plotted the condition number k as a function of u for each iteration to show the improvement in the condition number from its initial range to its optimum range. In this optimum range of the condition number, we see from the figure and from the output to the command window that the condition number is unity when u = 135°. Hence, this angle is the most desirable configuration for the manipulator in terms of its dexterity.

θ (degrees) Figure 13.10 The condition number of the planar two-link manipulator as a function of u as the fseminf constraint K1 progresses from the initial values of a and b to their optimum.

736

Chapter 13

Optimization

13.6 MULTIOBJECTIVE OPTIMIZATION Multiobjective optimization refers to the solution of problems in which there is more than one design objective. The objectives in such problems are at least partly in conflict with each other. The conflict arises because of the inherent properties of the problem. For example, consider a structural member in tension in which the objective is to minimize weight and stress. These two objectives conflict with each other; that is, as the weight of the member is reduced, the stress is increased and vice versa. During the optimization process for such a problem, one reaches a point where it may not be possible to simultaneously improve all such objectives. Hence, the term “optimize” in a multiobjective problem generally refers to a solution point for which there is no way to improve further any objective without worsening at least one other objective. Such a solution point is referred to as a Pareto point or noninferior point. Many such Pareto solutions may exist in a multiobjective optimization problem, and these solutions collectively form a Pareto frontier. Consider the representation of the twovariable two-objective problem shown in Figure 13.11. We see that the feasible domain in the objective space is obtained as a result of a mapping from the variable space. The Pareto frontier corresponds to the line where both f1 and f2 are minimized and is the “best” that can be achieved. Trade-offs exist between the solutions in the Pareto set; that is, as one objective is improved in the set, the other is worsened. The final preferred solution to a multiobjective problem is selected from the Pareto set according to the decision maker’s preference. MATLAB has two functions to solve multiobjective problems: fminimax and fgoalattain. The minimax method solves the problem min max {f1, f2, Á , fm} x

(13.44)

f

subject to:

Ax … b

(linear inequality constrainsts)

Aeqx = beq (linear equality constraints) C(x) … 0 Ceq(x) = 0

(nonlinear inequality constraints) (nonlinear equality constraints)

lb … x … ub where x is the design variable vector; f1, f2, Á , fm, are the objective functions; the matrix A and the vector b are the coefficients of the linear inequality constraints; the matrix Aeq and the vector beq are the coefficients of the linear equality constraints; C contains the nonlinear inequality constraints; Ceq contains the nonlinearequality constraints; and lb and ub specify the lower and upper bounds, respectively, on the design variables x. The fminimax method iteratively minimizes the worst-case value of the objective functions subject to the constraints. The MATLAB function that solves Eq. (13.44) is [xopt, fxopt] = fminimax(@UserFunction, x0, A, b, Aeq, beq, lb, ub, Á @NonLinConstr, options, p1, p2, . . . )

Section 13.6

Multiobjective Optimization

737

Feasible domain

Feasible domain

x2

f2

• (f1, f2)

• (x1, x2)

Pareto frontier x1

f1 (b)

(a)

Figure 13.11 Feasible domains in (a) the variable space and (b) the objective space with its Pareto frontier.

where xopt = xopt is the optimum value of x and fxopt = fi(xopt); UserFunction is the name of the function that computes the objective function, the quantity x0 is the vector of starting values; the matrix A and the vector b are the coefficients of the linear inequality constraints; the matrix Aeq and the vector beq are the coefficients of the equality constraints; lb and ub are the vectors of the lower and upper bounds on x, respectively; options sets the parameters described in optimset; and p1, p2, Á are the parameters that are passed to UserFunction and NonLinConstr. NonLinConstr is a user-created function that defines the nonlinear inequality and equality constraints as follows: function [C, Ceq] = NonLinConstr(x, p1, p2, . . . ) The arguments p1, p2, Á of UserFunction and NonLinConstr must be identical, even if only one of the functions uses these values or one of the functions uses only some of the quantities. If lb, ub, and options are not specified, then one uses []; similarly for the case when A, b, Aeq, and beq are not specified. The function fgoalattain solves the following multiobjective problem: maximize g x, y

subject to:

fi(x) - vig … (goal)i i = 1, Á , m Ax … b

(linear inequality constraints)

Aeqx = beq

(linear equality constraints)

C(x) … 0

(nonlinear inequality constraints)

Ceq(x) = 0

(nonlinear equality constraints)

(13.45)

lb … x … ub where g is a scalar variable unrestricted in sign, fi is the ith objective function, and vi and (goal)i are, respectively, the weighting coefficient and the target values for the ith objective function. The weighting coefficient controls the relative degree of

738

Chapter 13

Optimization

underattainment or overattainment of the goal. The term vig provides an element of slackness in the formulation. For instance, setting all of the weighting coefficients equal to the initial goals indicates that the same percentage of the underattainment or overattainment of the goals is desired. The MATLAB function that solves Eq. (13.45) is x = fgoalattain(@UserFunction, x0, Goal, Weight, A, b, Aeq, beq, lb, ub, . . . @NonLinConstr, options, p1, p2, . . . ) where the vector Weight contains the elements vi, the vector Goal contains the elements (goal)i, and the remaining quantities are as defined for fminimax. We now demonstrate the use of fminimax and fgoalattain. Example 13.18

Vibrating platform

Consider the system shown in Figure 13.12. A motor is mounted on a beam-type platform composed of three layers of materials. It is assumed that the beam is simply supported at both ends. A vibratory disturbance is imparted from the motor to the beam. The design objectives are to minimize the following: 1. The negative of the fundamental natural frequency of the beam, f1. 2. The cost of the material comprising the beam, f2 Referring to Figure 13.12, the constraints are an upper bound on the mass of the beam, upper bounds on the thickness of layer 2 and the thickness of the outer layer 3, and upper and lower bounds on the design variables. The five design variables are the beam’s length L, its thickness b, and the distances d1, d2, and d3. The mass density r, the Young’s modulus E, and the cost per unit volume c for the material of each of the three layers are given in Table 13.7 The problem statement is minimize minimize

f1(d1, d2, d3, b, L) = -(p/2L2)2EI>m

f2(d1, d2, d3, b) = 2b A c1d1 + c2(d2 - d1) + c3(d3 - d2) B

subject to: mL - 2800 … 0

beam mass

d1 - d2 … 0

layer thickness

-d1 + d2 … 0.15

layer thickness

d2 - d3 … 0

layer thickness

Vibrating mass

L

d1

d2

d3

b  thickness Figure 13.12 Vibrating multilayered simply supported platform.

Section 13.6

Multiobjective Optimization

739

TABLE 13.7 Material Properties and Cost for the Vibrating Platform

Layer i

ri (kg/m3)

Ei (N/m2)

ci ($/volume)

1 2 3

100 2,770 7,780

1.6 * 109 70 * 109 200 * 109

500 1,500 800

-d2 + d3 … 0.01

layer thickness

0.05 … d1 … 0.5 0.2 … d2 … 0.5 0.2 … d3 … 0.5 0.35 … b … 0.5 3 … L … 6 where EI = (2b/ 3) A E1d31 + E2(d32 - d31) + E3(d33 - d32) B m = 2b A r1d1 + r2(d2 - d1) + r3(d3 - d2) B

We see that the beam mass is a nonlinear inequality constraint and layer thickness constraints are linear inequality constraints. Thus, -1 1 1 -1

1 -1 A = ≥ 0 0 b = [0

0.15

0 0 -1 1 0

0 0 0 0

0 0 ¥ 0 0

0.01]¿

and since there are no linear and nonlinear equality constraints, Ceq = Aeq = beq = 0. In order to have the same order of magnitude of the computed functions, the design objectives are scaled according to Sv =

R - G B - G

(13.46)

where the quantity R refers to the actual value of the function before scaling, G refers to the target (or desired) value of the function, and B refers to the undesirable value of the function. We see from Eq. (13.46) that when R is equal to G, Sv = 0 and when R is equal to B, Sv = 1. The following program obtains a solution to this problem and uses three subfunctions: BeamProperties in which [x1, x2, x3, x4, x5] = [d1, d2, d3, b, L]; VibPlatNLConstr, which computes the nonlinear inequality constraint; and VibPlatformObj, which computes the objective functions.

740

Chapter 13

Optimization

function Example13_18 x0 = [0.3, 0.35, 0.4, 5,0.4]; lb = [0.05, 0.2, 0.2, 0.35, 3]; ub = [0.5, 0.5, 0.6, 0.5, 6]; E = [1.6, 70, 200]*10^9; Rho = [100, 2770, 7780]; c = [500, 1500, 800]; G = [500, 100]; A = [1 -1 0 0 0; -1 1 0 0 0; 0 1 -1 0 0; 0 -1 1 0 0]; b = [0 0.15 0 0.01]'; for k = 1:5 B = [100+k*10, 500-k*50]; [xopt, fxopt] = fminimax(@VibPlatformObj, x0, A, b, [], [], lb, ub, . . . @VibPlatNLConstr, [], E, Rho, c, G, B); ff = fxopt.*(B-G)+G; f1(k) = ff(1); f2(k) = ff(2); end [f2sort, indxf2] = sort(f2); f1sort = f1(indxf2); plot(-f1sort, f2sort, ' ko-'); xlabel('Negative frequency (Hz)'); ylabel('Cost ($)'); function [EI, mu] = BeamProperties(x, E, Rho) EI = (2*x(4)/3)*(E(1)*x(1)^3+E(2)*(x(2)^3-x(1)^3)+E(3)*(x(3)^3-x(2)^3)); mu = 2*x(4)*(Rho(1)*x(1)+Rho(2)*(x(2)-x(1))+Rho(3)*(x(3)-x(2))); 200

195

Cost ($)

190

185

180

175

170 165 –400

–390

–380 –370 –360 Negative frequency (Hz)

Figure 13.13 Pareto frontier of the vibrating platform.

–350

–340

Section 13.6

Multiobjective Optimization

741

function [C, Ceq] = VibPlatNLConstr(x, E, Rho, c, G, B) [EI, mu] = BeamProperties(x, E, Rho); C(1) = mu*x(5)-2800; Ceq = []; function f = VibPlatformObj(x, E, Rho, c, G, B) [EI, mu] = BeamProperties(x, E, Rho); f1 = pi/(2*x(5)^2)*sqrt(EI/mu); f(1) = (f1-G(1))/(B(1)-G(1)); f2 = 2*x(4)*(c(1)*x(1)+c(2)*(x(2)-x(1))+c(3)*(x(3)-x(2))); f(2) = (f2-G(2))/(B(2)-G(2)); Upon execution, we obtain the Pareto frontier shown in Figure 13.13.

Example 13.19

Production planning revisited

We now reconsider the production planning problem given in Example 13.2 and introduce a second design objective, which is to maximize (or minimize the negative of) the production units of product A. The objective function and the constraints now become f1(x1, x2) = -4x1 - 5x2 f2(x1) = -x1 subject to: x1 + x2 … 200 1.25x1 + 0.75x2 … 200 x2 … 150 (x1, x2) Ú 0

minimize

Thus, for the linearity inequality constraint

A =

1 1.25 J 0

b = [200

1 0.75 K 1 200

150]¿

and lb = [0, 0] and ub = [ q , q ]. Since there are no equality constraints and no nonlinear constraints, Ceq = Aeq = beq = C = 0. The program is as follows: A = [1, 1; 1.25, 0.75; 0, 1]; b = [200, 200, 150]'; goal = [-950, -50]; x0 = [50, 50]; lb = [0, 0]; ub = [inf, inf]; Weight = abs(goal); options = optimset('GoalsExactAchieve', 2); ProdPlanObj = inline('[-4*x(1)-5*x(2), -x(1)]', 'x'); [x, fxopt] = fgoalattain(ProdPlanObj, x0, goal, Weight, A, b, [], [], lb, ub, [], options); disp(['x1 = ' num2str(x(1)) ' x2 = ' num2str(x(2)) ' f1 = ' num2str(fxopt(1)) . . . ' f2 = ' num2str(fxopt(2))])

742

Chapter 13

Optimization

where we have set the option GoalsExactAchieve to 2, which tells the algorithm to try to satisfy the goals exactly, that is, not over- or underachieve them. If the default value of GoalsExactAchieve is used, then the solution becomes a function of x0. The execution of the program gives the following Pareto solution: x1 = 50

x2 = 150

f1 = -950

f2 = -50

13.7 GENETIC ALGORITHM-BASED OPTIMIZATION Single-objective and multiobjective genetic algorithm (GA) optimization methods have capabilities that go beyond the classical methods discussed previously in this chapter. The GA methods are applicable to optimization problems in which the objective functions and/or constraint functions are highly nonlinear, nondifferential, or discontinuous. In addition, the variables can be continuous, discrete, or a combination of the two. The genetic algorithm method only requires the values of the objective functions and/or constraint functions and not their derivatives to reach the optimum. In addition, this method can converge to the global optimum, however, the convergence is not guaranteed as it is, for example, in gradient-based methods where there is a convergence proof. Genetic algorithms are based on the principles of biological evolution or survival of the fittest. Unlike the previous methods in this chapter, which start with a single point and generate a single point at each iteration, the genetic algorithm starts with a random population of points and generates a random population of points (called individuals) at each iteration (generation) of the algorithm. Genetic algorithms use three operators to improve a population and to converge to a final population of solutions. These operators are selection, crossover, and mutation. The selection operator identifies parents in the population. The crossover operator applies to two parents that are randomly selected and matched in order to produce children. The mutation operator is applied to individuals to produce diversity in the population. These operations are performed during each generation and the algorithm stops when the population can no longer be improved or a maximum number of iterations has been reached. The genetic algorithm method is a stochastic optimization approach and, thus, each run of the approach may produce a slightly different solution. MATLAB has two functions that are based on the genetic algorithm: ga and gamultiobj. The ga function solves the single-objective optimization problems of the form minimize f(x) x subject to:

Ax … b

(linear inequality constraints)

Aeqx = beq

(linear equality constraints)

C(x) … 0

(nonlinear inequality constraints)

Ceq(x) = 0 lb … x … ub

(nonlinear equality constraints)

(13.47)

Section 13.7

Genetic Algorithm-Based Optimization

743

The basic command to solve Eq. (13.47) is [x, f] = ga(@UserFunction, nvars, A, b, Aeq, beq, lb, ub, @NonLinConstr, options) where UserFunction is the name of the function that computes the objective function. The quantity nvars is the number of variables, the matrix A and the vector b are the coefficients of the linear inequality constraints, the matrix Aeq and the vector beq are the coefficients of the equality constraints, lb and ub are the vectors of the lower and upper bounds on x, respectively, and options sets the parameters described in gaoptimset. The quantity NonLinConstr is a function that defines the nonlinear inequality and equality constraints. If lb, ub, and options are not specified, one uses []; similarly for the case when A, b, Aeq, and beq are not specified. Function gamultiobj solves the multiobjective optimization problems of the form minimize {f1, f2, Á , fm} x subject to: Ax … b Aeqx = beq

(linear inequality constraints) (linear equality constraints)

(13.48)

lb … x … ub where x is the design variable vector, f1, f2, Á , fm are the objective functions, the matrix A and the vector b are the coefficients of the linear inequality constraints, the matrix Aeq and the vector beq are the coefficients of the linear equality constraints, and lb and ub specify the lower and upper bounds, respectively, on the variables x. The method used by gamultiobj is based on the genetic algorithm and iteratively evolves a population of individuals toward a Pareto solution set. The MATLAB function that solves Eq. (13.48) is [x, f] = gamultiobj(@UserFunction, nvars, A, b, Aeq, beq, lb, ub, options) where x is the obtained Pareto solutions and f is the corresponding objective function values, UserFunction is the name of the function that computes the objective function, the quantity nvars is the number of variables, the matrix A and the vector b are the coefficients of the linear inequality constraints, the matrix Aeq and the vector beq are the coefficients of the equality constraints, lb and ub are the vectors of the lower and upper bounds on x, respectively, and options sets the parameters described in gaoptimset. In both ga and gamultiobj, the variables can be continuous or binary (0 or 1). However, in the current version of the MATLAB,14 the linear and nonlinear constraints are not satisfied when the option 'PopulationType' is set to 'bitstring' (binary). To resolve this, constraints can be added to the objective function in the form of an infeasibility constraint. That is, when the constraints are violated, a large penalty for 14

Genetic Algorithm and Direct Search Toolbox™ 2, User’s Guide, 2009.

744

Chapter 13

Optimization

their violation is added to the objective function, otherwise, the penalty is set equal to zero. This penalty approach forces an infeasible point to eventually move into the feasible domain. The scalar penalty parameter P is a large number that is applied to the constraint infeasibility as minimize f + P[max(0, (Ax - b)) + max(0, C(x)) + (Aeqx - beq)2 + C2eq] x We now demonstrate the use of ga and gamultiobj. Example 13.20 considers a single objective with binary variables, Example 13.21 considers a single objective with continuous variables, and Example 13.22 considers two objectives with continuous variables. The last example, Example 13.23, has two objectives with both continuous and discrete variables. Example 13.20

Loading of a knapsack revisited: single objective with binary variables

Example 13.4 is now solved with ga. The seven binary variables are determined by minimizing the following: minimize f(x) = -(12x1 + 12x2 + 9x3 + 15x4 + 90x5 + 26x6 + 112x7) + P max[0, (3x1 + 4x2 + 3x3 + 3x4 + 15x5 + 13x6 + 16x7 - 35)] xi = 0 or 1 i = 1, Á , 7 The parameter P is set to a large number, in this case, we have selected it to be 100. The program is as follows: function Example13_20 nvars = 7; options = gaoptimset; options = gaoptimset(options, 'PopulationType', 'bitstring'); options = gaoptimset(options, 'PopulationSize', 100); options = gaoptimset(options, 'PlotFcns', {@gaplotbestf, @gaplotbestindiv}); [x, f] = ga(@KnapsackObj, nvars, [], [], [], [], [], [], [], options); disp([repmat('x(', 7,1) num2str((1:7)') repmat(') = ', 7,1) int2str(x')]) disp(['Total value of placed objects = $' num2str(-f, '%6.2f')]) function f = KnapsackObj(x) P = 100; c = 3*x(1)+4*x(2)+3*x(3)+3*x(4)+15*x(5)+13*x(6)+16*x(7)-35; f = -(12*x(1)+12*x(2)+9*x(3)+15*x(4)+90*x(5)+26*x(6)+112*x(7))+P*max(0,c); The execution of the program produces Figure 13.14. The upper pane shows the iteration history of the best and mean values of the fitness function in the population for each generation, and the lower pane shows the best values of the variables in the final population when the algorithm stopped. As shown in the upper figure, the mean value of the objective function (or fitness) for individuals in the population approaches the best value in the population, which is an indication of uniformity of the objective function values for individuals in the final population. The lower figure shows the best

Section 13.7

Genetic Algorithm-Based Optimization

745

Best: −217 Mean: −215.73

Fitness value

200 Best fitness Mean fitness

100 0 −100 −200

Current best individual

−300 0

20

40

60 Generation Current Best Individual

80

100

1 0.8 0.6 0.4 0.2 0

1

2

3 4 5 Number of variables (7)

6

7

Figure 13.14 Iteration history for the best and mean fitness values in the population per generation (upper figure) and the best values for the variables in the final population (lower figure) for Example 13.20.

value of the binary variables in the final population when the algorithm stopped. In addition, the following information is displayed to the command window: x(1) = 0 x(2) = 0 x(3) = 0 x(4) = 1 x(5) = 1 x(6) = 0 x(7) = 1 Total value of placed objects = $217.00

We see that these results agree with those obtained in Example 13.4.

Example 13.21

Two-bar truss revisited: single objective with continuous variables

Example 13.13 is now solved with ga but with the finite upper bounds indicated in the program below. In addition, to improve the numerical accuracy of the solution, the variables x1 and x2 are scaled by 100 and 10,000, respectively. The program is as follows: function Example13_21 global sigma

746

Chapter 13

Optimization

nvars = 3; lb = [100, 0, 0]; ub = [300, 20, 20]; sigma = 1e5; options = gaoptimset; options = gaoptimset(options, 'PopulationSize', 60); options = gaoptimset(options, 'Generations', 200); options = gaoptimset(options, 'Display', 'final'); options = gaoptimset(options, 'PlotFcns', {@gaplotbestindiv, Á @gaplotscorediversity}); [x, V] = ga(@TwoBarTrussObj, nvars, [], [], [], [], lb, ub, Á @TwoBarTrussNonLinCon, options); disp(['y = ' num2str(x(1)) ' cm x1 = ' num2str(x(2)) ' cm^2 x2= ' . . . num2str(x(3)) ' cm^2 Volume = ' num2str(V*1e6) ' cm^3']) function f = TwoBarTrussObj(x) x(1) = x(1)/1e2; x(2:3) = x(2:3)/1e4; % Values scaled f = x(2)*sqrt(16+x(1)^2)+x(3)*sqrt(1+x(1)^2); function [C, Ceq] = TwoBarTrussNonLinCon(x) global sigma x(1) = x(1)/1e2; x(2:3) = x(2:3)/1e4; % Values scaled C(1) = 20*sqrt(16+x(1)^2)-sigma*x(1)*x(2); C(2) = 80*sqrt(1+x(1)^2)-sigma*x(1)*x(3); Ceq = [];

150 100

Number of individuals

Current best individual

Current Best Individual 200

50 0

1

2 Number of variables (3) Score Histogram

3

4.019

4.0195 4.02 4.0205 Score (range)

4.021

25 20 15 10 5 0 4.018

4.0185

4.0215

4.022 −3

x 10

Figure 13.15 Current best individuals (upper figure) and the histogram of the score in the final population (lower figure) for Example 13.21.

Section 13.7

Genetic Algorithm-Based Optimization

747

The execution of the program produces Figure 13.15, where the upper pane shows the value of the best individual (solution point) in the final population and the lower pane shows the histogram of the objective function values in the final population. This lower pane gives a measure of diversity of points in the final population. In addition, the following information is displayed to the command window: y = 196.0471 cm

x1 = 4.5597 cm^2

x2= 9.0389 cm^2

Volume = 4020.4176 cm^3

We see that these results are in fairly good agreement with those obtained in Example 13.13. As mentioned previously, due to the stochastic nature of the genetic algorithm, each run of ga produces somewhat different results. In general, it is a good practice to run ga several times and select the solution for which the objective function, Volume in this case, has the smallest value.

Example 13.22

Two-bar truss revisited: multiobjectives with continuous variables

Example 13.13 is now converted into a multiobjective form and solved with gamultiobj. The Pareto optimum solutions are determined by solving minimize {f1, f2} where

f1 = x1 216 + y2 + x2 21 + y2 f2 = 20216 + y2/(syx1) - 1

subject to: 8021 + y2/(syx2) - 1 … 0 1 … y … 3 0.05 … (x1, x2) … 0.25 The program is as follows: function Example13_22 global P sigma P = 100; sigma = 1e5; nvars = 3; lb = [0.05, 0.05, 1]; ub = [0.25, 0.25, 3]; options = gaoptimset; options = gaoptimset(options, 'Vectorized', 'on'); [x, V] = gamultiobj(@TwoBarTrussTwoObj, nvars, [], [], [], [], lb, ub, options); [f , C] = TwoBarTrussTwoObj(x); disp(C) plot(V(:,1), V(:,2), 'k*') xlabel('f_1') ylabel('f_2') grid on function [f, C] = TwoBarTrussTwoObj(x) global P sigma f1(:,1) = x(:,1).*sqrt(16+x(:,3).^2)+x(:,2).*sqrt(1+x(:,3).^2); f1(:,2) = 20*sqrt(16+x(:,3).^2)./(sigma*x(:,1).*x(:,3))-1; C (:,1) = 80*sqrt(1+x(:,3).^2)./(sigma*x(:,2).*x(:,3))-1;

748

Chapter 13

Optimization

−0.982 −0.984 −0.986 −0.988

f2

−0.99 −0.992 −0.994 −0.996 −0.998 −1 0.2

0.4

0.6

0.8

1

1.2

1.4

1.6

f

1

Figure 13.16 Pareto frontier for Example 13.22.

f(:,1) = f1(:,1)+P*max(0,C(:,1)); f(:,2) = f1(:,2)+P*max(0,C(:,1)); The execution of the program produces Figure 13.16 where the values of the Pareto optimum solutions for objective f2 versus objective f1 are shown. It is good practice for this type of formulation in which a penalty parameter is introduced to verify that the constraints have been satisfied. In the present case, the quantity C as given in TwoBarTrussTwoObj is less than zero. For the results shown, it was found that C 6 0 for each pair of objective functions appearing in Figure 13.16.

Example 13.23 Two-bar truss revisited: single objective with continuous and discrete variables Example 13.22 is now assumed to have mixed continuous–discrete variables given by minimize

f = x1 216 + y2 + x2 21 + y2

subject to: 20 216 + y2/(syx1) - 1 … 0 80 21 + y2/(syx2) - 1 … 0 0 … (x1, x2) … 0.25

y H {1, 1.3, 1.6, 1.9, 2.2, 2.5, 2.8} The variables x1 and x2 are assumed to be continuous in their range and are required to have an accuracy of seven significant decimal digits. Variable y is assumed to be discrete

Section 13.7

Genetic Algorithm-Based Optimization

749

and can have any of the following seven values stated above. In general, any continuous or integer variable x that is defined in a closed interval lb … x … ub can be expressed through binary variables denoted by s as15 x = lb + D(s)

(13.49)

where N-1

D(s) = a 2isi i=0

si = 0 or 1

and N is the minimum number of binary variables needed. To determine N, we note that 2N 7 (ub - lb)10d and, therefore, one obtains N = 1 + floorc

d + log 10(ub - lb) d log10 2

where d is the number of significant decimal places required for x and the floor function truncates its real argument to an integer value in the direction of - q (recall Table 1.8). Note that this approach will increase the number of variables significantly and may not be practical when the range is too large. For this example, we have d = 7, lb = 0, and ub = 0.25 and we obtain from the above equation N = 22. This means that for each real variable x1 and x2, we need twenty-two binary variables to represent them. For the discrete variable y, we have seven choices; that means 2N 7 7, and thus N = 3. Therefore, we require a total of forty-seven (= 22 + 22 + 3) binary variables in a binary string format (bitstring) with the first twenty-two bits for x1, the next twenty-two bits for x2, and the last three bits for y. The actual value of the variable can then be obtained from16 x = lb +

ub - lb 2N - 1

D(s)

(13.50)

where the binary string s of length N is given by (sN - 1sN - 2 Á s2s1s0). For example, when s is represented by (00010110), then D(s) = 0 * 20 + 1 * 21 + 1 * 22 + 0 * 23 + 1 * 24 + 0 * 25 + 0 * 26 + 0 * 27 = 22 In the program below, GetRealFromBinary maps the value of the forty-four binary variables representing x1 and x2 from Eq. (13.49) to the corresponding real (or actual) values for x1 and x2 using Eq. (13.50). The function GetDiscreteFromBinary maps the value of the three binary variables representing y to one of its seven discrete (or actual) alternatives. The objective and constraint functions are then calculated with the actual values of these three variables. The program is as follows: function Example13_23 nvars = 47; PopulationSize = 100; options = gaoptimset;

Generations = 100;

15 C. A. Floudas, Nonlinear and Mixed-Integer Optimization, Oxford University Press, New York, 1995, p. 111. 16 K. Deb, Multi-Objective Evolutionary Optimization Using Evolutionary Algorithms, John Wiley & Sons, New York, 2001, p. 82.

750

Chapter 13

Optimization

options = gaoptimset(options, 'PopulationType' , 'bitstring'); options = gaoptimset(options, 'PopulationSize' , PopulationSize); options = gaoptimset(options, 'Generations' , Generations); options = gaoptimset(options, 'PlotFcns', {@gaplotbestindiv, Á @gaplotscorediversity}); [x, fval] = ga(@TwoBarTrussTwoObjGa, nvars, [], [], [], [], [], [], [], options); finalx1 = GetRealFromBinary(x, 1, 22, 0, 0.25); finalx2 = GetRealFromBinary(x, 23, 44, 0, 0.25); finaly = GetDiscreteFromBinary(x, 45, 47); disp(['x1 = ' num2str(finalx1*1e4) ' cm^2 x2 = ' num2str(finalx2*1e4) . . . ¿ cm^2 y = ' num2str(finaly*100) ' cm']) disp(['V = ' num2str(fval*1e6)]) function f = TwoBarTrussTwoObjGa(x) P = 100; sigma = 1e5; var(1) = GetRealFromBinary(x, 1, 22, 0, 0.25); var(2) = GetRealFromBinary(x, 23,44, 0, 0.25); var(3) = GetDiscreteFromBinary(x, 45,47); f1 = var(1)*sqrt(16+var(3)^2)+var(2)*sqrt(1+var(3)^2); C1 = 80*sqrt(1+var(3)^2)/(sigma*var(2)*var(3))-1; C2 = 20*sqrt(16+var(3)^2)/(sigma*var(1)*var(3))-1; f = f1+P*(max(0,C1)+max(0,C2)); function x = GetRealFromBinary(y, startbit, endbit, lowerlimit, Á upperlimit) temp = y(startbit:endbit); ii = length(temp); newint =0; for i = 1:ii newint = newint + temp(i)*2^(i-1); end maxbitvalue = 2^(length(temp))-1; x = lowerlimit+(upperlimit-lowerlimit)/maxbitvalue*newint; function x = GetDiscreteFromBinary(y, startbit, endbit) choice = [1, 1.3, 1.6, 1.9, 2.2, 2.5, 2.8]; temp = y(startbit:endbit); ii = length(temp); newint = 0; for i = 1:ii newint = newint+temp(i)*2^(i-1); end if newint == 0 x = choice(1); else x = choice(newint); end The execution of the program produces Figure 13.17 and displays the following actual values of the variables xi and the corresponding objective function value to the command window:

Section 13.8

Summary of Functions Introduced in Chapter 13

751

Number of individuals

Current best individual

Current Best Individual 1 0.8 0.6 0.4 0.2 0 0

5

10

15 20 25 30 Number of variables (47) Score Histogram

35

40

45

100 80 60 40 20 0 0

200

400 600 Score (range)

800

1000

Figure 13.17 Current best individuals (upper figure) and the histogram of the score in the final population (lower figure) for Example 13.23.

x1 = 5.3978 cm^2 V = 4168.0174

x2 = 9.7656 cm^2

y = 160 cm

The upper pane shows the iteration history of the best and mean values of the objective function for all individuals in the population for each generation (or iteration). As shown in the upper pane, the mean value of the fitness (or objective function plus penalty) of the individuals in the population approaches the best value in the population, which is an indication of uniformity of the individuals in terms of their fitness value (or objective function value since the penalty is zero) in the final population. The lower pane shows the best value of the variables in the final population when the algorithm stopped. This solution is expected to be somewhat worse than that obtained from Example 13.13 because y is restricted to being discrete.

13.8 SUMMARY OF FUNCTIONS INTRODUCED IN CHAPTER 13 A summary of the Optimization toolbox functions and the Genetic Algorithm and Direct Search toolbox functions introduced in Chapter 13 are presented in Table 13.8.

752

Chapter 13

Optimization

TABLE 13.8 MATLAB Functions from Optimization Toolbox Introduced in Chapter 13

MATLAB function

Description Optimization Toolbox Binary integer programming solver Multiobjective goal attainment solver Minimum of a function of one variable on a fixed interval Minimum of a constrained nonlinear multivariable function Minimax solver Minimum of an unconstrained multivariable function Minimum of an unconstrained multivariable function Minimum of a semi-infinitely constrained multivariable nonlinear function Linear programming solver Nonlinear least squares curve fitting solver Nonlinear least squares solver Quadratic programming solver

bintprog fgoalattain fminbnd fmincon fminimax fminsearch fminunc fseminf linprog lsqcurvefit lsqnonlin quadprog

Genetic Algorithm and Direct Search Toolbox Implements the genetic algorithm to find minimum of a single-objective function Implements the genetic algorithm to find minima of multiple objective functions

ga gamultiobj

EXERCISES Sections 13.1.2 and 13.4.1 13.1 Consider a two-pair bar mechanism, shown in Figure 13.18 in which links OA and AC have the same length L1 = 0.5 m and links CB and BD have the same length L2 = 0.3 m. Joint O is a fixed joint, and joints C and D are pin connections on two slides that can move without friction along a horizontal line. The mechanism is subjected P1 A P2

L1

B

L1 L2

L2

C α

α

D β

O Figure 13.18 Two-pair bar mechanism of Exercise 13.1.

β

P

Exercises

753

to three external forces. They are the vertical forces P1 = 3 kN and P2 = 1 kN at joints A and B, respectively, and a horizontal force P = 3 kN at joint D. We assume that before the loads are applied, the bars are lined up (stretched out) along the horizontal line. We also assume that the weight of the mechanism is negligible. The equilibrium of the mechanism under the applied loads is obtained by minimizing the potential energy function minmize PE = - P1L1 sin a - P2L2 sin b + 2P3L111 - cos a2 + L211 - cos b24 a. Create Figure 13.19. b. Use fminunc with an initial point (a, b) = (1, 1) radians to verify the graphical solution (Answer: a = 0.4636 rad, b = 0.1651 rad, and PE = -0.3789). 13.2 Consider the cross section of a water canal17 shown in Figure 13.20.The water canal has a fixed cross-sectional area and is to be designed so that its discharge flow rate is maximized. The design variables are the height h, the width of base c, and the side angle u. It can be shown that the flow rate is proportional to the inverse of the wetted perimeter p, which is given by p = c + 2h/ sin u

1.5 2.5 1.5 0.5

2 1.5

β

PE

1

1 0.5

0.5

–0.1

–0.2 0

–0.3

–0.5 0 0.5 0

0

0.5

α

1

1.5

β

1 1.5

1.5

1

0.5

0

α

Figure 13.19 Contour and surface plots of Exercise 13.1.

17 P. Y. Papalambros and D. J.Wilde, Principles of Optimal Design: Modeling and Computation, Cambridge University Press, New York, 1988, p. 151.

754

Chapter 13

Optimization

h θ

θ c

Figure 13.20 Water canal of Exercise 13.2.

and the cross-sectional area A, which is given by A = ch + h2 cot u Then, the function to be minimized is minmize

1 A 2h - 1 = a - h cot u + b p h sin u

If A = 9.3 m2, then a. Create Figure 13.21. b. Use fminsearch to validate the graphical solution with an initial point (h, u) = (1, 1) rad (Answer: h = 2.3172 and u = 60°). 13.3 Figure 13.22 shows an unloaded and loaded two-spring system. After the load F is applied at point A , the system is deformed until it is in equilibrium at point B , that

0.0 0.03

110

0.02

100 0.03

0.035 0.034

90

1/p

θ (degrees)

0.03 80 70

0.025

60 0.032 0.02 100

50 0.036 40

0.03 0 0

0.03 30 4

6

8

10

12

80 θ (degrees)

12

h Figure 13.21 Contour and surface plots of Exercise 13.2.

10 60

8 40

6 4

h

Exercises

755 L1 = 10 cm

L2 = 10 cm

k1 = 8 N/cm

k2 = 8 N/cm A

x2

B

x1

F=5N

Figure 13.22 Two-spring system of Exercise 13.3.

is, when the potential energy of the system is minimum. The potential energy function is given by Eq. (13.3) with F2 = 0. Find the location (x1, x2) of joint B in two ways: a. Create the contour and surface plots shown in Figure 13.23. b. Use fminsearch with an initial point (x1, x2) = (1, 1) (Answers: PE = -15.2802, x1 = 4.1289, and x2 = 0).

10 500 1000

450

300

400

800

200 5

350

150

x2

250 100

400 200

25 55 15

0

PE

600

0 –5 40 45 350

150 –5 –5

200 0

5 x1 (a)

10

15

10

0 5

5 x1

10 15

0 –5

x2

(b)

Figure 13.23 (a) Contour and (b) surface plots of the PE function for the two-spring system shown in Figure 13.22.

756

Chapter 13

Optimization

13.4 The average total production time per workpiece for a machining operation is given by18 T = tm +

tm tc + taux Tl

where tm is the cutting time, Tl is the tool life, tc is the time it takes to change the tool, and taux is the auxiliary time. For a turning operation, the cutting time is obtained by tm =

pDL 1000Vf

where the D is the diameter of the machined surface, L is the length of the workpiece to be machined, V is the cutting surface speed, and f is the feed rate of the cutting tool. The influence of the cutting speed, the feed rate, and the depth of cut d on the tool life are estimated from the extended Taylor equation, which can be used to obtain Tl as Tl = a

b Vfadb Kt

1/n

where n = 0.17, a = 0.77, b = 0.37, and Kt = 200 are empirical constants. If V and f are the design variables, then the optimization problem is minimize T(V, f) subject to: f … 2 Assume that tc = 7, taux = 3, d = 0.3, D = 100 mm, and L = 500 mm. For these parameter values, a. Create contour and surface plots for the system. b. Use fmincon with an initial point of (V, f) = (10, 1) to obtain the optimum solutions (Answers: T = 3.942, V = 100.46, and f = 2.000). 13.5 Figure 13.24 shows two frictionless rigid carts A and B connected by three linear elastic springs having spring constants k1 = 5 N/m, k2 = 10 N/m, and k3 = 8 N/m.19 The x1

x2

k1 P k2

k3

B

A

Figure 13.24 Spring-mass system of Exercise 13.5.

18 19

D. A. Stephenson and J. S. Agapiou, Metal Cutting Theory and Practice, Marcel Dekker, New York, 1997. S. S. Rao, Engineering Optimization, Theory and Practice, 3rd ed., John Wiley & Sons, New York, 1996.

Exercises

757

15 –462 14 13

200 –440 –418

100

–506

0

12

–100

11 10

PE

x2

–528

–300

–484

9

–200

–400 8 –500 7

–600 0

6

15 5

5

5 x1 (a)

10

x1

10 10

5

x2

(b)

Figure 13.25 (a) Contour and (b) surface plots of the PE function for the two-spring system shown in Figure 13.24.

springs are in their undeformed positions when the applied force is zero. Use the following unconstrained optimization problem for the potential energy function: minimize PE = 0.5k2x21 + 0.5k3(x2 - x1)2 + 0.5k1x22 - Px2 a. Obtain the contour and surface plots as shown in Figure 13.25. b. Obtain the optimized displacements x1 and x2 by using fminunc with an initial point (x1, x2) = (1, 1) and with P = 100 N (Answers: PE = 529.41, x1 = 4.7059, and x2 = 10.5882). 13.6 Three carts, interconnected by springs and initially at an unstressed equilibrium state, are subjected to the loads P1, P2, and P3 as shown in Figure 13.26.20 The displacements of the carts from their original equilibrium position (xi = 0, for all i) are sought by minimizing the potential energy of the system PE = 0.5XTKX - XTP where

K =

20

Ibid., p. 420.

k1 + k3 + k4 -k3 J -k4

-k3 k2 + k3 + k5 -k5

-k4 -k5 K k4 + k5 + k6

758

Chapter 13 x1

x3

x2 P1

k4

P3 P2

k2 k1

k6

k5 1

Optimization

2

k3

3

Figure 13.26 Spring-mass system of Exercise 13.6.

P = [P1

P2 P3]T

X = [x1

x2 x3]T

The parameter values for the system are as follows: k1 = 4500 N/m

k4 = 2250 N/m

P1 = 1100 N

k2 = 1650 N/m

k5 = 550 N/m

P2 = 1800 N

k3 = 1100 N/m

k6 = 9300 N/m

P3 = 3300 N

Using these values, find the equilibrium position of the carts by using fminunc with the initial point: (x1, x2, x3) = (0, 0, 0) (Answers: x1 = 0.348, x2 = 0.723, and x3 = 0.370). 13.7 Figure 13.27 shows a spring-weight system in its undeformed position with no supporting weights, and in its deformed position with supporting weights at the joints between the springs.21 The stiffness of the spring i is ki and is defined by ki = 450 + 225(M/3 - i)2 N/m

i = 1, Á , 6

where M = 5 is the number of weights. Weight Wj is defined by Wj = 60j N

j = 1, Á ,5

Y k1 1

k2 2

W1

k3

k4

k5

3

4

5

W2

W3

W4

Vanderplaats, Numerical Optimization, p. 94.

X

6

7

W5

Springs deformed by weights

Figure 13.27 Spring-weight system of Exercise 13.7.

21

Undeformed springs

k6

Exercises

759

The length of each spring before the weights are applied is Li = 7.5 m. The coordinates of the spring joints (points 2–6) are represented by ten design variables: (Xi, Yi), i = 2, Á , 6. To solve for the equilibrium, the following PE function is minimized: 6

5

i=1

j=1

PE = 0.5 a Ki ¢L2i + a WjYj + 1 where ¢Li = 2(Xi + 1 - Xi )2 + (Yi + 1 - Yi)2 - Li Determine the equilibrium positions by using fminunc, that is, the joint positions for the deformed system shown in Figure 13.23. Use the initial point (X2, X3, X4, X5, X6, Y2, Y3, Y4, Y5, Y6) = (7.5, 15, 22.5, 30, 37.5, 0, 0, 0, 0, 0) (Answer: X2 = 7.9168, X3 = 16.2538, X4 = 24.3557, X5 = 32.223, X6 = 39.303, Y2 = -3.8577, Y3 = -7.1458, Y4 = -8.8364, Y5 = -8.2859, Y6 = -5.1603).

Section 13.4.2 and 13.4.3 13.8 The buckling load F for a tubular column shown in Figure 13.28 may be expressed as the following equation with unknown constants a and b: F =

paERbt4 - b 4L2

where E is the modulus of elasticity, R is the mean radius, t is the thickness, and L is the length of the column. It is assumed that the exact relation for the buckling is unknown and the constants will be determined through curve fitting of experimental data. To do this, an experiment is conducted where columns of different sizes, with E = 1,724 N/mm2, L = 127 mm, t = 25.4 mm, are loaded until they buckle. The loads at which the buckling occurs for different values of R are recorded in Table 13.9. Determine a and b by using lsqcurvefit with an initial point (a, b) = (1, 1) and create Figure 13.29 where the experimental data and the fitted curve are shown (Answer: a = -3.3182 and b = 3.1588). 13.9 Suppose that one of the ingredients in a pharmaceutical drug is to be kept at a certain percentage of the drug volume and that this percentage decreases over time. In the F

t L 2R

Figure 13.28 Column geometry for Exercise 13.8.

760

Chapter 13

Optimization

TABLE 13.9 Values for Radius R and Load F of Exercise 13.8

Experiment

R (mm)

F (kN)

1 2 3 4 5

27.9 43.2 53.3 73.7 99.1

385 536 2,317 7,820 18,230

weeks before the drug reaches the market, a decline in the percentage may occur. Since many other uncontrolled factors may also arise, theoretical calculations are not reliable for making a prediction of the decrease of this ingredient at later times. To assist the management in deciding when the drug should be replaced after it has been stored in a warehouse for an extended period of time, cartons of the drug are analyzed to measure their ingredient content as a function of time. The results of one such measurement is shown in Table 13.10. It is postulated that a nonlinear model of the form Y = a + (0.51 - a)e - b(t - 8) accounts for the variation observed in the data. Estimate the parameters a and b of the nonlinear model by using lsqcurvefit with an initial point (a, b) = (1, 1) (Answer: a = 0.3918 and b = 0.1394). 13.10 Suppose that you are observing a vehicle at a stop sign. The vehicle stops, and then it rapidly accelerates past five houses whose distances from the stop sign are known. As 4500 Experimental values Fitted curve

4000 3500

F (klb.)

3000 2500 2000 1500 1000 500 0

1

1.5

2

2.5 R (in.)

Figure 13.29 Tubular column results of Exercise 13.8.

3

3.5

4

Exercises

761

TABLE 13.10 Data for Exercise 13.9

Length of time since production (weeks), t

Amount of ingredient, Y

Length of time since production (weeks), t

Amount of ingredient, Y

7 9 11 13 15 17 19 21 23

0.488 0.473 0.448 0.435 0.431 0.453 0.421 0.405 0.405

25 27 29 31 33 35 37 39 41

0.405 0.403 0.391 0.403 0.398 0.393 0.398 0.388 0.388

the vehicle starts from rest, you time the vehicle with your stopwatch as it passes each house. The data collected from such observations are shown in Table 13.11. The acceleration as a function of time is given by a(t) = Ct2 + Dt + 2a0 where t is travel time, a0 is initial acceleration, and C and D are constants. Hence, the position of the vehicle as a function of time is given by x(t) = At4 + Bt3 + a0t2 Estimate the equation for the car’s velocity v(t) as a function of time using lsqnonlin with an initial point (A, B) = (0, 0). Assume that the initial position, velocity, and acceleration of the vehicle are, respectively, x0 = 0 m, v0 = 0 m/s, and a0 = 0.61 m/s2. Determine the error (the second output of lsqcurvefit) of the least square estimation (Answer: v(t) = -0.032693t3 + 0.2515t2 + 1.22t and error = 5.6533). 13.11 A coordinate measuring machine (CMM) is used to determine the actual dimensions of features of a manufactured part by using a sensor that indicates when the sensor has initially contacted a surface of the part. When the sensor indicates that a part’s surface has been contacted, the CMM records sensor’s coordinates. When the feature is a hole in the part, the N recorded values of different locations of the surface of the hole are used in the following relation to determine the location of the center of the hole and its radius: rn = 2(xc - xn)2 + (yc - yn)2

n = 1, 2, Á , N

TABLE 13.11 Position and Time for the Vehicle of Exercise 13.10

Position (m)

Time (s)

0 2.74 6.1 18.3 27.4 36.6

0 2.05 3.1 4.8 5.6 6.8

762

Chapter 13

Optimization

y

(xn,yn) rn b yc xc

a

x

Figure 13.30 Square plate with a circular hole of Exercise 13.11.

The terms appearing in the equation are defined in Figure 13.30. Use this relation to determine the radius and center of the circular hole by letting xc = 1.25 and yc = 1.5 and by using simulated data generated from the following MATLAB expression: r = ro+0.02*randn(N,1); where ro = 0.075 is the nominal radius of the hole and N = 40. The result should look similar to that shown in Figure 13.31.

r = 0.74602 xc = 1.2467 yc = 1.5101

Figure 13.31 Circle fitted to CMM data.

Exercises

763

Section 13.5.2 13.12 Find the location of the center of the smallest sphere that contains on its boundary or in its interior the following four points: A = (1, 1, 1), B = (-1, 2, 4), C = (2, 3, 4), and D = ( -3, -4, 1), where the numbers in the parenthesis are the x-, y-, and z-coordinates of the point, respectively. The radius of a sphere whose center is located at (xc, yc, zc) is given by R2 = (xc - x)2 + (yc - y)2 + (zc - z)2 where R is the radius of the sphere and (x, y, z) are the coordinates of A, B, C, and D.The design variables are the (xc, yc, zc) coordinates of the center of the sphere and its radius R. Solve the problem with fmincon with an initial point (xc, yc, zc, R) = (4, 4, 4, 4) (Answer: (xc, yc, zc, R) = (- 0.5, -0.5, 2.5, 4.5552)). 13.13 Consider the three-bar truss shown in Figure 13.32. The vertical deflection of its loaded joint gives the objective function22 Ph 1 E x1 + 12x2

minimize f =

where the cross-sectional areas of its members are A1 = x1 and A2 = x2, hence, x1 and x2 are the design variables. Load P is applied in the direction shown in Figure 13.33. The constraints are the applicable stresses on the three members and the lower and upper bounds on the design variables, which are given by P(x2 + 12x1)

- s(u) … 0

12x21 + 2x1x2

P - s(u) … 0 x1 + 12x2 Px2 12x21

+ s(l) … 0

+ 2x1x2

(u) x(l) i … xi … xi

P

A2

A1

h

A3

h

Figure 13.32 Three-bar truss of Exercise 13.13.

22

Rao, Engineering Optimization, p. 530.

h

i = 1, 2

764

Chapter 13

Optimization

A R1

R5

I1

I5

R3 I2

I4

I3 R2

R4 B

Figure 13.33 Bridge network of Exercise 13.14.

where s(u) is the maximum permissible stress in tension, s(l) is the maximum permissible (u) stress in compression, x(l) is the upper bound on xi. i is the lower bound on xi, and xi (u) (l) The values for the parameters are s = 17.5, s = -12, x(l) = 0.1, x(u) = q (i = 1, 2), i i P = 1, E = 2, and h = 2. Use fmincon to obtain the optimized values for the cross-sectional areas and the vertical deflection. Assume an initial value of (x1, x2) = (0, 0) (Answer: x1 = 8.3177, x2 = 26.924, and f = 0.021554). 13.14 Consider the resistor bridge network shown in Figure 13.29, which consists of five resistors Ri, each carrying a current Ii, i = 1, Á , 5. The voltage drop across each resistor is Vi = RiIi. Suppose that V1 = 3 V, V3 = 1 V, and V5 = 1 V for R1, R3, and R5, respectively. Also assume that the current Ii varies between a lower limit of 1 A and an upper limit of 2 A for all resistors. The total power dissipated in the five resistors is given by 5

5

n=1

n=1

P = a I2nRn = a V2n/Rn Then, the optimization statement is minimize P subject to: 1 … In … 2 V1/R1 + V3/R3 - V5/R5 = 0 V2/R2 - V3/R3 - V4/R4 = 0 where the two equality constraints are obtained from setting the sum of the currents at the points A and B equal to zero. The values of V2 and V4 can be obtained from Kirchhoff’s voltage law: the sum of the voltages for the two closed circuits in Figure 13.33 is equal to zero. This yields that V2 = V4 = 2. Use fmincon to obtain the optimum values for each of the five resistors and the total power dissipation using an initial point (R1, R2, R3, R4, R5) = (1, 1, 1, 1, 1, 1) (Answer: [R1, R2, R3, R4, R5] = [3, 1, 1, 2, 0.5] ohms and total power dissipation = 12 W).

Section 13.5.3 13.15 A company has m manufacturing facilities to produce a product. The product is shipped to n warehouses. The warehouse at the jth location requires at least bj units of the product to satisfy its demand. The manufacturing facility at the ith location has a capacity to produce ai units of the product. The cost of shipping xij units of the product from manufacturing facility i to warehouse j is represented by cijxij + dijx2ij where cij

Exercises

765

and dij are constants. Thus, the problem can be formulated in a quadratic programming form as m

n

minimize a a (cijxij + dijx2ij) i=1 j=1 m

subject to: a xij Ú bj

j = 1, Á , m

i=1

n

a xij Ú aj

i = 1, Á , m

j=1

xij Ú 0

for all i, j

Assume that m = 6, n = 4, a = [8, 24, 20, 24, 16, 12]¿, b = [29, 41, 13, 21]¿, 300 740 300 c = F 430 210 360

270 600 490 250 830 290

460 540 380 390 470 400

800 380 760 V 600 680 310

-7 -12 -13 d = F -7 -4 -17

-4 -9 -12 -9 -10 -9

-6 -14 -8 -16 -21 -8

-8 -7 -4 V -8 -13 -4

and an initial point of 5 5 10 x0 = F 5 5 5

5 5 0 20 0 5

0 0 0 0 15 0

0 10 0 V 0 0 0

Solve this problem using quadprog to obtain the optimum number of units that should be produced at manufacturing facility i and shipped to warehouse j, xij. Answer: 0 0 20 x = F 0 3 6

8 3 0 24 0 6

0 0 0 0 13 0

0 21 0 V 0 0 0

Section 13.5.4 13.16 The two-bar truss shown in Figure 13.34 is symmetric about the y-axis. The ratio of the position of links 1 and 2 x/h and the ratio of the cross-sectional area of the links A/Aref are treated as the design variables x1 and x2, respectively, Aref is the reference value of the area A, and h is the height of the truss. The direction of the applied load P is subject

766

Chapter 13 P

Optimization

y θ

x

h Link 2

Link 1

Figure 13.34 Two-bar truss of Exercise 13.16.

to change within the range -90° … u … 90°. The weight of the truss w is to be minimized. Thus, minimize w = 2rhx2Aref 21 + x21 subject to: -s0 …

P21 + x21 … (x1 cos u + sin u) … s0 2x1x2Aref

-s0 …

P21 + x21 … (x1 cos u - sin u) … s0 2x1x2Aref

where r is the density. The constraints corresponding to the stresses induced in links 1 and 2 are given in the above equations where P is the applied load. In addition, the following upper and lower bounds are imposed on the design variables x1 and x2: ximin … xi … ximax

i = 1, 2

The values of the parameters are as follows: x1min = 0.15, x2min = 0.15, x1max = 3.0, and x2max = 3.5, r = 7833.4 kg/m3, P = 35,585.8 N, s0 = 127.55 * 106 Pa, h = 2.159 m, and Aref = 6.452 * 10 - 4 m2. Use fseminf to obtain the optimum design variables and create a plot of the stresses as a function of u sampled in 5° intervals as the optimum is approached. The result should look like that shown in Figure 13.35 when an initial design (x01, x02) = (0.1, 0.1) is assumed (Answer: x1 = 0.8088, x2 = 0.45058, and w = 12.6431). Section 13.7 13.17 Solve the optimization problem in Exercise 13.6 using ga. Use the default values of the genetic algorithm and choose the option for the hybrid function fmincon that runs after the genetic algorithm terminates. Assume lb = [0 0 0] and ub = [1 1 1]. Create the plot of the Currentbestindividual and display the numerical value of the variables in the command window at the end of the program’s execution. 13.18 Solve the optimization problem in Exercise 13.13 with ga. Use the default values of the genetic algorithm. Create the plot of the Currentbestindividual and produce the numerical value of the design variables at the end of its execution. 13.19 Solve the optimization problem in Example 13.18 with gamultiobj. Use the penalty approach of Section 13.7 to add the nonlinear constraints as a penalty function to each objective function using a penalty parameter P = 100 and the option PlotFcns in gaplotpareto to produce the Pareto front as it evolves during the optimization convergence.

767

1.5

1.5

1

1

0.5

0.5 stress σ2 (GPa)

stress σ1 (GPa)

Bibliography

0

0

−0.5

−0.5

−1

−1

−1.5

−50

0 50 θ (degrees)

−1.5

−50

0 50 θ (degrees)

Figure 13.35 Stresses in links 1 and 2 of Figure 13.34 as the optimum is approached.

13.20 Solve the optimization problem in Example 13.15 with (a) ga and (b) gamultiobj. For part (b), use the same constraints as that of part (a) except that the second objective function is the stress of shaft 1, that is,

minimize

745x4 2 1 a b + 16.9 * 102 0.1x36 E x2x3

For part (b), use the penalty approach discussed in Section 13.7 to add the seven nonlinear constraints as a penalty to each objective function. Use a penalty parameter P = 100 and select the PlotFcns option in gaplotpareto to produce the Pareto frontier as it evolves to the final solution while the optimizer converges.

BIBLIOGRAPHY J. S. Arora, Introduction to Optimum Design, McGraw-Hill, New York, 1989. M. Austin and D. Chancogne, Engineering Programming in C, MATLAB and JAVA, John Wiley & Sons, New York, 1998. V. Changkong and Y. Y. Haimes, Multiobjective Decision Making: Theory and Methodology, Elsevier Science Publishing Co., New York, 1983. K. Deb, Multi-Objective Evolutionary Optimization Using Evolutionary Algorithms, John Wiley & Sons, New York, 2001. N. Draper and H. Smith, Applied Regression Analysis, John Wiley & Sons, New York, 1966.

768

Chapter 13

Optimization

H. Eschenauer, J. Koski, and A. Osyczka, Eds, Multicriteria Design Optimization, SpringerVerlag, New York, 1990. J. Golinski, “Optimum synthesis problems solved by means of nonlinear programming and random methods,” Journal of Mechanisms, 5, 1970, pp. 287–309. C. Gosselin and J. Angeles, “A global performance index for the kinetic optimization of robotic manipulators,” ASME Journal of Mechanical Design, 113, 1991, p. 222. U. Kirsch, Optimal Structural Design, McGraw-Hill, New York, 1981. A. Messac, “Physical programming: effective optimization for computational design,” AIAA Journal, 34, 1996, pp. 149–158. A. Osyczka, Multicriterion Optimization in Engineering with Fortran Programs, Ellis Horwood Limited, West Sussex, UK, 1984. P. Y. Papalambros and D. J. Wilde, Principles of Optimal Design, Cambridge University Press, Cambridge, UK, 1988. S. S. Rao, Engineering Optimization,Theory and Practice, 3rd ed., John Wiley & Sons, New York, 1996. G. V. Reklaitis, A. Ravindran, and K. M. Ragsdell, Engineering Optimization, John Wiley & Sons, New York, 1983. J. Shigley and C. Mischke, Mechanical Engineering Design, McGraw-Hill, New York, 1989. D. A. Stephenson and J. S. Agapiou, Metal Cutting Theory and Practice, Marcel Dekker, New York, 1997. G. N. Vanderplaats, Numerical Optimization Techniques for Engineering Design, McGraw-Hill, New York, 1984. D. A. Van Veldhuizen and G. B. Lamont, “Multi-Objective Evolutionary Algorithm Research: A History and Analysis,” Technical Report TR-98-03, Air Force Institute of Technology, Wright Patterson AFB, OH, 1998. D. J. Wilde, Globally Optimal Design, John Wiley & Sons, New York, 1978.

14 Biological Systems: Transport of Heat, Mass, and Electric Charge Keith E. Herold

14.1 Heat Transfer in Biological Systems 770 14.1.1 Heat Transfer in Perfused Tissue 770 14.1.2 Thermal Conductivity Determination 773 14.2 Mass Transfer in Biological Systems 775 14.2.1 Bicarbonate Buffer System 775 14.2.2 Carbon Dioxide Transport in Blood 778 14.2.3 Oxygen Transport in Blood 779 14.2.4 Perfusion Bioreactor 782 14.2.5 Supply of Oxygen to a Spherical Tumor 786 14.2.6 Krogh Cylinder Model of Tissue Oxygenation 789 14.3 Charge Transport in Biological Systems 796 14.3.1 Hodgkin–Huxley Neuron Model 796 14.3.2 Hodgkin–Huxley Gating Parameters 797 14.3.3 Hodgkin–Huxley Model with Step Function Input 802 14.3.4 Action Potential 804 Exercises 807 Several models of transport phenomena in biological systems are analyzed. 769

770 Chapter 14

Biological Systems: Transport of Heat, Mass, and Electric Charge

14.1 HEAT TRANSFER IN BIOLOGICAL SYSTEMS 14.1.1 Heat Transfer in Perfused Tissue Transient heat conduction in biological material is represented by the bioheat equation,1 which is often written as 0T 1 = a§2T + [S + Sp + Sm] rc 0t where T is the temperature in the tissue, a is the thermal diffusivity of the material, c is the specific heat, and r is the density. The term S represents energy from a source, Sm accounts for metabolic energy release, and Sp accounts for the energy carried away by blood flow (perfusion). The term S is used to include any artificially imposed sources such as radio frequency (RF) heating or cryogenic cooling. The metabolic rate of energy release varies with tissue type, activity level, and nutrition. A representative value for the metabolic rate is 145 W/m3. The perfusion term is usually a sink, carrying away the metabolic energy. In its simplest form, the perfusion term can be modeled as # Sp = mbcb(Tab - T) # where mb is the blood mass flow rate per unit volume, cb is the blood specific heat, and Tab is the temperature of the arterial blood entering the tissue. This term assumes that the blood leaves the tissue at the local tissue temperature T. The bioheat equation can be used to model the temperature in biological tissue in a wide range of applications, including the prediction of normal tissue temperature, the prediction of transient temperature under exposure to temperature extremes, and the prediction of temperature changes during therapy, ranging from RF ablation to cryosurgery. We shall now apply this equation in the example that follows. Example 14.1

Ablation of a spherical tumor

One approach for treatment of a tumor is to use RF ablation, where a high-frequency electric current is dissipated in the tumor’s tissue causing a rise in temperature to the point where the cells die. Ablation therapy usually employs a narrow-gauge needle that is inserted into the tumor to deliver the RF energy. In general, a temperature increase of 10K or higher will cause cell death. The objective with this therapy is to kill all the tumor cells without killing large numbers of cells in the healthy tissue surrounding the tumor. Thus, one must have an understanding of the thermal transport in the tissue in order to properly employ thermal ablation therapy. We shall analyze this type of therapy by modeling the tumor as a sphere and by making the following assumptions. We assume that the tumor has a radius of 1 cm and that it is perfused at the same level as healthy tissue. The tumor is located at the center of 1

H. H. Pennes, “Analysis of tissue and arterial blood temperature in the resting human forearm,” Journal of Applied Physiology, 1, 1948, pp. 93–102.

Section 14.1

Heat Transfer in Biological Systems

771

a sphere of healthy tissue that has a radius of 5 cm and all of the tissue has a metabolic energy release rate of 145 W/m3. In practical terms, the metabolic energy release has little effect on this particular example because the RF source has considerably higher energy intensity: 4 * 105 W/m3. In addition, the RF energy of the source is assumed to dissipate only within the tumor and its duration is 400 s. The power is delivered locally to the tumor by positioning the electrode in the center of the tumor. The initial temperature of the tumor and surrounding tissue is uniform at 37°C. In addition, it is assumed that because of symmetry there is zero flux at the center of the tumor and that at the outer surface of the healthy tissue the flux is also zero. The following numerical values for the # parameters are used: mb = 0.18 kg/m3/s, cb = 3,300 J/kg/K, Sm = 145 W/m3, Tab = -7 2 37°C, a = 10 m /s, c = 3,800 J/kg/K, S = 4 * 105 W/m3, and r = 850 kg/m3. A numerical solution to this model is obtained by using pdepe with m = 2, which indicates that a spherical coordinate system is to be used. The use of pdepe is outlined in more detail in Section 5.5.6. We shall determine the radial temperature profiles at t = 300 s, 400 s, 600 s, and 1,500 s and the temperature responses at radial locations r = 0 cm, 1 cm, and 1.5 cm. The program is as follows: function Example14_1 rho = 850; cp = 3800; Sm = 145; mb = 0.18; cpb = 3300; Tb = 37; alpha = 1e-7; S = 4e5; R = 0.05; r = linspace(0, R, 51); t = linspace(0, 3000, 1001); T = pdepe(2, @tumorPDE, @tumorIC, @tumorBC, r, t, [], alpha, S, rho, cp, mb, Á cpb, Tb, Sm); figure(1) plot(t, T(:,1), 'k-', t, T(:,11), 'k—', t, T(:,16), 'k-.', [400 400], [30 70], 'k--') xlabel('t (s)') ylabel('Temperature (\circC)') legend('r = 0', 'r = 1 cm', 'r = 1.5 cm') ylim([30 70]) figure(2) r = r*100; plot(r, T(61,:), 'k-.', r, T(134,:), 'k-', r, T(201,:), 'k--', r, T(501,:), 'k:', [1, 1], Á [30, 70], 'k--') xlabel('r (cm)') ylabel('Temperature (\circC)') legend('t = 300 s', 't = 400 s', 't = 600 s', 't = 1500 s') ylim([30 70]) function [c, f, s] = tumorPDE(r, t, T, DTDr, alpha, S, rho, cp, mb, cpb, Tb, Sm) c = 1; f = DTDr*alpha; s = (S*(rHO2)n + (PO2>HO2)n

=

COn 2 n C50 + COn 2

where C50 =

P50 HO2

Therefore, Eq. (14.17) becomes CT,O2 = [O2]T = [O2]d + [O2]Hb = CO2 +

4[Hb]CnO2 Cn50 + CnO2

(14.28)

Differentiating Eq. (14.28) with respect to CO2, we obtain 0CT,O2 0CO2 8

= 1 +

Fournier, Basic Transport Phenomena, p. 240.

4n[Hb]Y2Cn50 CnO+2 1

(14.29)

Section 14.2

Mass Transfer in Biological Systems

791

This relationship between the total oxygen concentration, including both dissolved and bound oxygen, and the dissolved oxygen is taken from the discussion in Section 14.2.3. The large storage capacity of the hemoglobin means that a small flow rate of blood carries a large oxygen supply. Equation (14.29) is used in Eq. (14.27). The oxygen concentration at the inlet is assumed to be a known constant value CO2,in so that CO2(r, 0) = CO2,in

(14.30a)

The centerline of the capillary is assumed to be an axis of symmetry such that 0CO2(0, z) 0r

= 0

(14.30b)

A boundary condition at the outer surface of the capillary is needed, but its specification is deferred until after the tissue model is introduced. The diffusion of oxygen in the tissue is modeled as radial diffusion in a cylinder with a volumetric sink S, which represents the metabolic rate of oxygen uptake by the cells. Axial diffusion is ignored for simplicity, guided by a symmetry argument that predicts zero diffusion flux between adjoining Krogh cylinders. The governing equation in the tissue is given by9 d 2CN O2 1 dCN O2 S + = Rc … r … Rt (14.31) 2 r dr D dr t where Cn O2 = Cn O2(r), Dt is the mass diffusion coefficient in the tissue, and from Eq. (14.20) Smax CN O2 S = N CO2 + CMM The boundary condition at the outer limit of the tissue cylinder r = Rt is that the flux is zero, that is, 0CN O2 2 = 0 (14.32) 0r r = Rt We now couple these two regions by specifying what is taking place at the capillary wall r = Rc, which is common between the tissue and the blood. Oxygen can diffuse readily through the capillary wall. Thus, for simplicity, we ignore the resistance of the wall and require that there is continuity of concentration and flux at the boundary, that is, CO (Rc) = CN O (Rc) 2

Dc

9

Ibid, p. 243.

0CO2 0r

2

2 r = Rc

= Dt

0CN O2 0r

(14.33)

2 r = Rc

792 Chapter 14

Biological Systems: Transport of Heat, Mass, and Electric Charge

It is seen from the formulation above that we are solving a conjugate problem with two different domains each with its own physics and coupled by the continuity conditions at the capillary wall r = Rc. Example 14.7

Krogh cylinder model with a parabolic blood velocity profile

Consider a Krogh cylinder model of a capillary with length 1 mm and diameter 10 mm, thus, L = 0.001 m and Rc = 0.00001 m. In addition, the outer diameter of the tissue cylinder is 100 mm; thus, Rt = 0.0001 m. We shall assume an oxygen mass diffusion coefficient Dc = 2 * 10 - 9 m2/s in the capillary blood and Dt = 1 * 10 - 9 m2/s in the tissue. The blood velocity is assumed to have a parabolic profile of the form V(r) = Vmax A 1 - (r>Rc)2 B

(14.34)

with a centerline velocity Vmax = 0.0005 m/s. In addition, we assume that n = 2.34, C50 = 35.14 * 10 - 6 M, [Hb] = 0.0022 M, Cin = 120 * 10 - 6 M, Smax = 20 * 10 - 6 M, and CMM = 10 * 10 - 6 M. We use pdepe to solve Eq. (14.27) and bvp4c to solve Eq. (14.31). The matching conditions of concentration and flux, as given by Eq. (14.33), are imposed by utilizing the current value of wall concentration as an input to bvp4c, which returns the flux; the flux, in turn, is then fed back to pdepe. In this way, both conditions are imposed on the common boundary. The function pdepe calls the boundary condition function (which contains bvp4c) many times as it iterates to solve the boundary value problem in r at each step of the integration along z. Iteration by the pdepe solver is required because the final solution must match two conditions at the boundary; however, the two boundary value representations, one for each side of the common boundary, require a single condition at that location. On the first call to the boundary condition function an initial guess is used for the temperature; this allows computation of the tissue problem using bvp4c resulting in a heat flux at the capillary wall. This heat flux is then used by pdepe to solve the boundary value problem in r, which results in an updated value for the boundary temperature. This iterative process continues until both conditions are approached within the solution tolerances. The end result of this coupled solution of the conjugate problems in the blood and the tissue is that the governing equations are satisfied in both domains and that the matching conditions at the capillary wall are satisfied. Finally, it was found that the convergence criteria for pdepe had to be tightened to obtain a smooth and reasonably accurate solution. The program that performs the calculations as described above is as follows. The various functions that are used by this program and their respective purposes are listed in Table 14.6. function Example14_7 Rc = 10e-6; Rt=100e-6; Dc = 2e-9; Dt = 1e-9; Vmax = 0.0005; CHb = 0.0022; Cin = 120e-6; Smax = 20e-6; Cmm = 10e-6; z = linspace(0, 0.001, 101); r = linspace(0, 10e-6, 101); options = odeset('RelTol', 1e-6, 'AbsTol', 1e-9); C = pdepe(1, @CapillPDE, @CapillIC, @CapillBC, r, z, options, . . . Rc, Rt, Dc, Dt, Vmax, CHb, Cin, Smax, Cmm);

Section 14.2

Mass Transfer in Biological Systems

793

TABLE 14.6 Functions Used in Krogh Cylinder Model

Function name

Description

CapillPDE

Defines coefficients of the partial differential equation for pdepe for the blood flow model, as given by Eqs. (14.27) and (14.29) Defines the inlet condition for the blood concentration for pdepe, as given by Eq. (14.30a) Defines the boundary conditions for pdepe and calls bvp4c to implement the tissue model. Sets the mass flux at the capillary wall equal to the flux calculated by bvp4c in the tissue, which is given by Eq. (14.33) Defines the ordinary differential equation for bvp4c for the tissue model, as given by Eq. (14.31) Defines the boundary conditions for bvp4c and sets the tissue concentration equal to the blood concentration at the capillary wall, as given by Eqs (14.32) and (14.33)

CapillIC CapillBC

TissueODE TissueBC

figure(1) plot(1000*z, 1e6*C(:,1), 'k-', 1000*z, 1e6*C(:,end),'k--') legend('Centerline','Wall') xlabel('z (mm)') ylabel('C (\muM)') ylim([0 130]) figure(2) zv = [1 26 101]; solinit = bvpinit(linspace(Rc, Rt, 10), [0 0]); rt = linspace(Rc, Rt, 101); for n = 1:length(zv) plot(1000*r, C(zv(n),:)*1e6, '--k') hold on sol = bvp4c(@TissueODE, @TissueBC, solinit, [], C(zv(n), end), Dt, Smax, Cmm); y = deval(sol, rt); plot(1000*rt, 1e6*y(1,:), 'k-') text(0.001, C(zv(n),1)*1e6+3, ['z = ' num2str(1000*z(zv(n))) ' mm']) if n == 1 legend('Capillary', 'Tissue') flux = Dt*y(2,1); end end plot([0.01 0.01], [0 130], 'k:') xlabel('r (mm)') ylabel('C (\muM)') ylim([0 130]) figure(3) for n = 1:101 [Cc(n) dCdr(n)] = pdeval(1, r, C(n,:), Rc); end plot(1000*z, [-flux, -Dc*dCdr(2:end)]*1E9, 'k-') ylabel('Flux (nmol/s-m^2)')

794 Chapter 14

Biological Systems: Transport of Heat, Mass, and Electric Charge

xlabel('z (mm)') ylim([0 7]) function [c, f, s] = CapillPDE(r, z, C, DCDr, Rc, Rt, Dc, Dt, Vmax, CHb, Cin, Á Smax, Cmm) n = 2.34; C50 = 35.14e-6; Y = C^n/(C50^n+C^n); dCtdC = 1+4*n*CHb*Y^2*C50^n/C^(n+1); c = dCtdC*Vmax*(1-(r/Rc)^2); f = Dc*DCDr; s = 0; function C0 = CapillIC(r, Rc, Rt, Db, Dt, Vmax, CHb, Cin, Smax, Cmm) C0 = Cin; function [pa, qa, pb, qb] = CapillBC(rl, Cl, rr, Cr, z, Rc, Rt, Dc, Dt, Vmax, CHb, Á Cin, Smax, Cmm) solinit = bvpinit(linspace(Rc, Rt, 10), [0 0]); sol = bvp4c(@TissueODE, @TissueBC, solinit, [], Cr, Dt, Smax, Cmm); pb = -Dt*sol.y(2,1); qb = 1; pa = 0; qa = 1; function res = TissueBC(ya, yb, Cr, Dt, Smax, Cmm) res = [ya(1)-Cr; yb(2)]; function dydx = TissueODE(r, y, Cr, Dt, Smax, Cmm) dydx = [y(2); Smax/Dt*y(1)/(y(1)+Cmm)-y(2)/r];

Centerline Wall

120

100

C (μM)

80

60

40

20

0 0

0.2

0.4

0.6

0.8

1

z (mm) Figure 14.10 Oxygen concentration in blood versus axial position in capillary at centerline and at the wall for the Krogh cylinder model. The concentration difference shown is the mass transfer potential that drives the oxygen out of the blood.

Section 14.2

Mass Transfer in Biological Systems

120

795

Capillary Tissue

z = 0 mm

100

C (μM)

80 z = 0.25 mm

60 z = 1 mm 40

20

0 0

0.02

0.04

0.06

0.08

0.1

r (mm) Figure 14.11 Oxygen concentration versus radial position in Krogh cylinder model at three axial locations. In the range 0 6 r 6 0.01 mm, the data represent blood concentration. In the range 0.01 6 r 6 0.1 mm, the data represent tissue concentration. At the capillary wall, the two concentrations are equal. The vertical line at r = 0.01 mm is the location of the capillary wall.

7

6

Flux (nmol/s−m2)

5

4

3

2

1

0 0

0.2

0.4

0.6

0.8

z (mm) Figure 14.12 Mass flux versus axial position for the Krogh cylinder model.

1

796 Chapter 14

Biological Systems: Transport of Heat, Mass, and Electric Charge

Execution of the program produces Figures 14.10–14.12. As shown in Figure 14.10, the oxygen concentration falls as the blood travels through the capillary due to the oxygen transferring out of the blood to meet the oxygen requirements in the tissue. The concentration falls more rapidly near the inlet of the capillary because the flux is higher there due to the higher concentration. The radial concentration profiles at several axial locations are shown in Figure 14.11. The continuity of concentration across the capillary wall is evident at r = 0.01 mm . It is noted that there is a change in the slope of the concentration at the wall due to the different values of mass diffusivity in the two adjoining domains. It is also evident that parts of the tissue are not getting an adequate supply of oxygen. When the oxygen concentration drops below a certain value, the metabolism of the cells slows down. This effect is approximated in the model by a Michaelis–Menten modification of the metabolic sink term with CMM = 10 mM. Thus, when the oxygen concentration drops to 10 mM, the metabolic rate goes to one-half of its maximum value. The model allows one to obtain an estimate of the effective diameter of the Krogh cylinder for a particular capillary operating point, including flow rate, diameter, and inlet concentration. The mass flux through the capillary wall is plotted as a function of axial position in Figure 14.12.

14.3 CHARGE TRANSPORT IN BIOLOGICAL SYSTEMS 14.3.1 Hodgkin–Huxley Neuron Model Hodgkin and Huxley10 performed a series of groundbreaking measurements on the giant axon of a squid. These experiments led to a model that explained the physics of communication along neurons. The model is based on a membrane circuit diagram, shown in Figure 14.13. The path at the far right represents the capacitance of the membrane. It is here that energy is stored when the membrane potential difference changes. Energy is stored in the form of a layer of cations on the extracellular side and a layer of anious on the cytosolic side of the membrane. Each of the other three branches in Figure 14.13 represents a separate ion flow.

Outside iK

iNa

iL

gK

gNa

gL

EK

ENa

EL

iC Cm

Inside Figure 14.13 Hodgkin–Huxley circuit model.

10

A. L. Hodgkin and A. F. Huxley, “A quantitative description of membrane current and its application to conduction and excitation in nerve,” Journal of Physiology, 117(4), 1952, pp. 500–544.

Section 14.3

Charge Transport in Biological Systems

797

The one on the far left is potassium, the second from the left is sodium, and the remaining one is termed the leakage current that represents chloride and all other ion flows combined. In each ion current path, there is a conductance and a source, which is represented by a battery symbol. For the potassium and sodium currents, the conductance is variable. The ion channels that allow these currents to flow are voltage-gated channels that open and close in response to changes in the potential difference across the membrane. Each type of channel has a unique gating characteristic, as described in Section 14.3.2. The sources that are shown in each of the ion current legs represent the diffusion potential of each of the ions. The biological membrane has active transporters that create ion concentration differences across the membrane, resulting in a membrane potential difference that is approximately -65 mV for a resting cell. The ion channels are very specific to individual ions such that a potassium channel will not pass sodium (or vice versa). Thus, when a specific ion channel opens, ions flow through the channel driven by a combination of two forces: the electrical driving force caused by the potential difference and the diffusion driving force. The source accounts for the diffusion driving force. The leakage term is included to account for ion currents other than potassium and sodium. The leakage current is generally small and can be neglected in a firstorder analysis.The values of the leakage conductance and the source were determined empirically as a best match to a wide range of experiments. 14.3.2 Hodgkin–Huxley Gating Parameters The gating parameters in the Hodgkin–Huxley model11,12 are given the symbols n, m, and h; these parameters can adopt values between 0 and 1. The potassium channel conductance depends on the parameter n as gK = gKn4

(14.35)

where gK is the maximum potassium conductance. The fourth power dependence on n was chosen by the developers to best match the data. However, in the light of recent advances in understanding the structure of the potassium channel, the fourth power dependence is often thought to be associated with a separate gating function associated with each of the four amino terminal ends of the protein molecules in the quaternary structure of the channel. The sodium channel gating was modeled empirically as gNa = gNam3h

(14.36)

The three gating parameters n, m, and h are assumed to follow first-order kinetics. Using n as an example, we first note that n can be interpreted as the probability 11 12

Ibid. B. Hille, Ion Channels of Excitable Membranes, 3rd ed., Sinauer Associates, 2001.

798 Chapter 14

Biological Systems: Transport of Heat, Mass, and Electric Charge

that the gate will be in the open state. A first-order reaction between the open and closed states can be written as an

(1 - n) IJ n b n

where an is the forward rate constant and b n the reverse rate constant. This results in a first-order equation for n of the form dn = an(1 - n) - b nn dt

(14.37)

where t is the time. This is the equation that is used to determine the dependence of n on t. Similar equations are used for m and h by replacing n with m or h. An alternative form to this first-order equation can be obtained by algebraic manipulation. First, we define alternative parameters nq and tn in terms of to an and b n as nq =

an an + b n

1 tn = an + b n

(14.38)

Equations similar to Eq. (14.38) can be written for m and h by replacing n with m or h. Then the differential equation for n becomes dn nq - n = tn dt

(14.39)

Equations (14.37) and (14.39) are equivalent so that the choice of which one to use depends only on convenience. Historically, the parameters extracted from experiments were n q and tn, but these were converted to an and b n for purposes of the following correlations of the three gating parameters. The correlations for n, m, and h are given in terms of the membrane depolarization potential defined as Vd = V - Vr

(14.40)

where V is the membrane potential difference, which is the difference between the cytosol potential and the extracellular potential, and Vr is the resting value of V, typically around –65 mV. The correlations are tabulated in Table 14.7. Since we will use the expressions given in Table 14.7, we shall create two function M files for the a’s and b ’s as follows: function a = alph(Vd, g) switch g case 'n' if Vd == 10 a = 0.1; else

Section 14.3

Charge Transport in Biological Systems

799

TABLE 14.7 Correlation of the Gating Parameters

a

Gating parameter

b

0.01(10 - Vd)

n

an(Vd) =

m

am(Vd) =

h

ah(Vd) = 0.07e - Vd>20

b n(Vd) = 0.125e - Vd>80

(10 - Vd)>10

e -1 0.1(25 - Vd) (25 - Vd)>10

e

b m(Vd) = 4e - Vd>18

-1 b h(Vd) =

1 (30 - Vd)>10

e

+1

a = 0.01*(10-Vd)./(exp((10-Vd)/10)-1); end case 'm' if Vd == 25 a = 1; else a = 0.1*(25-Vd)./(exp((25-Vd)/10)-1); end case 'h' a = 0.07*exp(-Vd/20); end function b = bet(Vd, g) switch g case 'n' b = 0.125*exp(-Vd/80); case 'm' b = 4*exp(-Vd/18); case 'h' b = 1./(exp((30-Vd)/10)+1); end Example 14.8

Display of Hodgkin–Huxley gating parameters

We shall evaluate and display the expressions given in Table 14.7 and the expression that results from their substitution in Eq. (14.38). The program is as follows: Vr = -65; V = linspace(-100, 75, 100); Vd = V-Vr; gate = char('n', 'm', 'h'); mul = [0.1, 1, 0.1]; for k = 1:3 figure(k) subplot(2,1,1) a = alph(Vd, gate(k)); b = bet(Vd, gate(k));

800 Chapter 14

Biological Systems: Transport of Heat, Mass, and Electric Charge

plot(V, a./(a+b), 'k-', V, mul(k)./(a+b),'k--') legend([gate(k) '_\infty'], [num2str(mul(k)) '*\tau_' gate(k) ' (ms)'], Á 'Location', 'East') subplot(2,1,2) plot(V, a, 'k—', V, b,'k-') xlabel('Membrane potential (mV)') legend(['\alpha_' gate(k) ' (ms)^{-1}'], ['\beta_' gate(k) ' (ms)^{-1}'], Á 'Location', 'East') if strcmp(gate(k), 'm') == 1 ylim([0 10]) else ylim([0 1]) end end Upon execution, we obtain the graphs shown in Figures 14.14–14.16. As can be seen in these figures, the parameters n and m are activated by depolarization, that is, when the membrane voltage increases. On the other hand, h is deactivated by depolarization. This can be understood by noting that n q and m q increase asymptotically to one as the membrane potential increases, whereas h q decreases toward zero. Thus, the parameter n causes the potassium channel to open upon membrane depolarization; it remains open until repolarization occurs. In contrast, the sodium channel is dependent on both m and h. Parameter m behaves similarly to n, although the sodium channel opens later than the potassium channel. However, the sodium channel shuts down after a short open duration through the influence of h. The combination of these 1 0.8 0.6

n∞

0.4

0.1*τn (ms)

0.2 0 −100

−80

−60

−40

−20

0

20

40

60

80

1 0.8 −1

0.6

αn (ms)

0.4

β (ms)−1 n

0.2 0 −100

−80

−60

−40 −20 0 20 Membrane potential (mV)

40

60

80

Figure 14.14 Gating parameters for the potassium channel gating function n plotted as a function of membrane potential V with Vr = -65 mV. The representations in the upper and lower graphs are related by Eq. (14.38).

Section 14.3

Charge Transport in Biological Systems

801

1 0.8 0.6

m∞

0.4

1*τm (ms)

0.2 0 −100

−80

−60

−40

−20

0

20

40

60

80

10 8 −1

6

αm (ms)

4

β (ms)−1 m

2 0 −100

−80

−60

−40 −20 0 20 Membrane potential (mV)

40

60

80

Figure 14.15 Gating parameters for the sodium channel gating function m plotted as a function of membrane potential V with Vr = -65 mV. The equivalent representations in the upper and lower graphs are related by Eq. (14.38) with n replaced by m. 1 0.8 0.6

h∞

0.4

0.1*τh (ms)

0.2 0 −100

−80

−60

−40

−20

0

20

40

60

80

1 0.8 −1

αh (ms)

0.6

−1

β (ms)

0.4

h

0.2 0 −100

−80

−60

−40 −20 0 20 Membrane potential (mV)

40

60

80

Figure 14.16 Gating parameters for the sodium channel gating function h plotted as a function of membrane potential V with Vr = -65 mV. The representations in the upper and lower graphs are related by Eq. (14.38) with n replaced by h.

802 Chapter 14

Biological Systems: Transport of Heat, Mass, and Electric Charge

effects produces complex electrical phenomena such as the action potential, which is discussed in Section 14.3.4. The first step to understanding these phenomena is to understand the gating parameters in Figures 14.14–14.16. It is noted that these gating parameters were obtained by empirical matching to a series of experimentally obtained results on the squid giant axon, which is much larger than a typical axon and thus provided the best experimental vehicle for early researchers. Subsequently, miniaturized instrumentation has been developed and similar characteristics have been observed in other systems.

14.3.3 Hodgkin–Huxley Model with Step Function Input The gating parameters introduced in Section 14.3.2 define the membrane conductance in terms of the membrane potential difference. Thus, if the membrane potential difference is known as a function of time, then the conductance can be determined by integrating the time-dependent differential equations for the gating parameters, that is, equations of the form of Eqs. (14.37) and (14.39). This calculation is important since in the laboratory it is possible to set the membrane potential difference with an experimental apparatus called a voltage clamp. Such experiments formed the core empirical data that led to the development of the Hodgkin–Huxley model. One such experiment involves a step change in the membrane potential. In this experiment, the membrane potential is controlled and the membrane current is measured. The contributions to the current from individual ion channels can be determined by using various means to block or disable each of the channels. This blocking can be done by chemical or physical means. The end result is the measurement of the total current and the contributions to that current from each of the ion channels. That information enabled Hodgkin and Huxley to curve fit the parameters n, m, and h given in Section 14.3.2. Once those parameters are known, one can mimic the voltage step experiment computationally. The equations that govern these parameters are (recall Eq. (14.37)) dn = an -(an + b n)n dt dm = am -(am + b m)m dt

(14.41)

dh = ah -(ah + b h)h dt

Example 14.9

Step input to Hodgkin–Huxley model

We shall solve Eq. (14.41) and plot the results when the excitation is the change in the membrane potential V, which for this example is a potential that is held for 2 ms at –65 mV and then suddenly increased to 0 mV for 3 ms before returning to –65 mV. The initial conditions for n, m, and h are, respectively, n(0) = 0.3177, m(0) = 0.0529,

Section 14.3

Charge Transport in Biological Systems

803

and h(0) = 0.5961. These initial conditions are the steady-state values obtained from the model with a membrane potential of –65 mV. The program is as follows: function Example14_9 gate = char('n', 'm', 'h'); tspan = linspace(0, 10, 300); IC = [0.3177, 0.0529, 0.5961]; subplot(4,1,1) plot([0, 2, 2, 5, 5, 10], [-65, -65, 0, 0, -65, -65], 'k-') ylim([-100, 50]) for k = 1:3 [t, y] = ode45(@HH, tspan, [IC(k)], [], gate(k)); subplot(4,1,k+1) switch gate(k) case 'n' c = y(:,1).^4; L = 'n^4'; case 'm' c = y(:,1).^3; L= 'm^3'; case 'h' c = c.*y(:,1); L = 'm^3h'; end

50 0 −50 −100 0 1

2

4

6

8

10 n n4

0.5 0 0 1

2

4

6

8 m m3

0.5 0 0 1

2

4

6

8

10 h

0.5 0 0

10

m3h 2

4

6

8

10

t (ms) Figure 14.17 Response of the gating parameters to a step change in membrane potential. The upper pane shows the membrane voltage in mV. The lower three panes show gating parameters as indicated in the legends.

804 Chapter 14

Biological Systems: Transport of Heat, Mass, and Electric Charge

plot(t, y(:,1), 'k-', t, c, 'k--') legend(gate(k), L, 'Location', 'East') if k == 3 xlabel('t (ms)') end end function dy = HH(t, y, g) V = -65+65*((t>2)&(t2) & (t2) & (t0CO2 is given by Eq. (14.29). For the parameters appearing in Eq. (14.29), use those given in Example 14.7. It will be found that the ability of blood to store oxygen in bound form cause the decrease in concentration along the bioreactor to be much less when using blood as compared to water. Section 14.2.5 14.11 a. Starting from Example 14.6, run Example_6 with K = 0 and K = 25 * 10 - 10 and compare the results. Note that with K = 0, the concentration is lower at the center of the tumor because in this case the metabolic sink term is constant throughout. With K = 25 * 10 - 10, the metabolic sink term is reduced when the oxygen concentration is low. b. When K = 0, the solution to Eq. (14.25) subject to the boundary conditions given by Eq. (14.26) is given by c(x) = 1 +

© 2 ( x - 1) 6

Compare the numerical solution obtained in part (a) with this result. Section 14.2.6 14.12 a. Referring to Example 14.7, the mean outlet concentration is defined as Rc

Rc

0

0

2p 4 VC(z, r)rdr = 2 A 1 - (r/Rc)2 B C(z, r)rdr Cm(z) = VmA 3 Rc 3 where A is the cross-sectional area of the capillary and we have used the fact that Vmax/Vm = 2. Using the results of Example 14.7, determine the mean outlet concentration at z = L (Answer: 45.2942 mM). b. Perform a parametric study on the effect of the mass diffusivity parameters Dc and Dt to determine the sensitivity of the mean outlet concentration to these parameters. Run the model with 10% changes in Dc and Dt using the combinations shown in Table 14.9 and determine the mean output concentration at each of these concentrations.The results are also shown in the table. It is seen that the total transport is more sensitive to the tissue diffusivity. This is an example where there are two transport resistances in series with one larger than the other such that the transport rate is “controlled” by one of the resistances. In this case, the diffusion through the tissue

TABLE 14.9 Parameter Values for Exercise 14.12

Dc (m2/s) -9

2.2 * 10 1.8 * 10 - 9 2 * 10 - 9 2 * 10 - 9

Dt (m2/s) -9

1 * 10 1 * 10 - 9 1.1 * 10 - 9 0.9 * 10 - 9

Cm (mM) 45.1111 45.5170 44.0989 46.6450

Exercises

811

controls the overall transport rate. Thus, changes in that resistance have a larger overall effect on the total transport. Section 14.3 14.13 Consider Eq. (14.41), which is used to describe an axon subjected to a membrane potential. Assume a membrane potential of -65 mV and zero initial conditions for each gating parameter. In addition, assume that the membrane potential is held for 2 ms at -65 mV and then suddenly increased to 0 mV for 3 ms before returning to -65 mV. For these conditions, determine the steady-state values for n, m, and h, which are those values that these quantities have at 100 s (Answers: n = 0.31768, m = 0.05294, and h = 0.59611). 14.14 Using Example 14.9 as the starting point with a resting potential of -65 mV, compute the ion current Iion for step changes to a membrane potential of -50 mV, -25 mV, 0 mV, and 25 mV and plot the results. Apply the resting potential for 2 ms before applying the step changes. Let each step change remain constant for 16 ms before returning to the resting potential at 18 ms. The entire simulation is to last for 20 ms. The ion current Iion is determined from Eq. (14.43) as Iion = gkn4(V - EK ) + gNam3h(V - ENa) + gL(V - EL) Use the values in Table 14.8 for the other parameters appearing in Eq. (14.43). 14.15 The action potential is often described as “all or nothing.” Test this description by varying the stimulus and comparing the shape and magnitude of the resulting action potentials. Start from the solution given in Example 14.10 and change the stimulation potential to 100 mV, 150 mV, 200 mV, and 250 mV. For each of these cases, plot the resulting action potential on the same graph. 14.16 One of the characteristics of the sodium channels is that they exhibit a refractory period where they will not respond until a certain time has elapsed. To test this statement, start from the program given in Example 14.10 and modify it to provide the stimuli that are separated in time as follows. Consider the following stimulus pairs: (1) a pulse that starts at 2 ms and lasts for 0.1 ms and followed by another pulse that starts at 11 ms and lasts for 0.1 ms, and (2) a pulse that starts at 2 ms and lasts for 0.1 ms followed by another pulse that starts at 12 ms and lasts for 0.1 ms. The results should show that at 11 ms the response to the second pulse is severely stunted, whereas for the case where the second pulse is initiated at 12 ms, the response to the second pulse looks very similar to that of the first pulse. 14.17 Some neurons fire repeated action potentials and encode information in the frequency of the firing. An interesting characteristic of the Hodgkin–Huxley model of Section 14.3 is that under certain conditions, the equations will fire in a self-sustained pulse train after a single stimulation. This can be shown by changing the maximum sodium conductance to one-half of its current value, that is, gk = 0.018 S/cm2, and running a simulation for 100 ms with a single stimulus at 2 ms and duration of 0.1 ms. The result should show a continuous train of action potentials firing with a period of approximately 18 ms.

Index @, 18, 187 see also Function handle

A Ablation of tumor, 770 Accelerometer, 514 Acoustic source, radiation pattern from, 330 Airfoil, 653 See also Joukowski airfoil Amplitude response function, 464, 489, 519 Amplitude spectrum, 248 Animation, 307 Annotation to command window, 133 Anonymous function, see Function, user-created Apostrophe, 18 see also Matrix transpose and Strings Apple surface, 372 Area of polygon, 195 general shape, 208 812

Assignment operator, 9 Astroid, 320 Astroidal ellipse, 371 Archimedean spiral, 320 Autopilot, control system for, 610

B Backslash (\), 18, 107 Baseball seam, 370 Beams, see Euler beam and Timoshenko beam Bearing, thrust, 254 Bicarbonate buffer system, 775 Bicuspid, 320 Bi-cylinder coordinate system, 323 Bioheat equation, 770 Biot number, 662 Blank line, 6 removal of, 6 space, 10, 18 Blasius boundary layer, 628, 672, 674 Block diagram,526, 542 Blood, properties of, 780

Index

Bold text, 298 Bow curve, 371 Braces, 17 Brackets, 17 Butterfly, 320

C Cable, inextensible, 259 Cam, 336 Campbell diagram, 523 Capillary, see Krogh cylinder model Carbon dioxide transport in blood, 778 Carbonic acid titration curve, 777 Cardioid, 320 Cascaded system, 543 Cell, 141 see also Editor Chatter, see Machine tool chatter Coefficient of determination, 406 Colebrook formula, 252, 329, 621, 623 Colon, 17 notation, 54 Comma, 17 Comment, see Percentage sign Command history, 3 clear, 3 window, 3 management of, 5 Complex number, 11, 13 Compressibility factor, 251 Concho spiral, 370 Confidence intervals, 397 Contour, see Plot Controllability, 558 Controller design, tools for, 527 Controls toolbox, 524 Convection, natural, 214 Conversion, decimal-to-integer, 15 Convolution integral, evaluation of, 242 Cornucopia, 371 Correlation coefficient, 406, 441 Cross correlation, 198, 200 Cruise control, automotive, 609

813

Curvature, symbolic determination of, 37 Curve fitting, 464, 710, 713, 715 Cycloid, 320 Cylinders, intersecting, 370 Coulomb damping, 472

D Damkohler number, 782 Data entry, 135 Data files, creation of, 137 Design of experiments, 415 2k factorial, 424 multiple factor, 419 single factor, 415 Determinants, 101 Difference equations, 539 Differential equations, solution of, boundary value problems (bvp4c), 217 delay (dde23), 231 initial value problems (ode45), 212 parabolic-elliptic (pdepe), 233 symbolic solution, 244 Differentiation, symbolic, 33, 35, 35 Digital signal processing, 196 Directory path, selection of, 24 Dot operations, 11, 83, 157 Dumbbell, 320

E Edit menu, 3 Editor, 3-5, 20 cell mode, 23 Effect, determination from a designed experiment, 427 Eigenvalues, three degree-of-freedom system, 102 Eight curve, 320 Electric circuit, 125 Emissivity, 688 Epicycloid, 320 Equally spaced values, generation of, 57

814

Equilibrium equations, chemical 776 Euler angles, 366 Euler beam, 221 impulse response of, 509 natural frequency of, 229 point loading, 226 uniformly loaded, 222 with overhang, 223 variable cross section, 227 Euler transformation matrix, 111 Execution, program, 24 Exponentially decaying sine wave, 192, 193, 209

F Factorial experiment, see Design of experiments Fast Fourier transform, 196 inverse, 196 Feedback, 526 positive, 593 stability of, 527 unity gain, 533 FFT, see fast Fourier transform Figure within figure, 304, 362 First-order system, 551 Fitting data with polynomials, 188 with splines, 190 Flow biological, 646 channel, water in, 250 external, 626 gas from tank, 262 laminar boundary layer, 630 pipes, in, 621, 670 open channel, 641 potential, 631, 651 turbulent, 622 viscous, 621 Flow field, uniform, 632 Fluid acceleration, 627 Folium, 320

Index

Forced oscillation linear system, 462 nonlinear system, 478 Fourier series evaluation of, 10 single degree-of-freedom system, 466 Fourier transform, discrete, 196 Fourth-order system, control of, 557 Free oscillations linear system, 456 nonlinear system, 469 Frequency-response function, 456, 483 Froude number, 642 Function, MATLAB abs, 14, 16 acker, 570 acos, 14 acosh, 14 acot, 14 acoth, 14 acsc, 14 acsch, 14 airy, 16 alpha, 568, 571 angle, 16 anova1, 417, 418 anova2, 420, 421 anovan, 423 arx, 560 asec, 14 asech, 14 asin, 14 asinh, 14 atan, 14 atan2, 14, 467 atanh, 14 axes, 304 axis equal, 276 axis ij, 345 axis image, 288 axis vis3d, 355, 513 axis, 274, 275, 281, 345 bar, 283, 378 besseli, 16 besselj, 16, 96, 204, 664

Index

besselk, 16 bessely, 16 beta, 15 binocdf, 384 binofit, 384 binoinv, 384 binopdf, 384, 385 binornd, 384 binostat, 384 bintprog, 709, 710 bode, 462, 560, 561, 566 box, 281, 345 boxplot, 372 break, 8, 166 bvp4c, 217, 223, 225, 226, 228, 230, 505, 630, 667, 674, 788, 793, 794 bvpinit, 217, 223, 225, 226, 228, 230, 505, 630, 667, 674, 788, 793, 794 c2d, 539, 540 case, 8, 154 ceil, 15, 313 celldisp, 142 cellstr, 143 char, 129, 141, 457, 470, 476, 799 chi2cdf, 384 chi2inv, 384 chi2pdf, 384 chi2rnd, 384 chi2stat, 384 clabel, 348 clc, 5, 27 clear, 5, 27 close, 27 collect, 39 colorbar, 351 colormap, 346, 391 compare, 560 complex, 16, 639 conj, 16, 58 connect, 543 continue, 8 contour, 348, 640, 705 contour3, 349 contourf, 351 conv, 536 convhull, 286

815

cos, 14 cosd, 14 cosh, 14 cot, 14 cotd, 14 coth, 14 csc, 14 cscd, 14 csch, 14 cumsum, 88, 161, 278, 379 cylinder, 352 damp, 464, dblquad, 207, 211, 684 dcgain, 538, 573 dde23, 231 deblank, 130 delauney, 286 det, 102 detrend, 559, 560 deval, 217, 218, 231, 630, 667, 674, 788, 793, 794 diag, 68, 496, 498 diff, 34, 40, 194 disp, 26, 131 dot, 95 dsolve, 244 eig, 102, 496, 498 ellipke, 16 ellipsoid, 353 else, 8, 151 elseif, 8, 151 end, 8, 151, 154, 162 eps, 15 erf, 16 erfc, 16, 661 error, 153 eval, 139 exp, 14 expint, 16, 774 expm1, 14 eye, 16, 774 factor, 38 factorial, 14 fcdf, 384, 404 feedback, 533, 537, 538, 561, 565, 579, 582, 586, 593, 595

816

Function, MATLAB (Continued) feval, 186 ffn2, 426 fft, 196, 479 fgoalattain, 738, 741 figure, 267 fill, 294, 317, 461, 568, 571 fill3, 355, 357 find, 62, 63, 73, 160, 312, 461, 640 findstr, 129, 138 finv, 384, 400 fix, 15 fliplr, 79, 128 flipud, 80, 317 floor, 15, 555, 749 fminbnd, 235, 312, 619, 720, 721, 734 fmincon, 722, 723, 726, 729 fminimax, 492, 736, 740 fminsearch, 493, 711, 713 fminunc, 710, 711 for, 8, 151, 155 format, 6, 7, 9 fpdf, 384 fprintf, 27, 132 frnd, 384 fseminf, 732, 734 fsolve, 238 fstat, 384 function, 8, 175 fzero, 202, 461, 619, 626, 643, 645, 691, 777 ga, 743, 746, 750 gamma, 16 gamultiobj, 743, 747 gaoptimset, 744, 746, 747, 750 gca, 301 geomean, 379 getframe, 307 global, 8, 177, 179, 180, 745 grid, 281, 345 help, 29, 176 hidden, 342 hist, 378 histfit, 391 hold, 269 humps, 237

Index

i, 11, 15 iddata, 558, 560 ident, 558 if, 8, 151 ifft, 186 ilaplace, 36, 489 imag, 16, 571, 599 image, 288 impulse, 462, 487, 548, 856 imread, 288 inf, 15, 35, 36, 723, 741 initial, 550, 604 inline, 184, 240 input, 25, 135 int, 35 int2str, 131 interp1, 192, 459, 564, 692 inv, 104, 108, 600, 601 isempty, 506 j, 11, 15 legend, 292 legendre, 16 length, 55 limit, 35 linprog, 706, 707, 708 linsolve, 107 linspace, 57 load, 137 log, 14 log10, 14 log1p, 14 loglog, 283 logncdf, 384 lognfit, 384 logninv, 384 lognpdf, 384 lognrnd, 384 lognstat, 384 logspace, 384 lqe, 560, 570 lqr, 560, 570, 571, 603, 604 lsim, 548 lsqcurvefit, 464, 714, 715 lsqnonlin, 715, 717, 718 magic, 17 maineffectsplot, 423

Index

margin, 561 matlabFunction, 240 max, 16 mean, 16, 63, 378, 388 median, 16, 379 mesh, 341 meshc, 347 meshgrid, 76, 278 meshz, 347 min, 16, 63 minreal, 554, 593, 600, 601 mode, 16 movie, 308 movie2avi, 308 NaN, 15, 179 nargin, 599 normcdf, 384, 389 normfit, 384, 388 norminv, 384, 389 normpdf, 384, 389 normplot, 391, 408, 418, 432 normrnd, 384 normspec, 389 normstat, 384 num2str, 130 numden, 37 nyquist, 560 ode45, 212, 449, 457, 459, 470, 473, 477, 479, 486, 487, 494, 643, 691, 692, 803, 806 odeset, 213, 449, 473, 792, 806 ones, 67 optimset, 202, 218, 492, 711, 713 otherwise, 8, 154 parallel, 544 patch, 295 pdepe, 233, 621, 646, 666, 670, 771, 784, 792 persistent, 8 pi, 15 pie, 286 pie3, 286 place, 570, 573 plot, 269 plot3, 338, 491 plotyy, 283,

817

poisscdf, 384 poissfit, 384 poissinv, 384 poisspdf, 384, 387 poissrnd, 384 poissstat, 384, 387 pol2cart, 95 polar, 310 pole, 537, 538, 554, 561, 564, 584, 591, 593, 599 poly, 205 polyarea, 195 polyconf, 405, 407 polyfit, 188, 311, 405, 407, 774 polyval, 188, 311, 408 prctile, 383 pretty, 37 primes, 14 print, 269 prod, 379 quadl, 207, 511, 616 quadprog, 730, 731 rand, 560, 774 randn, 313 range, 379 rank, 497 raylcdf, 384 raylfit, 384 raylinv, 384 raylpdf, 384 raylrnd, 384 raystat, 384 rcoplot, 413 real, 16, 33, 571, 599 realmax, 15 realmin, 15 reg, 570 regress, 411, 412 repmat, 76 return, 8, 178 ribbon, 348 rlocfind, 570, 577, 580, 585, 593, 595, 601 rlocus, 568, 570, 576, 577, 580, 585, 593, 595, 601 roots, 205

818

Function, MATLAB (Continued) round, 15, 313 save, 139 sec, 14 secd, 14 sech, 14 semilogx, 283 semilogy, 283 series, 543 set, 271 sgrid, 568, 572, 576, 585 shading, 355 sign, 14, 475, 477 simple, 38, 40, 106 simplify, 41 simulink, 544, 587 sin, 14 sind, 14 sinh, 14 size, 66 skewness, 383 solve, 243 sort, 61, 103, 143, 313, 498 sortrows, 143 sphere, 353 spline, 190, 459, 615 sprintf, 135, 140 sqrt, 10, 14 ss, 530, 531, 547, 576, 584, 591, 599 ssbal, 547 ssdata, 532, 544, 570, 571, 573, 603, 604 stairs, 283 std, 16, 378, 388 stem, 283 step, 464, 487, 534, 537, 548, 551, 556, 558, 571, 573, 579, 596 strcmp, 130, 487 strtrim, 130 subplot, 267, 316 subs, 36 sum, 88, 195, 513 surf, 341 surfc, 347 surfnorm, 348 switch, 8, 151, 154, 508

Index

syms, 33, 106, 316 tan, 14 tand, 14 tanh, 14 taylor, 36 tcdf, 384, 402 text, 291 tf, 462, 530, 536, 547, 552, 558, 566, 580, 582, 586, 593, 595, 600 tfdata, 537, 587 tinv, 384 title, 291 tpdf, 384 trace, 451 trapz, 193 triplot, 286, 287 trnd, 384 tstat, 384 ttest, 402, 403 ttest2, 402, 403 tzero, 538, 592, 595 var, 16, 400 vartest, 402 vartest2, 402, 404 vectorize, 240, 489 view, 353 voronoi, 286 vpa, 33, 34, 489 waterfall, 347 wblcdf, 384, 395 wblfit, 384, 395 wblinv, 384, 395 wblpdf, 384, 394 wblplot, 305 wblrnd, 384 wblstat, 384, 394 while, 8, 151, 162 whos, 6 xlabel, 291 xlim, 274, 275 xlsread, 143 ylabel, 291 ylim, 274, 275 zeros, 68, 156 zgrid, 582

Index

zlabel, 339 zpk, 530, 538, 547, 577, 580, 582 zscore, 389 ztest, 402 Function, user-created, 172, 175, 186, 201 anonymous, 175, 183 debugging, 174, file, 173, 175 inline, 175, 184 interface, 175 length of, 174 naming of, 174 subfunction, 175, 181 transfer of data with, 188 Function handle, 183

G Gate, planar, forces on, 616 Gear, 320 reducer, 727 tooth, 324 worm, 262 lead angle, 327 Genetic algorithm, optimization with, 742 Genetic Algorithm and Direct Search toolbox, 742 Gingerbread man, 323 Graphs, see also Surfaces annotation, 291 axes labels, 291 Greek letters, 296 legend, 292 mathematical symbols, 296 table of, 299 style, 299, 300 text, 291 title, 291 attributes, alteration of, 299 management of, 266 functions, 267 special purpose, 281

819

H Hamming function, 198 Handle, see Function handle Heat flux, 670, 674, 679 Heat transfer biological tissue, 770 conduction, 660 convection with, 662 heat source, with, 664 convection, 668 natural, 677 radiation, 682 enclosure, within, 687 transient, 690 Help, 29 Henry’s law, 778 Hierarchy, mathematical operations, 10 Hill model, 780 Histogram, 378 unconventional, 313 Hodgkins-Huxley action potential, 804 gating parameters, 797 display of, 799 neuron model, 796 step function input to, 802 Hydrostatics, 614 Hyperbolic helicoid, 372 Hypocycloid, 320 Hypothesis testing, 401

I Index, 29, 31 Infinite impulse response (IIR), 541 Initial conditions, 448, 457, 459, 469, 473, 476 inline, see Function, user-created and Function, MATLAB Integration numerical of a function, 207 using data, 193 symbolic, 33-35

820

Interface, see Function, user-created Interpolation of data, 192 Italic text, 298

J Joukowski airfoils, 636, 654, 655 transformation, 636

K Keywords, 8 plotting, 276 Krogh cylinder model, 789

L Laplace equation, 97, 631 Laplace transform, 456, 482, 535 symbolic inverse, 37, 241 Lead control, 567, 568, 569, 576, 577, 589 Legend, see Plot characteristics Lemniscate, 320 Limits, symbolic, 35 Linear programming, 706 Logarithmic decrement, 455 Logarithmic spiral, 320 Logical operator, 148 Lognormal distribution, 438 Loop for, 15 while, 162 Loss factor, 333 LQG controller, 603

M M file, 173 Machine tool chatter, 232, 460 Manning equation, 642 Matrix addition and subtraction, 81, 92 column augmentation, 81 creation of, 64, 74, 76

Index

diagonal, 52, 68 identity, 52, 69 inverse, 104 symbolic, 106 manipulation of elements, 69-73, 75 maximum value, 73 minimum value, 73 multiplication, 92 column vector and row vector, 95 row vector and column vector, 94 row vector and matrix, 99 null, 68 row augmentation, 82 square, 52 transpose, 10, 53 with complex elements, 67 Mean, 377 Mean square, 416, 420 Michaels-Menten constant, 783 model, 782, 786 M-Lint, 22 Minimum of a function, 235 Missile, control system for, 608 Möbius strip, 371 Mode shape circular membrane, 96 three degree-of-freedom system, 496 Moment of inertia, principal, 450 Moody diagram, 330 Multiple-valued functions, 203

N Natural frequency eight degree-of-freedom system, 521 Euler beam, 229 with interior spring, 259-261 four degree-of-freedom system, 497 three degree-of-freedom system, 496, 520 Timoshenko beam, 499 two degree-of-freedom system, 484

Index

Nested structure, 149 Nonlinear equations, numerical solutions of, 238 Nonminimum phase, 557, 595 Notation convention, book, 3 Notch controller, 577 Notch filter, 608

O Observability, 558 Operators, arithmetic, 10 Optimization toolbox, 702 Orbital motion, 447 Overloading, 18 Overshoot, 525, 528, 563, 565 Oxygen concentration, 782, 785, 789 supply to tumor, 786 transport in blood, 779

P Pappus chain, 331 Parallel connection of systems, 543 Parentheses, 17 Pareto frontier, 736, 740, 748 Pendulum absorber, 215 inverted, 256 planar, 446 Percentage sign, 17, 18, 23 Percentile, 383 Period, 17 pH, 775 Phase portrait, see Phase space Phase space, 457, 472, 474, 555 Plant, 576 Plate, circular, 260 natural frequencies, 372 Plot characteristics, changing, 270-273 axes, 300 filling regions, 294 legend, 301

821

line styles, 300 shading, 355 transparency, 295 circles, 276 multiple, 276, 277 contour, 347 curves combined with surface, 342 multiple, 277, 279-281, 311 spatial, 338 interactive, 306 lines, 270, 273-276 points, 270, 271 Polar plot, 309 Polar to Cartesian coordinates, 87, 95 Power screw, efficiency of, 326 Prandtl number, 673 Pre-allocation, array, 155 Preferences, 7, 22 Pressure coefficient, 637 Pressure distribution in atmosphere, 615 Principal stress, 249 Probability distribution, 383 continuous, 387 normal, 388 sine wave, 322 Weibull, 394 discrete, 383 binomial, 384 Poisson, 386 Process capability ratio, (PCR), 439 Production planning, 707, 741 Proportional controller, 567, 569, 577 Proportional derivative (PD) controller, 584 Proportional integral derivative (PID) controller, 586

R Radiation pattern, acoustic, 332 Radiosity, 688 Reference signal, 526 Regression equation, 408, 428, 431 linear, 404

822

Regression (Continued) multiple, 408 simple, 404 Relational operators, 14, 15, 149 Reliability, 437 Reservoir, 256, 616, 618 connected, 624 discharge from, 644, 655 oscillations in, 648 Residuals, 406, 410 standardized, 442 studentized, 442 Reynolds number, 669 Rigid body, stability of, 451 Rise time, 563, 565 Root locus, 567 Roots polynomial, 205 transcendental function, 202

S Sample time, discrete, 541 Save and Run, 19 Saving program, 25 Scalar versus array, 11 Scripts creating, 19 executing, 19 Search, 31, 32 Seashell, 371 Second-order system, 554, 556 Seismometer, 515 Semicolon, 9, 17 Series connection of systems, 543 Servomotor, 525, 531 Settling time, 564 Shell, cylindrical, 264 buckling coefficients, 334 natural frequencies, 335 Similarity solution, 629, 672, 677 SIMULINK, 526, 542, 586 Single degree-of-freedom system, 39, 209, 237, 305, 454

Index

Sink, 632 Slider-crank mechanism, animation of, 308 Source, 632 Spherical helix, 370 Spherical spiral, 370 Spring Belleville, 324 helical, 723 nonlinear, 469, 478 piece-wise linear, 475 two-spring system, 703 Square, drawing of, 317 Stability, 561 State-space form, 455, 484 model, 530 Statistics toolbox, 445 Stream function, 629, 631, 639, 673, 677, 681 Streamlines, 633, 639 Stress concentration factor, 247 Strings creating, 127 concatenation of, 128 Subfunction, see Function, user-created Subscripts, see Graph Substitution, symbolic, 36 Sum-of-squares, 416, 419, 420 Summation, 88 Super ellipse, 320 Superscripts, see Graphs Surfaces, plotting of, 341 cylindrical, 352 ellipsoidal, 353 spherical, 353 transparency of, 355 Suspension system, 606, 610 Symbolic expression, conversion to function, 240 Symbolic toolbox, 33 Syntax, basic MATLAB, 8 System identification, 558 System of equations, numerical solution of, 108 symbolic solution of, 243

Index

T Taguchi, 436 Taylor series, 583 symbolic, 33, 36 Thermal conductivity, determination of, 773 Timoshenko beam natural frequencies, 499 static displacement, 261 Toroidal spiral, 370 Torus, 366 figure eight, 371 Transfer function, 483, 516 Transfer function representation, 535 Transpose, see Matrix and Vector Truss, two bar, 745, 747, 748 Two degree-of-freedom system, 157, 481 amplitude response, 489 base excitation, 493 frequency response, 315 impulse response, 486 initial velocity, 485, step response, 486

U Unit step function, 150

V Variable precision arithmetic, 33, 34 Variance, 378

823

Vector accessing elements of, 59 column, 53 creation, 53 manipulation of elements, 59 row, 52 transpose, 53, 66 complex values, with, 58 Vibrations cable, 250 cantilever with mass, 250 circular plate, 250 clarinet reed, 257 cylindrical shell, 264 forced, 254 membrane, 249 platform, optimization of, 738 string, 249 Vibration absorber, 491 View factor, 682 View menu, 4 von Mises stress, 376 Vortices, 632

W Weighting function, 197 Window default, 4 command, 3 Wire-frame box, 339 Workspace, 3, 6 clear, 3