0% found this document useful (0 votes)
645 views

Programming For Electrical Engineers - MATLAB and Spice

Uploaded by

rishi vikram
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
645 views

Programming For Electrical Engineers - MATLAB and Spice

Uploaded by

rishi vikram
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 273

PROGRAMMING FOR

­ELECTRICAL ENGINEERS
MATLAB & SPICE

James C. Squire, P.E., Ph.D.


Julie Phillips Brown, Ph.D.
Academic Press is an imprint of Elsevier
125 London Wall, London EC2Y 5AS, United Kingdom
525 B Street, Suite 1650, San Diego, CA 92101, United States
50 Hampshire Street, 5th Floor, Cambridge, MA 02139, United States
The Boulevard, Langford Lane, Kidlington, Oxford OX5 1GB, United Kingdom

Copyright © 2021 Elsevier Inc. All rights reserved.


No part of this publication may be reproduced or transmitted in any form or by any means,
electronic or mechanical, including photocopying, recording, or any information storage and
retrieval system, without permission in writing from the Publisher. Details on how to seek
­permission, further information about the Publisher’s permissions policies and our arrangements
with organizations such as the Copyright Clearance Center and the Copyright Licensing Agency,
can be found at our website: www.elsevier.com/permissions.

This book and the individual contributions contained in it are protected under copyright by the
Publisher (other than as may be noted herein).

MATLAB® is a trademark of The MathWorks, Inc. and is used with permission. The MathWorks
does not warrant the accuracy of the text or exercises in this book.

This book’s use or discussion of MATLAB® software or related products does not constitute
endorsement or sponsorship by The MathWorks of a particular pedagogical approach or particular
use of the MATLAB® software.

All images of LTspice and its icons are owned by Analog Devices, Inc. (ADI), Copyright © 2021.
All Rights Reserved. The images and icons of LTspice are reproduced with permission by ADI. No
­unauthorized reproduction, distribution, or usage is permitted without ADI’s written consent.

Notices
Knowledge and best practice in this field are constantly changing. As new research and experi-
ence broaden our understanding, changes in research methods, professional practices, or
medical treatment may become necessary.

Practitioners and researchers must always rely on their own experience and knowledge in
evaluating and using any ­information, methods, compounds, or experiments described herein.
In using such information or methods they should be mindful of their own safety and the safety
of others, including parties for whom they have a professional responsibility.

To the fullest extent of the law, neither nor the Publisher, nor the authors, contributors, or
editors, assume any liability for any injury and/or damage to persons or property as a matter
of products liability, negligence or otherwise, or from any use or operation of any methods,
products, instructions, or ideas contained in the material herein.

Library of Congress Cataloging-in-Publication Data


A catalog record for this book is available from the Library of Congress

British Library Cataloguing-in-Publication Data


A catalogue record for this book is available from the British Library

ISBN: 978-0-12-821502-9

For information on all Academic Press publications visit our website at


https://www.elsevier.com/books-and-journals

Acquisition Editor: Stephen Merken


Editorial Project Manager: Ali Afzal-Khan
Production Project Manager: Kamatchi Madhavan
Cover Designer: Matthew Limbert

Typeset by TNQ Technologies

Printed in China

Last digit is the print number: 9 8 7 6 5 4 3 2 1


FOREWORD

Welcome, students, as you begin your journey to becoming electrical engineers!


You probably chose this major because you wanted a challenging and reward-
ing college experience. Perhaps you came in search of a field of study that would
suit your natural inclinations towards math and science. While some of you may
have prior experiences from First Robotics, Lego League, or a high school elec-
tronics course, others may never have considered engineering as a career before
a guidance counselor suggested it. Perhaps you have always known engineering
was right for you, from the first time you took apart a household gizmo or saved
spare parts taken from broken toys. While most people see engineering as a way
to help solve society’s problems using technology, all of you will soon learn to
appreciate our profession as an extended family of colleagues who share an
oddball sense of humor, who have actually read their calculator manuals, and
who are bothered by technical faults in science fiction movies.

Programming for Electrical Engineers iii


We have designed this textbook not only to help you learn matlab programming
and Spice simulation skills, but also to introduce you to the culture and profession
of Electrical Engineering. As you progress through the curriculum, you will find
that the way you think about problems will change: your analysis will become
clearer, your ability to discard confounding variables will sharpen, and your ability
to construct and test models of processes will improve. This will be true whether
the problem is how to build an improved voltage amplifier, how to increase the
morale of the junior engineers in your unit, or how to grow a company in the
face of fierce international competition. EE graduates perform well in engineer-
ing, leadership, and business roles upon graduation, and many go on to diverse
careers in law, medicine, and the military. Indeed, Forbes Magazine notes that
engineering and computer science majors were found to have higher postgradu-
ation salaries than any other major1. These advantages do not attenuate over
time; engineering has long been ranked as the most common undergraduate
degree among Fortune 500 CEOs2, more than business and economics majors.

While a degree in engineering confers many benefits upon graduation, most


of all, we hope to convey that we become engineers neither for the economic
benefits nor for the opportunity to use technology to help solve societal prob-
lems (although we are grateful for both). We become engineers because we love
the challenge of solving difficult problems. That is the thought that keeps both
first-year students and seasoned professionals motivated into the early morning
hours, and it is a large part of the success and satisfaction you will find in what-
ever career you ultimately choose.

Welcome to the field,

James Squire Julie Phillips Brown


1Somers, Darian, and Josh Moody. “10 College Majors With the Highest Starting Salaries.” U.S. News

& World Report, 11 Sept. 2019, www.usnews.com/education/best-colleges/slideshows/10-


college-majors-with-the-highest-starting-salaries.
2Whitler, Kimberly A. “New Study On CEOs: Is Marketing, Finance, Operations, Or Engineering The

Best Path To CEO?” Forbes, 14 Oct. 2019, www.forbes.com/sites/kimberlywhitler/2019/10/12/new-


study-on-ceos-is-marketing-finance-operations-or-engineering-the-best-path-to-the-c-suite/.

iv Foreword
ACKNOWLEDGMENT

The authors would like to gratefully acknowledge the contributions of cadets


at Virginia Military Institute, and in particular, Eric Munro ‘21, Will Nicholson ‘21,
Alex Rice ‘22, and Ben Smith ‘21, each of whom helped to test and improve the
problem sets in this text.

Dr. Brown would like to express her deepest thanks to her coauthor, Jim Squire,
whose ingenuity, good humor, and tireless efforts on behalf of this project have
been an invaluable gift. She would also like to thank her family for the gifts of
laughter, love, and time, which have buoyed her throughout the process of writ-
ing, revising, and publishing this book.

Dr. Squire thanks his coauthor, Julie, for managing to keep him on-track with
inspiration, spirit, and grammar (in roughly that order); his wife, Laura, whose
love and support never faltered even through another year of late-night dinners;
and Kevin and Ryan whose curiosity and enthusiasm for learning he hopes is
reflected in this text.

Acknowledgment v
INTRODUCTION

PURPOSE OF THIS TEXT

We wrote Programming for Electrical Engineers because we could not find an


“ideal” laboratory manual from among the currently available introductions to
matlab and introductions to Spice tailored for students of Electrical Engineering
(EE). Many such texts read like user manuals (e.g., “this key does this, this com-
mand that”), without much attention to connecting to the underlying principles
of Electrical Engineering. Other texts were abstract, focusing more on the heart
of procedural programming, but likely too advanced for a first-year engineering
audience. A few of the texts currently available provide excellent introductions
to general engineering principles, but they do not focus on the unique concerns
of specific majors.

Unlike other manuals, Programming for Electrical Engineers introduces matlab,


Spice, and general programming and analysis concepts within an Electrical
­Engineering context, and it tailors its content to the specific needs of a single-
semester EE course. Thus, Programming for Electrical Engineers is accessible for
first-year students, whether or not they have a background in programming or
circuit analysis. While this textbook omits concepts that would be critically impor-
tant to a Computer Science student, like data structures, it includes specialized
mathematics applications, like complex phasor analysis, which are central to
frequency-domain analysis in Electrical Engineering. Programming for Electrical
Engineers also provides an overview of computationally intensive methods used
in Circuit Analysis, Electronics, Signals and Systems, Controls, and Digital Signal
Processing. It touches on some ideas from the digital courses as well, with the

Introduction xi
exception of hardware description language (HDL) modeling of general digital
systems, which deserves an entire course of its own. In short, this textbook offers
both a general introduction to the analog aspects of Electrical Engineering and
a specific overview of the programming packages of matlab and Spice. 

SOFTWARE FOR ELECTRICAL ENGINEERS

There are a number of software packages commonly used in Electrical and


­Computer Engineering, including matlab, Spice, C, C++, VHDL, Python, Java, C#,
JavaScript, Multisim, and Verilog. You will learn about the first two in this text,
and many more as you progress through the curriculum.
• m  atlab: matlab is the lingua franca of Electrical Engineering, Aeronautics,
and Bioengineering, and it is becoming increasingly common in Mechani-
cal Engineering as well. matlab is an advanced calculator, a graphing
package with vastly more customizable results than Excel, and a general
programming language. matlab works primarily with numbers; although
it has some symbolic capabilities, it is not intended to be an algebraic
solver, like Wolfram Alpha or Mathematica.
• S  pice: Spice is a circuit simulator capable of simulating almost any ana-
log or digital circuit. It lets the user build the circuit graphically and then
probe it to read voltages and currents. There are many variants of Spice;
in this course, we will use a freeware version called LTSpice, published by
Analog Devices.
• C  : The oldest of the programming languages still widely in use, C’s
simple syntax is well-suited for use in embedded systems (miniatur-
ized computers on a chip). It is very closely related to the language
used to program Arduino microcontrollers. Despite its ubiquity in
miniaturized embedded systems, you will not find it used in full-
sized PC programs because it cannot make complex applications as
ably as modern programming languages that support object-orient-
ed behavior.

xii Programming for Electrical Engineers


• C ++: This language (pronounced “Cee-plus-plus”) is one of the most
common languages used to develop programs that run on personal
computers and the web. Unlike matlab and Python, it can run directly
from the operating system as a standalone program (matlab and
Python programs typically must run from within a matlab or Python
shell). C++ is a superset of the C programming language that adds
object-oriented behavior.
• V HDL: VHDL is a specialized language used to program a specific type
of integrated circuit called a Field Programmable Gate Array (FPGA).
These chips do not execute code in a typical fashion; rather, they run
many thousands of processes at the same time, and they require a
specialized language to do so. VHDL is slightly more common among
defense contractors than its major competitor, Verilog.
• P ython: This relatively new language is similar to an open-source ver-
sion of matlab. Python has become increasingly common in the hobby-
ist world, since it does not require an expensive matlab license, but it is
not yet as common as matlab in industry and academia.
• J ava: Java is a popular multiplatform programming language. Like C++,
it is object-oriented and creates stand-alone programs, and many feel it
has a cleaner syntax than C++. Java is very common, but its overall use is
slowly declining.
• J avaScript: Despite its name, JavaScript has little in common with Java.
This language has grown in popularity since it first became an embed-
ded part of HTML (which is one of the main reasons that the use of Java
has declined), and it is now most commonly used within the html of web
pages.
• C #: C# is a modern, object-oriented programming language, similar in
syntax to C++, but also cleaner, like Java. It has become more popular
than Java for creating Windows-based programs that run on PCs and the
web, but it is tied to the Microsoft operating system.

Introduction xiii
• M ultisim: Multisim is another popular circuit simulator, similar to Spice.
It is currently more popular among hobbyists, but it is steadily gaining
traction among industry professionals.
• V erilog: Like VHDL, Verilog is another language used to program FPGAs.
Verilog is more common among nondefense contractors in the United
States, and the language looks more like C.
• M athCAD: MathCAD is a hybrid of a spreadsheet and a higher-math-
ematics package, like matlab. It is faster to learn, but it also has less
­programming power. MathCAD is commonly used in Civil Engineering.
• A utoCAD, Solidworks, and Inventor: These are solid-modeling pro-
grams designed to create virtual models of two- or three-dimensional
structures. AutoCAD is very commonly used by civil engineers, while
mechanical engineers generally prefer SolidWorks or Inventor. Solid
modeling skills are usually not expected among Electrical Engineering
students, but they are useful to have.

Why matlab and Spice?

While it would be impressive to have students finish their first semester with a
working knowledge of all of the above programs, we concentrate on matlab and
Spice in this course because:
1. There is not enough time to cover all the packages and languages used
by electrical engineers.
2. Many of the above programs will not make sense until you take more
advanced engineering courses. VHDL and Verilog, for example, first
require an understanding of state machines and combinatorial logic,
topics taught in Digital Logic courses.
3. You will likely find matlab and Spice helpful in future courses, such as
Circuits, Digital Signal Processing, and Electronics. 

xiv Programming for Electrical Engineers


FORMATTING CONVENTIONS

Each chapter in Programming for Electrical Engineers has two types of problems:
“Practice Problems” and “Lab Problems.” Practice Problems will check your gen-
eral comprehension of specific material from the preceding pages. At the end of
each chapter, Lab Problems present more difficult problems that will challenge
you to synthesize and implement the material you have learned throughout the
previous chapter.  

BOXED ITEMS

Boxed items like this highlight Practice Problems, which should


be completed as you read through the chapter. These relatively
simple problems help to significantly increase understanding
and retention of the material in a way reading alone does not.

SHADED CALLOUTS

Callouts like this one are useful, but not essential. They include:

Tech Tip: Discussions that link the material to


more advanced circuit analysis and laboratory skills
Pro Tip: Topics relating to the profession
of Electrical Engineering as a whole
Recall: A review of algebra skills or other
materials covered earlier in the text
Take Note: Particularly important formulas
or concepts
Digging Deeper: Optional, in-depth explorations
of topics to enrich your introduction to Electrical
Engineering

Introduction xv
PRACTICE PROBLEMS

1. What are the two software packages that you will learn
about in this course?
2. Name two programming languages that are commonly
used in Electrical Engineering and which you may learn
in your career, but which are not taught in this textbook.
Describe how they are used.
3. Which of the following advanced Electrical Engineer-
ing courses will build on the computationally intensive
methods you will first encounter in this course: Circuit
Analysis, Semiconductors, Signals and Systems, Digital
Signal Processing, Microcontrollers, C Programming, and/
or Electronics?
4. Given a choice between C or C# to write a Windows pro-
gram that would run on a PC, which would you use?
5. What software package would you use to write a pro-
gram that runs on both Linux and Windows: Java or C#?
6. If you wanted to learn to make prototypes using a
­rapid-prototyping machine (also known as a three-­
dimensional printer), would you model them in Solid-
Works or AutoCAD, assuming you were planning on
sharing the work with Mechanical Engineering students?

xvi Programming for Electrical Engineers


INTRODUCTION TO MATLAB
1
OBJECTIVES

After completing this chapter, you will be able to do the following:

• S tart matlab
• Change its working directory to your data folder
• Use matlab as a basic calculator
• Create and inspect variables
• Save and load variables
• Get help on syntax from within matlab
• Create vectors in matlab
• Plot data
• Export commands and graphics into Microsoft Word
• Use keyboard shortcuts, like the arrow keys

STARTING matlab AND THE WORKSPACE

The matlab program icon is shown below. matlab may take a minute to load,
especially if the installation includes many toolboxes, or if this is the first time
it has been run. matlab will open its standard workspace, as shown on the
following page.

Programming for Electrical Engineers 1


Tab Control Layout Control

Directory Control

Directory Window Command Window List of Currently-


Defined Variables

matlab is composed of several controls and windows. The most important window is the center “command” window,
shown above, into which all matlab commands are entered.

If the matlab environment looks substantially different from the image above,
set the tab control in the upper left to home and choose default from the drop-
down layout control in the upper toolbar. Keep the tab control in the home
position; the other positions offer various wizards (for example, to assist in plot-
ting or filter design) that tend to be more cumbersome to use than learning the
direct syntax, as is described in this text.

Next, create a data folder and make it matlab’s current working directory
(i.e. the directory in which matlab expects to find the user’s data and programs):
1. Locate the directory control in the toolbar (top left) of the main window.
2. Use the directory control to navigate to your data directory.
3. Inside your data directory, create a new subfolder for your EE course.
4. Inside that folder, create a subdirectory called “Chapter 1”.
5. Note that the “Current Directory” input box in the toolbar now points to
your “Chapter 1” working directory. 

2 Programming for Electrical Engineers


USING matlab AS A CALCULATOR

At this point, type the following commands in the command window


and observe what they do. Press “Enter” after each line. The matlab prompt is ⨠
and should not be typed:
 ⨠ 2 / 5
⨠ 3 + (4*9) ^ 20 (matlab formats large numbers like 2∙1034 as 2e+34)
 ⨠ x = 5
 ⨠ x + 32
 ⨠ x = 2
 ⨠ y = x + 1
 ⨠ sqrt(16)
 ⨠ sqrt(-25)

matlab can be used as a sophisticated calculator, and it recognizes the following


basic commands:
+
-
*
/
^
()
sqrt()
As in many programming languages, multiplication, division, and powers are
represented by *, /, and ^. matlab uses the standard order of operator prece-
dence to evaluate expressions, so 1 + 3 ^ 2 is the same as 1 + (3^2) = 10, not
(1 + 3) ^ 2 = 16. When in doubt, use parentheses to be clear.

Notice that if you do not save your calculation result into a variable, matlab will
save it into a variable called “ans,” short for “answer,” so you can reuse it in the next
calculation, like this:
 ⨠ 2 + 3
 ⨠ ans / 10
returns 0.5

Chapter 1: Introduction to matlab 3


matlab is like a high-end scientific calculator in several ways:
1.  matlab only operates on the current line. When the value of x was
changed from 5 to 2 in the previous example, unlike a spreadsheet,
but like a calculator, it did not change previous calculations involving x,
but rather, only changed current and future calculations.
2. When there are variables involved (like x and y, in this example) and
an equals sign, matlab first evaluates the statement to the right of the
equals sign, and then it sets the variable to that number. Most
programming languages also follow this method.

matlab is unlike a calculator in other ways, which may be confusing at first:


1. 
matlab cannot perform symbolic algebra without special toolboxes.
Unlike many modern calculators, which have modes that allow one
to enter x^2 - 1 = 0 and solve for x, matlab does not understand
how to work with variables that are not set to a numeric value.
Thus, matlab will understand x = 4 + 7 because x is set to a specific
number. It will then understand y = x + 5 and set y to 16. But it
will not know what to do with 2*y = 3*x. If you want to solve for y
in this expression, you must do it yourself using algebra, and then enter
y = 3*x/2.
2. 
matlab does not understand implicit multiplication. 4(3+1) will
generate an error message, unlike 4*(3+1), which will evaluate to 16.

PRACTICE PROBLEMS

For every practice problem followed by a © symbol, record only


the matlab command that solves the problem. For problems
followed by a  symbol, write the result that matlab returns.
1. Using matlab, calculate 2^100, and write it in scientific
exponential notation (e.g. 2.4∙1047). ©
2. Using matlab, calculate 2 (6/13) + 2.17 − 3.29 ©
2

4 Programming for Electrical Engineers


TECH TIP: CHARGE AND CURRENT
Two important quantities in ECE
are current and charge. An accurate
way to think of these quantities
is the analogy of water being
pumped through pipes around
a closed circuit.

Charge
The amount of water (measured in gallons) is like electrical
charge (measured in Coulombs, or “C”). Engineers typically
use the variable “Q” to stand for the amount of charge,
such as Q1 = 0.023 C. 

Current
The quantity of water flowing past a point
(measured in gallons per second) is like electrical current
(measured in Amps, or “A”). Engineers use the variable “I”
to stand for current, such as I2 = 12 A. 

Charge and Constant Current


We can intuitively understand the relationship between
a steady current flow and amount of charge that passes:
if 2 gallons per second of current passed a point, in 3 seconds
there would be 2 g/s * 3 s = 6 gallons of water that flowed.
In the same way, if there was a constant I = 2 A of current
that flowed in a wire for 3 seconds, there would be a total
charge that passed of Q = 2 A * 3 s = 6 C.

Chapter 1: Introduction to matlab 5


For a constant current flow of I Amps over a period of t seconds,
the general equation for total current Q in Coulombs is

Q=I t

Graphically, this is shown as follows:


FXUUHQW
&KDUJH FXUUHQW[WLPH
DUHDXQGHU

WLPH
W

Important: Notice that instead of the formula above,


the charge that flows from time 0 to time t1 is also equal
to the area under the current line between t = 0 and t = t1.
This is true even if the current changes with time. Think about
this using the water analogy until it seems obvious.

DIGGING DEEPER
Those who have taken calculus will recognize that the
above formula for constant current Q = I × t generalizes
to: t1
Q = ∫i (t ) dt
0
for changing current i(t). Yet the concept remains that the
current Q is equal to the area under the current graph.

6 Programming for Electrical Engineers


PRACTICE PROBLEMS

3. U sing matlab, find the total charge that flows through


a circuit with a 2.5 A current source that has been turned
on for 45 seconds. (Remember units!) ©
4. A car’s headlights were left on overnight for 8 hours.
If the headlights draw 0.75A, use matlab to calculate
how much charge they drew overnight. ©

PRO TIP: IEEE

Electrical engineers can choose to belong to an international


professional society called the Institute of Electrical and
Electronic Engineers (IEEE), which is pronounced “I triple-E.”
This society has thousands of chapters around the world that
meet monthly, typically over dinner, to talk about a topic of
current engineering interest. These meetings are popular
among working engineers to network, socialize, and stay
current in the field. Most universities sponsor a student IEEE
chapter, which may arrange interuniversity robotics
competitions, lead field trips, and help students find internships
and ultimately, jobs. Find out more at ieee.org.

 VARIABLES

matlab can make it easier to perform complex calculations by using variables.


For example, if a design equation says the value of resistor R1 can be found
from the equation:
1
R1 = – R2
2π f C

Chapter 1: Introduction to matlab 7


and we know f = 2000, C = 20·10–9, and R2 = 3000, while one could type
 ⨠ R1 = 1/(2*3.14159*2000*20e-9) - 3000
it is clearer and less error-prone to type:
 ⨠ f = 2000;
 ⨠ C = 20e-9;
 ⨠ R2 = 3000;
 ⨠ R1 = 1/(2*pi*f*C) - R2
Notice several things in this last example:
1. Why we are using variables: it makes the problem statement more
natural. It also makes it easy to re-run the problem with different values.
To see how f = 100 changes the calculation, for example, just change the f
line to f = 100; and then re-evaluate R1 = 1/(2*pi*f*C) - R2
2. Pi: one cannot enter Greek characters directly, but there is a built-in
constant called pi that is defined to be π.
3. Semicolons at the end stop matlab from echoing the result of that line.
For example, typing:
⨠ f = 2000

 will cause matlab to parrot the following result back to the screen:
f = 2000

   This is unnecessary when declaring variables, so suppress echoing with
a semicolon, like so
⨠ f = 2000; 


NAMING AND INSPECTING VARIABLES

Variable names must begin with a letter. They may be any length, and capital-
ization matters. Electrical engineers tend to name resistors as R, R1, R2, R3, etc.,
capacitors as C, C1, C2, frequency as f, and time as t. Note that matlab considers
R1 and r1 to be two different variables.

Variables may be composed of letters (lower and uppercase), numbers (but not
as the leading character), and the underscore _ character.

8 Programming for Electrical Engineers


Examples of valid variable names include:
R27
f
index
Whats_the_frequency_Kenneth

Invalid variable names include:


3R
$spent
done?

Once a variable is created, it stays defined until you shut down matlab or explic-
itly delete the variable. It is rare to need to delete a variable, but in case you do,
it is done using the clear command, as follows:
 ⨠ clear('R27')
Every time matlab is run, it starts “clean,” with no user-defined variables from pre-
vious sessions. To find what variables are currently defined, examine the right-
most window in the matlab environment called the “Workspace” window. The
graphic below shows R1 and f were defined in the middle “Command” window,
and in the right “Workspace” window, f and R1 now appear with their current
value:

Variables in matlab defined in the middle command window are reflected in the workspace windows on the right.

Chapter 1: Introduction to matlab 9


PRACTICE PROBLEMS

Which variables are valid? If they are not valid, explain why.
5.  TheAnswerIs42
6.  SePtEmBeR21
7.  2B_or_Not2B
8. R1
9.  Current&7

PARENTHESES AND IMPLIED MULTIPLICATION

Unlike most calculators, matlab does not understand implied multiplication. Be


careful to avoid entering commands like the ones shown in these examples:
4(3+7)
Don’t do this!

or:
a=7;
3 a
will all return error messages.

Instead, multiplication must be explicitly written out with a *, as follows:


4*(3+7)
which returns 40, or:
Fixed!

a=7;
3*a
which returns 21.

10 Programming for Electrical Engineers


PRACTICE PROBLEMS

Use matlab to solve the following problems: 

2
10. 
4π   Hint: the square root function is sqrt().
7

1
11. 1 1  if R1 = 6 and R2 = 12
R1 + R2

TECH TIP: VOLTAGE, CURRENT, CHARGE, AND


RESISTANCE

We already presented an analogy between water flowing in a


closed-loop set of pipes and electric current flowing through
a closed set of wires: the amount of water in gallons flowing
past a point over a given time interval is like the charge that
flows in Coulombs past a point in a wire in a time interval.
The amount of water flow, measured in gallons per minute,
is like the amount of charge flow, called current, which is
measured in Coulombs per second, or, more conveniently,
in Amps. To complete the analogy, the pump that creates a
pressure difference in the water to make the current flow is
like a voltage source; the pressure difference between any two
points is like a voltage difference; and the resistance in the
piping system to the flow of water is like a resistor. In summary,
these are shown with their schematic symbols in the figure on
the following page.

Chapter 1: Introduction to matlab 11


Quantity Abbreviation Units Water analogy
Volume of water,
Charge Q Coulombs (C)
measured in gallons
Flow of water, measured
Current I Amps (A)
in gallons per second
Voltage V Volts (V) Pressure difference
Narrow pipe causing
Resistance R Ohms (Ω)
resistance to water flow

To create a circuit, we need the following components:

Component Schematic symbol Water analogy


Wire Pipe

Pump creating a
Voltage source + –
pressure difference

Narrowed pipe
Resistor
resisting water flow

A simple electrical circuit and its water analogy are shown


below. Try to visualize the electrical current flow through the
circuit, as it is pressurized to flow by the voltage source, and
loses that pressure as it squeezes through the resistor.

Pumped water system (left) and analogous electrical circuit (right). The pump creates a pressure
difference to encourage water to flow through a restricted pipe, as the voltage source (e.g. a battery)
creates a voltage difference, causing electrical current to flow through a resistor. The resistance in the pipe
and circuit are both unavoidable and necessary to keep infinite current from flowing.

12 Programming for Electrical Engineers


PRACTICE PROBLEMS

12. Using the analogy of the pumped water system, would


current increase or decrease as pipe resistance increases
(assuming the pump pressure remains constant)?

TECH TIP: OHM’S LAW

About two centuries ago, Georg Ohm summarized the


relationship among current, voltage, and resistance with the
formula named after him. The formula is:
V = IR
where V is voltage, I is current, and R is resistance. If we try to
understand this relationship in terms of the water analogy, it
conveys two different ideas:
1. Voltage is proportional to current: as more water current
is forced through a narrowed pipe, a greater pressure will
develop across it; and,
2. Voltage is proportional to resistance: as the pipe narrows
and its resistance increases, water flowing through it will
also cause a greater pressure to develop across it.
There are two other formulations of Ohm’s Law, one solved for
current, shown below:
V
I=
R
and similarly, one solved for resistance, as follows:
V
R=
I

Chapter 1: Introduction to matlab 13


PRACTICE PROBLEMS

13. A 68 Ω resistor has 2.4 A of current pumped through it.


Use matlab to compute the amount of voltage that must
be across the resistor. ©
14. That same 68 Ω resistor is now connected to a 120 V volt-
age source. Use matlab to compute the amount of current
that flows. ©

SPECIAL SYMBOLS: i, j, and π

Electrical engineers use imaginary numbers very frequently, for instance


3 + j7, where j = √ -1 . This is different than the way most mathematicians
would write it: 3 + 7i. Engineers use j since i is reserved to mean current, and
we place the symbol in front of the number rather than behind it. matlab
uses both i and j to mean √ -1 , so 3 + j7 would be entered in matlab as follows:
 ⨠ 3+j*7
Another constant that electrical engineers use surprisingly often is the ratio of a
circle’s perimeter to its diameter, or π. In matlab it is called:
 ⨠ pi 

FORMATTING NUMBERS

Internally, matlab keeps track of all numbers up to about 16 digits of


precision, but by default only displays numbers to 4 decimal places.
You can always see more digits in any answer by typing:
 ⨠ format long

14 Programming for Electrical Engineers


By contrast, typing:
 ⨠ format short
returns matlab to displaying the default form, rounded to four decimal places.
In electrical engineering classes, we tend to keep matlab in short format and
typically only report 3 significant digits in our answers. This is because the com-
ponents we use—resistors, capacitors, and inductors—rarely have more than
3 significant digits of accuracy in their values, and the instruments we use to
measure voltage and current in undergraduate laboratories are usually limited
to about 3 significant digits as well. 

DIGGING DEEPER
Curious as to why matlab keeps about 16 digits
of internal precision, rather than exactly 16 digits?
matlab displays numbers in base 10, but internally
works with them in base 2. It stores them in exactly 52 base-2 digits. In
base 10 this is log10(2^52) or 15.6536 digits.

SCIENTIFIC NOTATION

Very large and very small numbers are more easily read in scientific notation.
For example, a typical capacitor used in our field is a 6.8·10−12 Farad capacitor.
It would be much harder to pick one out from the parts cabinet if its label read
0.0000000000068. In matlab, one can enter values in scientific notation using
this shortcut (given for the above example):
 ⨠ 6.8e-12
Notice that there is no space between the 6.8 and the e; this is not implied mul-
tiplication (which matlab does not do), but rather a shortcut that gives the same
result as entering 6.8*10^(-12), and yet is easier to enter and read (and internally
for matlab, faster to process). matlab evaluates this input as follows:
 ⨠ 6.8000e-12

Chapter 1: Introduction to matlab 15


since by default, it returns 4 decimal digits in its scientific notation format. Later
in this book we will introduce engineering notation, which is an even more com-
pact way to write these values than scientific notation. 

EXPONENTIALS AND THEIR INVERSES: exp, ^, sqrt, log,


log10

Electrical engineers frequently use the natural exponential function, ex. It is so


common that rather than having a defined number for e and entering things
as powers, matlab has its own built-in function called exp(x). For example, to
compute e−1 in matlab, rather than typing 2.718^(-1), one would type:
 ⨠ exp(-1)
The inverse of the natural exponent is the natural logarithm. Some mathemati-
cal textbooks call this ln, as in ln(2), but matlab calls it log, as in log(2). Thus, the
following command will equal −3.5:
 ⨠ log(exp(-3.5))
Electrical engineers often use base-10 logarithms when analyzing signals whose
amplitudes vary widely. The loudness of a signal, for example, is commonly
measured in decibels, which involve base-10 logarithms. To find a logarithm to
the base 10, e.g. log10(10000) = 4, use the matlab command log10(), as follows:
 ⨠ log10(10000)
Raising numbers other than e to various powers is done using the ^ symbol. For
example, to represent 232 in matlab, type:
 ⨠ 2^32
The square root of a number can be found in matlab with the sqrt() function.

For example, 65536 (another common number in EE) is found by typing:
 ⨠ sqrt(65536) 

16 Programming for Electrical Engineers


RECALL
Need to find a root other than a square root? Cube roots and
higher are the same as taking reciprocal exponentials. For
1
example, √1024 = 1024 7
7
, or in matlab, 1024^(1/7).

matlab’s ^ function will thus let you find any root.

PRACTICE PROBLEMS
15. Use matlab to evaluate e−5. ©

16. Use matlab to find .

Hint: the matlab command for a square root of x is


sqrt(x). This number, surprisingly close to an integer,
turns up frequently in filter design problems. ©

TRIG FUNCTIONS AND THEIR INVERSES

Electrical engineers frequently use trigonometric functions, especially cosines,


to represent signals. matlab’s trig functions are cos(), sin(), and tan() to
find the cosine, sine, and tangent of a number given in radians. For example,
cosine(π/2) is found by typing the following:
 ⨠ cos(pi/2)
Inverse trig functions are given by acos(), asin(), and atan(), where the
result is returned in radians. For example, the inverse cosine in radians of −0.5 is:
 ⨠ acos (-0.5)

Chapter 1: Introduction to matlab 17


Since engineers often use degrees, alternate forms of these commands are
available that take their argument in degrees: cosd(), sind(), tand()
and their inverses that return their answer in degrees: acosd(), asind(),
atand(). For example, to find the inverse cosine of 45 degrees, use this matlab
command:
 ⨠ acosd(45)
matlab will then return 0.7071. 

RECALL
There are 360 degrees and 2π radians in a circle. The
conversion factor must therefore be the ratio, 180/π or
π/180. There are more degrees in any angle than radians,
so to convert to degrees multiply by 180/π. There are fewer
radians than degrees in an angle, so to convert to radians
multiply by π/180.

CREATING VECTORS

So far, matlab variables have been scalars, e.g., single numeric values like a = 57.
matlab variables can also be collections of numbers called vectors. Vectors are
defined in square brackets like this:
 ⨠ y = [12 3 -45 2.7 pi]
Most common mathematical functions will operate on each of the numbers
within the vector, such as exp(), log(), cos(), and the others we have dis-
cussed so far. Using the y vector defined above,
 ⨠ cos(y)+1
yields
ans =
   1.8439 0.0100 1.5253 0.0959 0

18 Programming for Electrical Engineers


TECH TIP: USING A DIGITAL MULTIMETER (DMM) TO
MEASURE STEADY VOLTAGE

Modes: Modern DMMs may seem imposing at first sight, but you
will soon be using them like a pro. To measure a voltage, first set
the selector switch to DC voltage. Possible modes usually include:
• AC (varying) voltage, marked with
• DC (constant) voltage, marked with
•  C current
A
• DC current
• Resistance

Range: DMMs may autorange, like the one below, or


require manual adjustment. If autoranging, it will move the
decimal point in the measurement to make the reading as
precise as possible. Manual-ranging DMMs split each type of
measurement (voltage, current, etc.) into different ranges (i.e.,
a 2–20 V range and a 20–200 V range). For a manual-ranging
meter, select the lowest voltage greater than the one you
expect to measure (e.g., to
measure a 1.5 V battery, if the
DMM offers ranges of 0.2, 2,
20, and 200 V, choose the 2 V
range).

Chapter 1: Introduction to matlab 19


Probe Jacks: Plug the probes into the correct jacks. DMMs have
one red probe and one black probe, and there are usually three
or more jacks to place them. The black probe goes into the jack
labeled “COM” or “Common,” and the red probe goes into the
jack labeled “V” or “Volts.”

Probe Tips: The red probe goes to the more positive end, and
the black tip to the more negative end. For the DMM pictured
here, the battery, nominally marked 1.5 V, actually reads 1.78 V. If
the probe tips were reversed, so that the red probe were at the
negative end of the battery, the DMM would read −1.78 V.

Regularly spaced vectors can quickly be created using a colon using the format
start : increment : end. It is easiest to understand with the following examples:
 ⨠ x = 0 : 0.25 : 2.5
is equivalent to
 ⨠ x = [0 0.25 0.5 0.75 1 1.25 1.5 1.75 2 2.25 2.5]
Random vectors can also be quickly created using the rand() function. A vec-
tor with N numbers in it can be created using rand(1,N). For instance:
 ⨠ x = rand (1,10)
returns (this time, since it will return different random numbers for you, or they
would not be random)
x =
   Columns 1 through 6

   0.1576 0.9706 0.9572 0.4854 0.8003 0.1419

 Columns 7 through 10

 0.4218 0.9157 0.7922 0.9595

The next chapter will more fully explore vectors and their two-dimensional
versions called matrices. 

20 Programming for Electrical Engineers


USE OF THE SEMICOLON

The semicolon ; is commonly used in matlab for two different purposes:


1. It permits multiple statements to be on the same line. For instance,
instead of typing
  ⨠ R1 = 2
  ⨠ R2 = 5
  ⨠ Rparallel = (R1*R2)/(R1+R2)
one could save space and type
  ⨠ R1 = 2; R2 = 5; Rparallel = (R1*R2)/(R1+R2)
2. It suppresses output. Normally if you type
  ⨠ R1 = 2
The command window echoes back on two separate lines
  ⨠ R1 =
 2
This is unnecessary for a simple assignment and can be suppressed by
ending the statement with a semicolon.
  ⨠ R1 = 2;
Suppressing output is very important when generating large vectors to
prevent your screen from filling with data.
  ⨠ mydata = rand (1,2000); 

Chapter 1: Introduction to matlab 21


PLOTTING DATA

matlab has an extremely comprehensive set of plotting abilities, many of which


we will explore in Chapter 3. As a brief preview, try creating a sinewave using
 ⨠ x = 0 : 0.1 : 4*pi;
 ⨠ y = cos(x);
 ⨠ plot (x,y)

It should be clear why you want to terminate the x and y definitions with an
output-suppressing semicolon; if not, enter the above commands without the
terminating semicolon and observe what happens! 

PRACTICE PROBLEMS

17. Plot a triangle with vertices at x = [0 1 0.5] and y = [0 0 0.7].
Hint: You may think you need just three points to define
your triangle, but you will need a fourth to close it, where
the final point is a copy of the starting point. To cut and
paste the figure into a Microsoft Word document, under the
Edit menu in the plot choose “Copy Figure”. 

22 Programming for Electrical Engineers


GETTING HELP

This text is a study guide, not a matlab reference manual. A reference manual is an
exhaustive listing of what every command does, listed alphabetically, but it does
not provide instruction on how to use the system as a whole. By contrast, a study
guide teaches the reader by introducing commands in small, sequential units
that build upon each other. matlab has two different built-in reference manuals:
an abbreviated manual, called “help,” and a more detailed manual, called “doc.”
To get quick, but abbreviated help with the syntax for a matlab command, type
the following:
 ⨠ help <command>
For instance, you might type:
 ⨠ help plot
This will return information about the plot command in the command window:
 plot Linear plot.
 plot (X,Y) plots vector Y versus vector X. If X or Y
is a matrix, then the vector is plotted versus the
rows or columns of the matrix, whichever line up. If
X is a scalar and Y is a vector, disconnected line
objects are created and plotted as discrete points
vertically at X.


plot (Y) plots the columns of Y versus their index.


Various line types, plot symbols and colors may be
obtained with plot (X,Y,S) where S is a character
string made from one element from any or all the
following three columns:

b blue . point - solid


g green o circle : dotted
r red x x-mark -. dashdot
c cyan + plus -- dashed
m magenta * star (none) no line

Chapter 1: Introduction to matlab 23


You can get more comprehensive help by typing:
 ⨠ doc <command>
For instance,
 ⨠ doc plot
will spawn a help window with detailed description of the desired command. 

SAVING AND LOADING VARIABLES

matlab does not remember variables between sessions; that is, when matlab is
started, it starts with no variables defined, except for a few hidden constants like
pi. Once variables are defined, they may be saved or loaded. Variables worth
saving are typically large vectors or matrices holding a lot of data. These may be
very large; for example, a vector defined to hold all the close-of-day stock prices
for IBM would have over 20,000 numbers in it.

To save a variable x, which may be real or complex, scalar or vector, in a file called
“x.txt” in ASCII format (which is a format that you can read and edit in a program
like Notepad), enter the following:
 ⨠ save ('x'.txt, 'x', '-ascii')
The filename comes first, encased in single quotes, followed by your variable
in single quotes, and then the ‘-ascii’ option to save the data in an easily read
and modified format, with each of these parts separated by a comma. Omitting
the ‘-ascii’ option will save the data as a compressed .mat file, which takes less
disk space but is essentially unreadable by any program other than matlab. If the
above syntax seems difficult to remember, do not worry. As long as you know
the name and purpose of the save() command, you can get help by typing:
 ⨠ help save

NOTE
MATLAB uses single quotes for strings, not double quotes.

24 Programming for Electrical Engineers


If you close and restart matlab, thus clearing the variable x from memory, you
can reload it by typing:
 ⨠load('x.txt')
This is also a simple way to import data generated by external sources into mat-
lab. More complex data can be imported by right-clicking the data file in the
folder window and choosing “Import Data.” 

KEYBOARD SHORTCUTS

Very often you will need to repeat a sequence of keystrokes exactly or almost
exactly. This has probably happened to you already, and you will find these key-
board shortcuts very convenient.

To recall previous commands, press the up arrow key ↑. Keep pressing to go fur-
ther back in the command history. Once the command is visible, you can edit it
or run it again by pressing “Enter.”

Another way to rerun a command is to look in the command history window,


circled in the screen shot below. While this is easier to remember than using the
up arrow key, the arrow key is much faster.

Chapter 1: Introduction to matlab 25


PRO TIP: CAREERS IN ELECTRICAL ENGINEERING

Careers in electrical engineering can be examined by sector,


title, or by subdiscipline. “Sector” refers to who hires the
engineer: a company, the government, or a university. “Title”
refers to the job description, which is a function of the sector.
“Subdiscipline” refers to the specific electrical engineering field,
such as microelectronics, power, or telecommunication. There
are three primary sectors that hire electrical engineers; these
are private industry, government, and academia (in order of the
number of annual hires), and each has unique benefits. Salaries
tend to be highest in private industry, while government
positions generally offer the greatest job security, and
engineers working in academic institutions enjoy significant
independence in choosing research topics.

Each sector offers different types of job titles. Private industry


has a great variety, including:
• Research and development: Develop prototypes of new
devices and technologies;
• Production: Optimize manufacturing processes to
reduce cost;
• Sales: Work as part of a team to sell a technological
solution to a client;
• Project Management: Manage teams of engineers and
other specialists as they solve problems too broad in
scope for a single engineer; and
• Consulting: Help other companies solve technological
problems, often involving production and project
management.

26 Programming for Electrical Engineers


Government jobs often involve:
• Project Management: Oversee private industries as they
perform government contract work; and
• Testing: Determine if products meet safety and health
requirements, which can be difficult to ascertain when the
technology under review is novel.

Academic positions typically include:


• Research and Development: Often with a longer time hori-
zon to implementation than R&D positions in private indus-
try; and
• Teaching: Both undergraduate and graduate students.

Any employment sector can be involved with any of the main


subdisciplines of Electrical Engineering. Major EE subdisciplines
include:
• Microelectronics: Fabrication of extremely small integrated
circuits;
• Power: Generation and transmission of large amounts of
electrical power over long distances;
• Controls: Use programmable logic or microcontrollers to
precisely control motion or heat;
• Instrumentation: Design systems that measure electrical
quantities or pressure, flow, and temperature;
• Telecommunications: Build systems that transmit data by
wire, optical fiber, or radio wave; and
• Computer Engineering: Design of computers and associated
hardware.

Chapter 1: Introduction to matlab 27


COMMAND REVIEW

Basic Math Operations


+ - * / ^   * means multiply. No implied multiplication
sqrt()   square root
log()   natural log
log10()   log base 10
exp()   natural exponent 

Predefined Constants and Notation


i, j   sqrt(-1), can be used, for instance, as 3 + j*7;
pi  π 

Formatting Numbers
68e-12  type of scientific notation, here representing 68 × 10−12
format long  shows all significant digits (about 16)
format short  shows about four significant digits of answer 

Saving and Loading Data


save('x.txt', 'x', '-ascii')  saves variable x in an ascii-readable
file x.txt
save('x.mat','x')  saves variable x in a compressed file called x.mat
load('x.txt')  loads the variable in x.txt back into variable x 

Trigonometric Functions
cos(), sin(), tan()  cosine, sine, and tangent functions given an argu-
ment in radians
acos(), asin(), atan()  inverse functions of the above, returning an
answer in radians
cosd(), sind(), tand()  cosine, sine, and tangent functions given an
argument in degrees
acosd(), asind(), atand()  inverse functions of the above, returning
an answer in degrees 

28 Programming for Electrical Engineers


Vector Functions
[2 4 -6]  creates a vector with components 2, 4, and −6
12:3:24  shorthand for [12  15  18  21  24]. The middle increment number
may be negative; 10:-1:0 counts down from 10 to 0
rand(1,17)  a vector of 17 random numbers, each independently ranging
from [0 1) 

Plots
plot(x,y)  plots the set of lines whose horizontal positions are in vector x
and whose vertical positions are in vector y 

Keyboard Shortcuts
↑  (up arrow) recall last command
↑↑  recall second to last command, etc. 

Chapter 1: Introduction to matlab 29


LAB PROBLEMS

These problems require more thought than the embedded Practice Prob-
lems that were designed to check general comprehension. For each question
record the matlab command if there is a © next to the problem, and the matlab
result if there is a  next to the problem. Example of a question and answer with
both a © requirement:

Use matlab to evaluate 4 + 5©
6
Question:
Answer: Command: 4+(5^(1/6))
Result: 5.3077

1. Computers use sets of binary digits, or bits, to represent information. A


bit can be 0 or 1, so a single bit can store two unique states. Two bits can
store four states, namely 00, 01, 10, or 11. Many microprocessors store
information in sets of 8 bits, called a byte. How many unique states can be
represented in a byte? Hint: it is much more than 16. Most modern desktop
computers store information in sets of 64 bits, called a 64-bit word. How
many unique states can that represent? ©

2. A common circuit analyzed in future courses is the voltage divider, which is


associated with the equation:

Vs R1
V1 =
R1 + R2
a.  se matlab to define variables Vs, R1, and R2 equal to 12  V, 68  Ω, and
U
12 Ω, respectively. Calculate V1. Hint: Do not use dimensions such as
Volts and Ω in matlab, but remember to write them in your result. ©
b. Repeat the above calculation but with R1 = 13 Ω. Notice how defining
variables can make recalculation easier. ©
3. Modern music synthesizer design leans heavily on signal processing
theory. The note called A4 has a frequency of 440 Hz (cycles per

12
second). Each “semitone” above it is 2 times higher in frequency than
the note before it. For example, one semitone higher than A4 has a

12
frequency of 440 2 Hz , and two semitones higher has a frequency of

30 Programming for Electrical Engineers


√ √ ( √ )2
12 12 12
440 2 2 = 440 2 = 493.9 Hz. Use matlab to calculate the frequency of
the note 7 semitones higher than A4 (musicians would call that note E5). ©
√ √
4.  3 + 4 Hint: read the shaded “Recall” box on page 17. ©
3

5. Use matlab to determine what famous irrational number, used frequently in


signal processing, that this continued fraction is approximating: ©
1
3+
1
7 + 16

6. One way to approximate the irrational number e frequently encountered in


control theory is by the following equation:
( )n
1
lim 1 +
n→∞ n

a)  sing matlab’s vector functions, evaluate this equation for n = 100, 1000,
U
and 10,000 using the variable n. The first command should be n = [100
1000 10000]. Complete the problem using one additional command
using vectors. Hint: Remember the “dot” notation with vectors. ©
b) Find the % error = (approximate−exact)/exact x 100% for n = 100, 1000,
and 10,000. Remember the exponential function is exp(). Do this in a single
command using vectors. Notice how using variables simplifies the work. ©

7. Using matlab, find the total charge that flows through a circuit with a 2.5 A
current source that has been turned on for 45 seconds. (Remember to give
units in your answer!) ©

8. AA standard alkaline AA batteries can deliver 0.02 A of current to power an


LED light for 120 hours (surprising, but true!). How much charge circulates
through the battery in this time? Remember: the current/time relationship
on page 6 assumes time is measured in seconds. ©

9. An electric car motor draws 720 A from a 350 V battery when under full load.
Use matlab to determine:
a) What is the equivalent resistance of the motor? ©
b) How much charge flows through the motor in 2 minutes? Be careful of
time units. ©

Chapter 1: Introduction to matlab 31


10. Current flowing through a circuit linearly drops over time from a maximum
of 2.7 A when it is first turned on to 0 A 10 seconds later. How much charge
has flowed through the circuit during those 10 seconds? Draw a diagram of
current versus time first, and then use matlab to calculate the answer. ©

11. If you cut a wire and separate the ends in the schematic below, all current stops
flowing. What is the equivalent of cutting the wire in the pipe analogy? Hint: it
is not just cutting the pipe because then water would flow everywhere.

12. A 120  V voltage source is connected across a resistor and 6.8 A of current
flows. Use matlab to compute the value of the resistor. ©

13. A 12 Ω resistor is connected to a 14  V source. Use matlab to compute how


much charge flows through the resistor after 2 seconds. Hint: you will need
two formulae. ©

14. A student learning matlab attempts to solve an Ohm’s Law problem for the
voltage caused when I = 2.3 ∙ 10−6 A flows through an R = 45 Ω resistor by
typing the following three lines:
 I = 2.3ee-6;
 R = 4500 Ohms;
 V = IR
Unfortunately, there is one mistake in every one of the student’s three
lines, and semicolons are not one of them. Rewrite each of the three lines
correctly and then use matlab to calculate the answer. ©

15. A 1/8 W slow-blow fuse is rated to blow (open) if ¼ A flows through it for
15 seconds, or ½ A flows through it for 3 seconds, or ¾ A flows through it
for 1/8 second. Write the matlab vector expression that calculates the total
charge that flows through the fuse before it blows in each of these three
scenarios. Use a vector for the currents, a vector for the times, and perform
the calculation using a single vector calculation, not three separate ones. ©

32 Programming for Electrical Engineers


16. Engineers use some unusual numbers; e and π are both irrational numbers
(about 2.71 and 3.14, respectively), and the imaginary number j = √ -1 is so
unusual that even its discoverer, Euler, said it was merely a mathematical
curiosity of no practical use. But they combine in a surprising way that
later courses will put to good use. Use matlab to evaluate: ej2π and write
in the simplest possible form. Hint: it is surprisingly neither complex nor
irrational. ©

17. Imaginary numbers are commonly used in electrical engineering. Find the
result of the following expression using matlab. ©
j6 √7 √28
4 + j5 4 − j5

18. The amount of power that can be dissipated by a typical carbon-film


resistor of length L and diameter D in the figure below is given by the
following equation:

P = k πD2 + 2π (L − D)

where L and D are in mm, and P is in Watts.


a) Use matlab to find k if D = 2.5 mm and L = 6.5 mm for a 1/4W resistor. ©
b) Use a single matlab vector command to compute the power rating of
three resistor sizes, all with D = 5 mm and with L = 13, 17, and 25 mm,
using the value of k calculated above. ©
16 ½
19. A student learning matlab tries to evaluate by typing the following:
2
16 ^ 1 / 2 / 2
However, this command returns 4, an incorrect answer. What should he
have typed, and what is the correct answer? ©

20. Use matlab to find the cosine of π/6 radians. ©

21. Use matlab to evaluate the cosine of 60º. ©

22. Use matlab to calculate 23 cos(38.5º). ©

Chapter 1: Introduction to matlab 33


23. Johnson noise is a type of electrical noise generated in all resistors by
internal thermal fluctuations. Although relatively small, it can be noticeable
when measuring very small voltages, especially over large-value resistors in
hot environments. It is calculated using the following equation:

v2n = 4 kB · T · R
where
v2n is the power of the Johnson noise per Hz bandwidth and is
measured in units of V2/Hz
kB = 1.38∙10−23 Joules/Kelvin
T = temperature in Kelvin
R = resistor value in Ohms
Use matlab to find the v2n for a 620 Ω resistor at temperatures from 275°K
to 300°K in 5°K increments. Do this using vectors so it can be done with
a single command. The answers should be very, very small (less than
billionths of a V2/Hz). ©

24. Create matlab variables: R1 = 22, R2 = 47, and R3 = 68 and then evaluate the
following expression, which calculates the equivalent resistance of all three
resistors in parallel: ©
1
1 + 1 + 1
R1 R2 R3

25. Evaluate the complex expression shown below. The vertical lines enclosing
the complex expression indicate that the magnitude of the complex
expression is taken; this will result in a real number. To do this you will need
to read the help for the abs() command. ©
j26
20 − j26

26. A student attempts to solve the equation R1√5 for R1 = 36 Ω with the
following matlab code:
R1 = 36;
1answer = R1*Sqrt [5]
There are three errors in the code. Write down the corrected code and then
use matlab to compute the correct answer. ©

34 Programming for Electrical Engineers


27. Use Ohm’s Law, matlab, and your knowledge of algebra to find the
resistance between two dry fingers of one hand if, when 22∙10−6 A of current
is forced to flow in one fingertip and out the other (well below the ability of
a person to sense it), 0.62 V is measured between the finger tips. ©

28. A student attempts to calculate 4 cos(36º) using the following expression:


ans1 = 4 cos [36]
There are three errors in this expression. Write the correct expression
and the correct answer. Hint: the answer should be between 3 and 4; if
your answer is negative, reread the section titled Trig Functions and Their
Inverses. ©
29. Create a plot with the x axis extending from 1 to 50 of 50 random numbers.
Each of the 50 numbers should be between 0 and 1. Hint: you need an
x vector that counts from 1 to 50, and a y vector that has the random
numbers. Show the commands you used to make them (do not waste
paper showing the contents of the vectors) and include the plot. ©
30. Plot the first letter of your last name. If you are working in a lab group, choose
one of your lab partners. It may be very rough; if your last name begins with
“S,” for example, a jagged reversed “Z” shape is fine, for instance, as long as it
is recognizable. Some letters may be difficult to see because they fall on the
axis boundaries; that is fine for now. You will learn in Chapter 3 how to create
a margin around the plot area using the axis() command.  

Chapter 1: Introduction to matlab 35


matlab AS A CALCULATOR
2
OBJECTIVES

After completing this chapter, you will be able to use matlab as an advanced
calculator to perform these operations:
• Round and separate a number into its integer and fractional components
• Build and manipulate vectors
• Perform vector mathematics
• Work with complex numbers (Signals and Systems)
• Change rectangular to polar complex number formats (Circuit Analysis)
• Work with strings
• Build and manipulate matrices
• Solve large simultaneous equations (Circuit Analysis)

Programming for Electrical Engineers 37


ROUNDING AND SEPARATING NUMBERS

round () Rounds a given number to its nearest whole integer.


For example, round (3.4) returns 3

floor () Returns the integer component of a number without rounding.


For example, floor (−2.7) returns -2

To find the fractional component of a number you can


subtract the integer portion of the number from it.
For example, 3.7 – floor (3.7) returns 0.7

VECTORS

A vector is simply a list of numbers, e.g., [3, −2.4, π, √3, 7−j2]. It can hold any
amount of numbers, including the special cases of 0 or 1 length. A 0-length
­vector is called a null or empty vector and holds nothing. A vector of length 1 is
simply a number, also known as a scalar.

All STEM disciplines use vectors. A vector of length 4 may be a point in


four-dimensional space to a mathematician, a description of a unique event in
spacetime to a physicist, a set of voltages at four nodes to an electrical engineer,
or a patient’s four most recent blood pressure readings to a physician. Regard-
less of the application, it can be useful to “bundle up” the component numbers
into a single list. 

CREATING VECTORS

There are several different methods for creating vectors in matlab:


• Defining components explicitly
• Filling with duplicate values
• Filling with linearly spaced values
• Filling with exponentially spaced values
• Filling with random values

38 Programming for Electrical Engineers


Defining Components Explicitly

Vectors can name each component in the list explicitly by placing them inside
square brackets. For example, [3 -2.4 pi sqrt(3) 7-2*j]

NOTE
matlaballows embedded constants such as pi, expressions
such as sqrt(3), and complex values such as 7-j*2.

 Filling with Duplicate Values

Entering duplicate values like [3 3 3 3] works for just a few values, but it would
be too time-consuming to use this method to create a vector of 1000 identical
numbers. Instead, use these commands:

zeros(1,5) Creates a vector of five zeros and is the same as typing


[0 0 0 0 0]

ones(1,12) Creates a vector of 12 ones and is the same as typing


[1 1 1 1 1 1 1 1 1 1 1 1]

NOTE
matlabpermits multiplication of a scalar with a vector. When
used in combination with ones(), this lets one fill a vector
with duplicates of any number.
In the following examples,
4*ones(1,5) is the same as [4 4 4 4 4] and
-pi*ones(1,2) is the same as [-3.14159 -3.14159]

Chapter 2: matlab as a Calculator 39


 Filling with Linearly Spaced Values

There are two ways to fill a vector with linearly spaced values (e.g., [1 2 3 4]),
depending on whether you know the increment between numbers or the
total number of values you need. If you know the increment use the : operator
[start:increment:end]. For example,
0:0.5:3 is the same as [0 0.5 1 1.5 2 2.5 3]

You can decrement using a negative increment. For example,


3:-1:0 gives the countdown equivalent to [3 2 1 0]

You can increment by 1 using this shortcut: [start:end]. For example,


-2:2 is the same as -2:1:2, which yields [-2 -1  0 1 2]

If you do not know the increment, but know the total number of values, use
linspace, e.g., linspace(start, end, number_of_values).
For example,
linspace(0,3,7)returns [0 0.5 1 1.5 2 2.5 3]

linspace() can also decrement if the end value is less than the start value.
For example,
linspace(10,0,5)returns [10 7.5 5 2.5 0] 

Filling with Exponentially Spaced Values

ECE problems often require a list of numbers to be spaced exponentially to fill a


broad range (e.g., all frequencies from 1Hz to 1MHz). matlab calls the command
to exponentially space values logspace. To exponentially space 75 numbers
from 100 to 100,000 (102  to 105), the command is:
logspace(2,5,75)

To space five numbers between 100=1 and 104=10,000, type:


logspace(0,4,5) which returns [1 10 100  1000 10000]

In general, to create N exponentially spaced numbers from 10a to 10b, type:


logspace(a,b,N)

40 Programming for Electrical Engineers


NOTE:
logspace (a,b,N) spaces the numbers from 10a to 10b, rather
than between a and b, as linspace does.

 Filling with Random Values

You have already been introduced to random number generation in Chapter 1.


It is common to need random numbers in electrical engineering problems, such
as when you need to simulate the effects of random variances of resistor values.

v = rand(1,10) Creates a vector v filled with 10 random real


numbers between 0 and 1. The first number, 1,
directs the rand()command to create a vector.
The second number is the number of random
values to be made on the interval [0, 1),
i.e. 0 to just under 1.

10*rand(1,20)-5 Creates a vector with 20 random numbers, each


between −5 and 5.

DIGGING DEEPER
The numbers produced by the matlab random generator
are not truly random—they are pseudorandom, since
they are generated deterministically by an algorithm.
This algorithm uses a seed number to generate its initial pseudorandom
value; each successive pseudorandom number then seeds the next value
generated. When matlab launches, it initializes its seed according to the
current date and time, measured in hundredths of a second, so it always
appears to generate a new sequence of random numbers.

Chapter 2: matlab as a Calculator 41


PRACTICE PROBLEM

Write the matlab commands to generate the following vectors


(do not write the output):
1. Filled with 25 values all equal to 1. ©
2. Filled with 25 values all equal to π. ©
3. Filled with 10 numbers evenly spaced from 10 to 20. ©
4. Filled with 10 random numbers between −0.5 and + 0.5. ©
5. Filled with the following 3 numbers: 0, 2π, and 4. ©
6. Filled with as many numbers as it takes to span 5.125 to 17.5
in increments of 0.125. ©
7. Filled with 20 numbers, exponentially spaced from 1 to 1000.
Hint: Does the answer look strange? For arrays with large
numbers, matlab often writes them all as smaller numbers,
with one large constant in front written in scientific notation
multiplying them all. ©

TECH TIP: MEASURING RESISTANCE

In the last chapter, you learned to measure voltages with a


digital multimeter (DMM) by setting the mode to voltage,
limiting the range to the smallest that did not cause an out-
of-range error, and then placing the black probe in the COM
jack and the red probe in the shared voltage/resistance jack.
Measuring resistance uses the same approach as setting the
range and uses the same probe jacks, but now the mode
selector is set to resistance (abbreviated with the unit Ω).

42 Programming for Electrical Engineers


Modern multimeters typically measure from 1 Ω up to 1 MΩ
(a million Ohms) or more. The size of that span is amazing—it is
like a kilometer-long ruler marked in millimeters!
The exact value of a resistor is guaranteed to be within a
percentage of its marked value. This percentage is called a
tolerance; common ones are 1% and 5%. Since it does not make
sense to stock resistors in increments of 1% if their tolerance is
only guaranteed to the nearest 5%, resistor values are available
in standardized sets of values in increments approximately
equal to their tolerance. For example, the first few 5% tolerance
resistors values (omitting their Ω units) are 1.0, 1.1, 1.2, 1.3, 1.5,
1.6, 1.8, 2.0, 2.2, 2.4, 2.7, 3.0, 3.3, 3.6, 3.9, 4.3, 4.7, 5.1, 5.6, 6.2,
6.8, 7.5, 8.2, 9.1, and so on in multiples of powers of 10 of these
values (e.g., the next values are
10, 11, 12, 13, 15…., 100, 110, 120,
130, 150…). matlab could easily store
these data as a single vector. Since
these are close to but not exactly
5% increments, you would simply
manually enter the first 24 values
(from 1.0 to 9.1) into a matlab vector.
You could multiply that vector by
the scalar 10 to find the next set of
resistors from 10 to 91. In this
chapter, you will learn how to
concatenate these two vectors to
create a vector with all the resistor
values from 1 to 91 Ω.

Chapter 2: matlab as a Calculator 43


 WORKING WITH VECTORS

matlaboffers several methods for working with vectors. The examples below
assume the vector is stored in variable v

Viewing a Vector

To view a vector, type the variable that stores the vector. For example,
v 

Not Viewing a Vector

When a vector is created in matlab, the result is echoed to the screen by default.
This can be a problem if you are creating a vector with several thousand ­elements.
To suppress the echoing, end the command with a semicolon, e.g.,
 v = ones(1,1000);

NOTE
Remember that typing a semicolon at the end will keep
matlab from printing all 1000 numbers when you create

the vector v.

 Vector Length

length(v) Returns the number of elements in a vector.


For example, length([7 6 1]) returns 3
N = length(y) Sets variable N to the number of data points present in y

44 Programming for Electrical Engineers


Accessing and Changing Values in Vectors

matlab handles vectors differently from other programming languages in two


important ways:
• It indexes vectors starting from 1, not 0. The first value in vector v is
found at the first index. Most computer languages say the first value is
at index 0.
• m atlab uses parentheses ( ), not square brackets [ ], to index vectors.

Thus, the matlab command to read the fourth value in vector v and set variable
x equal to it is:
 x = v(4)
To set the second value in vector v to π, type:
 v(2) = pi

You can retrieve multiple values at once by providing not a single index, but a
vector of indices. For example, to retrieve the third through seventh values of
v = 11:21, type:
v(3:7)
This will return the vector [13 14 15 16 17]. Do you see why? The 3:7 created a
vector of indices, and that vector was used as an index to retrieve those values
of v. You can also set multiple values at once by using vectors both to index your
main vector and to set those values. For example, you can type:
 v(3:5) = [1 pi sqrt(2)]
This sets v(3) to 1, v(4) to π, and v(5) to √2. 

Using the End Operator

To specify the first elements (say, the first five elements) of a vector v, you might
type this notation:
v(1:5)

Chapter 2: matlab as a Calculator 45


But how can you specify the elements from the third through the last? You could
find the value of the last element using length(v), and use this to build up
the command:
v(3:length(v))
matlab provides a shortcut for this operation: the end operator, indicating the
last value of the vector. To use the end operator, simply type:
v(3:end)
Similarly, the last five elements can be extracted or set using the command:
 x = v(end-4:end) to extract, or:
 v(end-4:end)=[1 2 3 4] to set. 

Removing Elements in Vectors

What does “removing an element” in a vector mean? We already know how to set
it to zero; for example, setting the first element in vector v = [1 2 3] to 0 can be
done with the following command:
 v(1) = 0;

To fully remove the value means to shorten the length of the vector, and this
is accomplished by setting the value equal to[], the null vector. In the above
example, typing
v(1) = [] changes vector v from [1 2 3] to [2 3].
Now length(v) returns 2. 

Building Vectors from Other Vectors

Vectors can be assembled from other vectors and scalars. If x  =  [1 2 3] and


y = [6 7 8], then typing
 z = [x 7.5 y]
will create vector z with the components [1 2 3 7.5 6 7 8]. 

46 Programming for Electrical Engineers


Inserting Elements in Vectors

To insert a 5 at the start of vector v = [1 2 3], type the command:


 v = [5 v]
You will find that vector v now holds [5 1 2 3].

To insert a 7 at the end of vector v = [1 2 3], type the command:


 v = [v 7]
Vector v now holds [1 2 3 7].

To insert a 5 into the middle of vector v = [1 2 3 4], type the command:
 v = [v(1:2) 5 v(3:4)]
While this command may seem like a syntactic mouthful, it follows from the pre-
ceding steps. v(1:2) returns the first two elements of v, v(3:4) returns the last two
elements of v, and those with the middle inserted value of 5 are all assembled
into a new vector, assigned to v. It could have been assigned to a new vector
called x if the original vector v was needed in other calculations.

PRACTICE PROBLEMS
Given x=20:30, write the matlab commands to
8. Find out how many numbers vector x holds. ©
9. Display the contents of x. ©
10. Retrieve the second value of the x vector. ©
11. Set vector y to equal the second through fifth elements of x. ©
12. Set vector y = x but with a 1 inserted into the front and end
of vector x. That is, y = [1 20 21 22 … 29 30 1], but create y
using the x vector. ©

Chapter 2: matlab as a Calculator 47


PRO TIP: BUYING A DIGITAL MULTIMETER (DMM)

The digital multimeter is an important tool for practicing


electrical engineers, and one you will use frequently. Unlike
relatively expensive oscilloscopes, a good DMM costs relatively
little and will last a long time. If you decide to purchase your
own DMM, look for the following features (in addition to the
resistance and AC/DC voltage and current measuring that all
DMMs should have):
• Sound continuity (buzzes when the probes are connected
so you can check for shorts and opens while looking at your
work—very helpful for debugging!)
• Diode checking
• Capacitance measuring
• Frequency measurement (optional)

Other features are more expensive, and you are less likely to
need them as you start out. These features include
• True RMS measurement
• NIST-traceable calibration
• Go/no-go testing
• Bargraph displays

Name brand instruments like Fluke tend to


be very rugged and accurate, but they also
cost more. One brand used by the authors,
shown here, is about 5 years old. Instruments
with similar capabilities now cost less than a
high-end student engineering calculator.

48 Programming for Electrical Engineers


COMPLEX NUMBERS

Although mathematicians use the variable i to represent √ −1 , electrical engi-


neers use j since i is reserved for current (from a French word for intensity).
matlab accepts both i and j variables to represent imaginary numbers. This text
will follow the EE convention of using j.

A complex number like 4 + j3 is composed of both real and imaginary parts, and
it is often drawn on the complex plane, shown below:

There are three common ways of writing complex numbers: rectangular, polar,
and complex exponential.

DIGGING DEEPER
Since a positive multiplied by a positive is positive and a
negative multiplied by a negative is also positive, it is not
possible to find two real numbers that when multiplied
together make a negative number. We therefore must
define √ −1 as something that is not real; we call it j so that j2 = −1. It
is ironic that one of history’s great mathematicians, Euler, discovered
several important relationships involving complex numbers, including the
famous Euler’s Identity of ejθ = cos(θ) + j sin(θ), but ultimately dismissed
them, saying they were mathematical curiosities of ultimately no
practical significance. Now they are used throughout signal processing,
communication theory, and control theory.

Chapter 2: matlab as a Calculator 49


Rectangular

This may be the most familiar to you. The complex number z in the diagram
(above) is written as the sum of its real part and its imaginary part, or z = 4 + j3.
Mathematicians would write the same number as 4 + 3i; electrical engineers
place the j in front of its coefficient for emphasis. Notice that complex variables
are bolded. 

Polar

The same complex number z can also be written as its magnitude, or dis-
tance away from the origin, and the angle that a line drawn from the origin to
the complex number z makes with respect to the positive horizontal axis.
See the diagram (opposite) for a graphical example of z = 5∠ 37˚, or 5∠0.64
radians. Note that this represents the same number as 4+j3, expressed in
rectangular coordinates. 

Complex Exponential

Euler’s Identity paved the way for a third representation of complex numbers,
closely related to polar, but which is actually a function that can be evaluated.
Using the above example z = 5ej37°, or z = 5ej0.64 in radians. Note the similarity to
this and the polar form. 

Entering Complex Numbers in matlab

matlab uses rectangular notation to enter and display complex numbers. Thus,
to create a complex number like 4 + j3 in matlab, recall that implied multiplica-
tion is not supported and instead type the expression:
 z = 4 + j*3 

50 Programming for Electrical Engineers


Real and Imaginary Parts

The real part of a complex number can be isolated by typing


real(z)
Similarly, the imaginary part of a complex number can be isolated using
imag(z) 

Converting from Rectangular to Polar Form

Polar form is written with a magnitude and angle. matlab cannot write the entire
number z in polar form, but it can extract the magnitude and angle components.
The magnitude of a complex number z can be found by typing
abs(z)
The angle in radians is
angle(z)
Convert to find the angle in degrees by multiplying by 180/π:
angle(z)*180/pi
Once the magnitude and angle components are found, the number can be
handwritten in polar notation using the format magnitude ∠ angle or magnitude
∠ angle° if in degrees, e.g., 5∠37°. 

Converting from Polar to Rectangular Form

You can use trigonometry and the complex plane diagram (shown earlier in this
chapter) to derive the following equations that convert polar to rectangular
form, allowing you to enter polar-notated numbers into matlab.

Given the following complex number in polar form, z = mag ∠ ang, enter it in
matlab as follows:
 z = mag*cos(ang) + j*mag*sin(ang)
if the angle ang is in radians, or
 z = mag*cosd(ang) + j*mag*sind(ang)
if the angle ang is in degrees. 

Chapter 2: matlab as a Calculator 51


Converting to and from Complex Exponential Form

It is possible to convert a complex number in exponential form like z = mag ejθ


with θ in radians into rectangular form simply by entering it into matlab, since
matlab always displays complex numbers in rectangular form. For example, 3ejπ
can be directly entered as
 z = 3*exp(j*pi);
If the angle is given in degrees, it can be converted into radians by multiplying
by π/180. For example, 7ej22° can be entered as

z = 7*exp(j*22*pi/180);

To convert a number in complex rectangular form to complex exponential form,


first convert it to polar form as described previously, and then write the magni-
tude and angle components in this form:
z = mag ejθ
For example, let z = 4 + j3. Converted to polar notation, this is 5∠0.64, which in
complex exponential notation is then written as 5ej0.64.

NOTE
Need characters like ∠, π, and Ω in Microsoft Word?
Find them all using Insert → Symbol using the Symbol
font (important for ∠). Want to write them faster? Try
File → Options → Proofing → Autocorrect → Autocorrect
Options → Math Autocorrect → Check the “Use Math Autocorrect
Outside of Math Regions” option. Then in your document, type \angle
to get ∠, \pi to get π, and \Omega to get Ω. Note that these commands
will only work in the desktop version of MS Word, not the online version.

52 Programming for Electrical Engineers


PRACTICE PROBLEMS
13. Write the complex number z = 5+j12 in polar form with
the angle in degrees. ©
14. Write the same complex number z = 5+j12 in complex
exponential form with the angle in radians. ©
15. Use matlab to convert 14∠45° into rectangular form. ©

VECTOR MATHEMATICS

Many functions take both scalar and vector arguments, and with one important
difference, these work as you would expect: functions that take a single argu-
ment, like cos(), operate on each element of the vector independently. Opera-
tors that take two vectors, like +, operate on respective elements of each vector.
For instance, if x = [2 4 7], then cos(x) returns a vector of all three cosines
and x + x returns [4 8 14]. Other functions that you have used that take
vector arguments include addition, subtraction, sqrt(), exp(), and all the
trigonometric functions like sin().

Vector mathematics using the four basic operations of addition, subtraction,


multiplication, and division have some special behaviors. Addition and subtrac-
tion only operate on respective elements: [5 3]–[1 2] = [4 1]. Multi-
plication and division between two vectors do not use the standard * and
/operators. For reasons described in linear algebra courses, multiplying two
row vectors like [5 3]*[1 2] will generate an error message. To multiply
or divide respective elements, prefix the multiplication or division sign with a
dot. For example, [5 3].*[1 2]will work, as will [4 8]./[2 4], yielding
[5 6] and [2 2], respectively.

Chapter 2: matlab as a Calculator 53


All four basic operators work when one argument is a scalar and one is a vector.
For example,
 [2 4 9] - 1
returns
[1 3 8], just as
[2 4 9] – [1 1 1] does.
[2 8 16]/2 is the same as
 [2 8 16]./[2 2 2]
both of which yield
 [1 4 8]

PRACTICE PROBLEMS
16. Given x = [4 2 6], write the matlab command to add 5
to each element. ©
17. Given x = [4 2 6] and y = [2 4 8], write the matlab
command to multiply corresponding elements together. If
matlab returns an error, reread the earlier bolded section. ©

 STRINGS

Although strings are not strictly a calculator-like function, matlab treats strings
as vectors of characters.

To enter a string, enclose it in single quotation marks, as follows:


 s1 = 'Hello, there!';

To concatenate strings, or set/retrieve individual letters or substrings, use the


same commands as if working with numeric vectors. For example,

• To retrieve the second letter of s1 defined above, an “e,” type:


s1(2)

54 Programming for Electrical Engineers


• To return the first word “Hello” in the string, type:
s1(1:5)
• To insert the word “Laura” before the exclamation point, use the command
 [ s1(1:12) ' Laura' s1(13)]
• To delete everything except the word “Hello,” type:
 s1(6:14) = [];

Converting Between String Representations of Numbers and Actual Numbers

One could define a string representing a number like


 string2 = '521';
While string2 looks like a number, it is a string, which is really a vector of char-
acters. This is apparent by adding 0 to it, like this
 string2 + 0
Instead of returning 521, it returns the vector [53 50 49] which are the ASCII
numbers representing the characters ['5' '2' '1'].

To convert a string representation of a number into the number, use str2num:


 str2num('521') + 3
now returns the number 524 as expected.

PRACTICE PROBLEMS
18. If str = 'R1 = 47 ohms', write the matlab command
that isolates the number 47 from the string, converts it into
a number, and stores it in variable R1. ©

Chapter 2: matlab as a Calculator 55


TECH TIP: RESISTORS IN SERIES AND PARALLEL

The most common electronic circuit component is the resistor.


Our analogy in the Chapter 1 Tech Tip on page 11 likened
resistors to a restriction in a pipe that limits the flow of water
(current) when driven by a constant pressure (voltage). Two
resistors of resistance R1 and R2 can be connected in series or
parallel to create a new equivalent resistance, as shown below:

Equivalent
Two resistors Water analogy
resistance
R1 R2 R1+R2 R1 R2
Series

R1 R1
R1.R2
Parallel R2 R1+R2
R2

It is important for EE students to develop their intuition so that the


mathematical equations become obvious. Using the water analogy,
think of two resistors in series as two restrictions in series, as shown
above. A pump (voltage source) must push water (current) through
the first, and then through the second, so it follows that the
equivalent resistance is the sum of the two individual resistances,
or R1 + R2. The water analogy for two resistors in parallel shows that
adding a second resistor increases the number of paths that water
can flow, so it decreases resistance, much as opening a second
adjacent door will decrease resistance to traffic flow. The equivalent
resistance of two resistors in parallel is
R1 × R2
R1 + R2
This formula is often memorized as “product over sum” and will
always return an equivalent resistance lower than either of the
resistors that comprise it.

56 Programming for Electrical Engineers


PRACTICE PROBLEMS
19. Write the matlab command that, given variables R6 = 60 and
R7 = 120, computes their values in parallel. Use the variables R6
and R7 in your matlab command, not the numbers they hold
(for example, in series, the matlab command is R6 + R7). ©

MATRICES

Thus far, the vectors discussed in this chapter have been either a single column
or row of numbers. A matrix is a collection of both rows and columns of num-
bers, e.g.,
2 − 4 1.7
42 √2 0
The dimensions of the matrix indicate how many rows and columns it has, with
the number of rows listed first, followed by the number of columns. Thus, the
2-row × 3-column matrix above is a 2×3 matrix. Matrices are used in digital signal
processing to hold streams of data, where the data streams can be very large.
For example, a 100-second song recorded at the CD-quality of 44,000 samples/
second can be represented as a 2-column × 4,400,000-row matrix. The columns
­represent the left and right channels of the signal, and each row represents a
sample, i.e., a snapshot in time of the voltage to be applied to a speaker.

Special Matrix Dimensions

If a matrix has a single row, such as 1x5, it is called a row vector. The vectors
discussed earlier in this chapter are examples of row vectors. A matrix may also
have a single column, like 5x1. These are called column vectors. Matrices may
also have a single row and column; these matrices are scalars, or “regular” num-
bers. Matrices may even be null, meaning they have zero rows and columns;
then they hold nothing. 

Chapter 2: matlab as a Calculator 57


CREATING MATRICES

As with creating vectors, there are several different ways to create matrices:
• Defining components explicitly
• Filling with duplicate values
• Filling with vectors
• Filling with random values

Defining Components Explicitly


2 −3
To create the matrix x =
1 0
type the following in matlab:
 x = [2 -3; 1 0]
Compare that with how you earlier defined the top row vector y = [2  -3];
expressed as follows:
 y = [2 -3]
The semicolon operator ; separates rows when used inside a matrix definition.
Note that square brackets [] are used to define matrices and vectors.

RECALL
The semicolon has another purpose besides separating matrix
rows; when placed at the end of a line, it prevents matlab from
displaying the calculation results.

 Filling with Duplicate Values

The zeros()and ones()commands can work to create matrices, as well as


vectors as described previously.

zeros(2,4) Creates a matrix filled with 2 rows of 4 zeros and is


equivalent to typing:
[0 0 0 0; 0 0 0 0]

58 Programming for Electrical Engineers


ones(3,5) Creates a matrix filled with 3 rows of 5 ones and is
equivalent to typing:
[1 1 1 1 1; 1 1 1 1 1; 1 1 1 1 1]

To create a 20 x 30 matrix called big filled with 7’s, use the fact that matlab
understands multiplying a matrix by a scalar, like so:
 big = 7 * ones(20,30);
The semicolon at the end of this command is useful; without the semicolon, the
screen would fill with the 600 copies of the number 7 that it generates.

NOTE
Notice the link between these matrix definitions and vectors
you earlier defined. When you created a vector of five
repeating 1’s by using ones (1,5), you were actually creating a
matrix of one row and five columns.

 Filling with Vectors

Vectors can be combined to form matrices. Earlier we described how to concat-


enate vectors x = [1 2 3] and y = [4 5 6] into one long row vector z by
typing z = [x y]. Using the semicolon instead of a space, i.e., z = [x; y],
will create the matrix
1 2 3
z =  , just as typing z = [1 2 3; 4 5 6] would. 
4 5 6

Filling with Random Values

Matrices filled with random numbers between 0 and 1 may be created using the
rand()function. For instance, to generate a matrix called mrand of three rows
and three columns, filled with nine numbers varying between −1 and +1, type
the following:
 mrand = 2*rand(3,3) – 1;

Chapter 2: matlab as a Calculator 59


PRACTICE PROBLEMS
Write the matlab commands to generate the following matrices:
20. Matrix with the first row containing −2 and 3, and the
second row containing 100 and 0. ©
21. Matrix of 3 rows and 5 columns filled with 0’s. ©
22. Column matrix of 10 rows and 1 column filled with 2’s. ©
23. Assume you have row vectors R1 and R2. You do not
know what the elements of R1 and R2 are, but you know
they are each different row vectors of length 8. Write the
commands to create a 2-row by 8-column matrix made
using R1 and R2. ©
24. Create a 100 row by 2 column matrix using the
predefined column vectors C1 and C2, where C1 and C2
are predefined to be column vectors of length 100. ©

CHANGING MATRIX VALUES

Accessing and Changing Values in Matrices

Matrices are addressed using rounded parentheses; always in row, column order;
and always using the convention that the row and column index counting begins
with 1. For example, if
−5 7 2.4
m = [-5 7 2.4; 8 0 9]  (x = )
8 0 9
then
 x = m(2,3)
will set the scalar variable x equal to 9.
m(2,3) = pi creates the following matrix:
−5 7 2.4
8 0 3.14159  

60 Programming for Electrical Engineers


Accessing and Changing Whole Rows and Columns

Much like if
v = [-2 -4 -6 -8 -10], then
v(2:4) returns
[-4 -6 -8], we can address parts of matrices using the colon : operator.
−5 7 2.4
x
Using the example matrix m from the previous section, where m = 
8 0 9
m(1:2, 1:2)
−5 7
returns the square matrix .
8 0
The colon operator is even more powerful than this. It can be used to specify an
entire row or column using the shortened form: m(:,:). For example, to set x
equal to the second row of m, type:
 x = m(2, :);
Now x = [8  0  9]
1
To set the first column of m to (note how a single column of a matrix is a col-
2
umn vector), type:
 m(:,1) = [1;2];

1 7 2. 4
Now m =  . 
2 0 9

Removing Elements in Matrices

Similar to vector manipulation, remove chunks of matrices by setting them


equal to the null matrix []. Note that you can delete any number of whole rows
or columns of a matrix, but unlike with vectors, it does not make sense to delete
a single value; then the matrix would not be square or rectangular. For example,
m(:,4) = [] deletes the fourth column
m(2:3,:)=[] deletes rows 2 and 3
m(:, 3:end)=[] deletes all columns except the first two
m([1:2:end,:])=[] deletes all odd-numbered rows

Chapter 2: matlab as a Calculator 61


PRACTICE PROBLEMS
Use the matrix m for these problems. You do not know what
the elements of m are, but you know it is a 2x2 matrix. Write the
matlab command to
25. Create variable x and set it equal to the second row,
second column value of m. ©
26. Set the second row, first column value of m to 0. ©
27. Remove the entire top row of m. ©
28. Replace the first column of m with random numbers
created using rand(). ©
29. Create a vector v equal to the last column of m. ©

PRO TIP: BUYING A CALCULATOR

Electrical engineers in industry have their own offices, and


typically perform computations using matlab. But for college
students, one of the most important tools is the portable
calculator. Unlike most majors, ECE students must have
calculators capable of handling complex matrices to solve
problems involving circuits driven by sinusoidal sources; the
TI-86 and below will not do this, including the TI-84. Do not be
mislead into purchasing an expensive instrument with many
specialized engineering programs built into it; these are rarely
useful. A TI-89, TI-91, or higher, or the newer TI-Nspire series
all work well. The Nspire’s document-centric nature is unique;
some students prefer it but many see it as an abstraction that
separates them from simply solving equations.

62 Programming for Electrical Engineers


WORKING WITH MATRICES

Matrix Size

Just as the length()command can be used to determine how many ­elements


are in a vector, the size()command returns how many rows and columns are
 
in a matrix. For example, if 4 3
 
x = [4 3; 2 -4; 5 7] (that is, x =   2 −4),
5 7
then the matrix dimensions can be found using
 [rows, cols] = size(x)
This sets the variable rows to 3 and cols to 2. Note how size() sets two vari-
ables at the same time. Since a vector is just a matrix with one row or column,
size()also works on vectors:
size([10 20 30 40 50])returns [1, 5] and
size([10; 20; 30; 40; 50])returns [5, 1]. 

Transpose

Transposing a real matrix interchanges rows for columns. Thus, the matrix on the
left 
in the example
 below
4 3
  4 2 5
 2 −4 becomes when transposed.
3 −4 7
5 7
The matlab command to do this is the apostrophe '. For example,
x = [4 3; 2 -4; 5 7]enters the matrix in the upper left, and
y = x' creates the matrix in the upper right.
This can also be used to change column vectors to row vectors and vice-versa.
For example, defining the column vector
 resistors = [10; 11; 12; 13; 15]

Chapter 2: matlab as a Calculator 63


is the same as defining the transpose of the row vector
 resistors = [10 11 12 13 15]'
10
 
11
 
and both define the column vector12 
 
 
13
Matrix Mathematics 15

Matrix mathematics using the four basic operations of addition, subtraction,


multiplication, and division have special behaviors according to the rules of
matrix algebra. Addition and subtraction operate on respective elements:
1 5 −1 6 0 11
+ =
2 3 0 1 2 4
However, as you learned with vectors, multiplication and division between
two matrices do not operate on respective elements using the * and / oper-
ators. If this is needed, prefix the multiplication or division sign with a dot.

For example, [2 15; 0 3].*[-1 3; 2 1] will work as expected,


yielding [-2 45; 0 3]. Multiplication and division do work with the standard
* and / operators between a matrix and a scalar, where it is understood each
­element of the matrix will be multiplied or divided by that scalar. For example,
[2 -3; 0 4]*2 yields [4 -6; 0 8].

PRACTICE PROBLEMS
30. What single matlab command will allow you to evaluate the
expression below given the vector of t values t=0:5? ©

cos 2t + 4
π
y=
t+1

64 Programming for Electrical Engineers


TECH TIP: MESH AND NODAL ANALYSIS METHODS

Techniques for solving complex circuits with many resistors


include Node Voltage Analysis and Mesh Current Analysis. These
methods are usually taught in circuit analysis courses, but at
their core, they are a systematic way of applying Ohm’s Law,
V = I R, repeatedly over circuit fragments. They create systems
of equations that can be solved simultaneously to find every
voltage (for Node Voltage Analysis) or current (for Mesh Current
Analysis) in the circuit. matlab can solve these simultaneous
equations, which sometimes include more than 100 unknowns,
in less than a second.
The diagrams below show on the left, a circuit, its voltage
definitions, and the set of equations generated by the Node
Voltage Analysis method for its voltages; and on the right,
the same circuit with its currents defined, as well as the set of
equations derived using the Mesh Current Analysis method to
find these currents. Beginning EE students should know the
names of these methods, but need not know how to apply
them yet.

Chapter 2: matlab as a Calculator 65


 SOLVING SIMULTANEOUS EQUATIONS USING MATRICES

Since nodal analysis and mesh analysis are very common methods of circuit
analysis and yield sets of linear real or complex simultaneous equations, solving
simultaneous equations is a basic staple of the electrical engineering curricu-
lum. In matlab, this is accomplished as shown in the following example.

Solve for the various voltages V1, V2, and V3 in the following set of equations:
V1 + 2V2 + V3 = 5
3V1 - V2 + 2V3 = 2
-V1 + V2 - 2V3 = -4
To do this, create an A matrix with the coefficients of the unknown voltages and
a b column vector with the values to the right of the equals sign, as follows:
 A = [1 2 1;3 -1 2;-1 1 -2];
 b = [5; 2; -4];
The solution is (note the backwards division sign):
 V = A\b
When using nodal and mesh methods to analyze the response of circuits con-
taining capacitors and inductors, you will solve sets of complex matrices. There
is no difference as far as matlab is concerned; the A matrix will have complex
values such as for this example solving for complex currents:
 A = [1+j 2-j*2; -3+j 3];
 b = [j; 2-j];
 I = A\b;
On a vintage 2012 computer, matlab can solve a set of 100 equations with 100
unknowns in about 1 ms—less time than it takes to depress the Enter key fully.

DIGGING DEEPER
Matrices can do more than solve simultaneous equations
for circuit analysis; they are essential to manipulating
video, rotating photos, providing equalization to audio
streams, finding particular frequencies present in signals, controlling servo
motors, and are the discrete mathematics counterpart of integration and
differentiation.

66 Programming for Electrical Engineers


PRACTICE PROBLEMS
31. Use matlab to solve the following set of mesh equations for a
circuit to find I1, I2, and I3: ©
2I1 + 6I2 - 3I3 = 3
4I1 - I2 + I3 = 25
I1 + 2I2 - I3 = 8

TECH TIP: VOLTAGE DIVIDERS

One of the most common circuits is the voltage divider. It is


composed of two resistors in series so that a voltage applied
across both is split, with part being dropped by the first resistor
and the remainder by the second as shown in the schematic
below. The formula to find the voltage V1 that is across R1 is
given in the figure:

As with all new ECE formulae, take a moment to analyze it:


• The voltage drop across R1 is proportional to the ap-
plied voltage Vin which makes sense; if one doubles the
applied voltage, the voltage across each of the resistors
should double.

Chapter 2: matlab as a Calculator 67


• T he amount of voltage dropped by R1 is proportional to
the ratio of R1 to the total circuit resistance R1 + R2. Since
the entire applied voltage must be dropped by the two
resistors, it is intuitive that it is split according to each
resistor’s relative contribution to the total resistance.
• By the same reasoning, the voltage across R2 is
R2
V2 = Vin
R1 + R2
This means the sum of the voltage drops across both resistors is
R1 R2
Vin + Vin
R1 + R2 R1 + R2
which simplifies to Vin, the total applied voltage, just as we expect.

PRACTICE PROBLEMS
32. Using the circuit in the previous Tech Tip with R1 = 15 Ω and
R2 = 6 Ω, find the Vin needed to make V1 = 19 V using matlab
and algebra.

68 Programming for Electrical Engineers


 COMMAND REVIEW
Creating Matrices
[]  defines each element of a matrix, e.g., m = [2 4; 1 5].
zeros(r,c)  creates a matrix of zeros with r rows and c columns.
ones(r,c)  creates a matrix of ones with r rows and c columns.
[a:b]  creates a vector from a to b incrementing by 1.
[a:inc:b]  creates a vector from a to b incrementing by inc.
linspace(a,b,N)  creates a vector from a to b with N equally spaced elements.
logspace(a,b,N)  creates a vector from 10a to 10b with N exponentially
spaced elements.
rand(r,c)  creates a matrix with r rows and c columns of random numbers
from 0 to 1. 

Rounding Numbers
round(n)  rounds to the nearest integer, so [-3.6 5.7] becomes [-4 6].
floor(n)  rounds down to the next integer, so [-3.6 5.7] becomes [-4 5].
ceil(n)  rounds up to the next integer, so [-3.6 5.7] becomes [-3 6]. 

Querying Matrices
length(v)  returns the number of elements in vector v.
[r,c]=size(m)  returns the number of rows in r and columns in c.
m(r,c)  returns the element of m at row r and column c. r and c may be vectors.
m(:, c)  returns the column c of m (i.e., all rows, column c).
m(1:4,:)  returns rows 1 through 4 of m (i.e., rows 1 to 4, all columns).
m(:, 3:end)  columns of m from 3 onwards (i.e., all rows, columns 3 to end). 

Deleting Parts of Matrices


v(4) = []  removes element 4 of vector v.
m(:,1) = []  removes the first column of m. 

Chapter 2: matlab as a Calculator 69


Mathematics
pi  π.
+ - * /  work between two scalars or a scalar and matrix. No implied multiplication.
+ -  work between the corresponding elements in two matrices to add and
subtract.
.* ./  work between the corresponding elements in two matrices to multiply
and divide.
A\b  solves the set of n simultaneous equations where A is an n x n matrix of
coefficients and b is an n × 1 column vector. 

Complex Numbers
i, j  sqrt(-1). Can be used, for instance, as 3 + j*7.
real(z)  the real part of complex number z (rectangular coordinates).
imag(z)  the imaginary part of complex number z (rectangular coordinates).
abs(z)  the magnitude of complex number z (polar coordinates).
angle(z)  the angle of complex number z in radians (polar coordinates). 

Strings
v = 'Hello'  defines a string.
x = str2num('42')  changes a string representation of a number to a
number. 

70 Programming for Electrical Engineers


LAB PROBLEMS

© = Write only the matlab command.


 = Write only the matlab result.

1. R esistors are available in certain predefined sizes, so you cannot expect to


find one with a value of exactly, say, π Ohms. Write the matlab commands
that create the vector v1 of all standard 5% resistor values from 1 Ω
through 9.1 Ω. The list of standard values is described in the Tech Tip titled
“Measuring Resistance” on page 42. ©
2. Create vector v2 by modifying v1 (above) so it prints all standard 5%
resistor values from 1 Ω through and including 1 MΩ (same as 1,000,000 Ω).
You will use these vectors again, so save both v1 and v2 in the matlab file,
resistors.mat. Hint: How would you scale v1 to make it 10 times bigger?
How would you then concatenate v1 and that scaled v1? Make sure the last
value is 1 MΩ, not 910,000 Ω. ©
3. What single matlab command removes the third through seventh values of
a vector v? ©
4. What single matlab command removes the first, second, and fifth columns
from a matrix c? ©
5. Write the single matlab command that removes all even-indexed rows
from matrix m, where m could be of any size. For instance, in a 6 × 6 square
matrix, the command would remove the second, fourth, and sixth rows, but
in a 2 × 2 matrix it would only remove the second row. ©
6. What matlab command replaces the first column of any matrix m with
all zeros? ©
7. What matlab command replaces the second row of matrix m with the
vector v (assuming the number of columns in m is the same as in v)? For
instance, if m = [1 2; 3 4] and v = [9 9], this would create matrix [1 2; 9 9]. The
command should work with any compatibly sized m and v. ©
8. If you are given a vector x, write the matlab commands to
a) extract the first five numbers ©
b) delete the last five numbers ©

Chapter 2: matlab as a Calculator 71


9. W  rite the matlab command that, given a predefined vector v of length 5,
returns only the values with odd indices. For example, if v = [1 5 3 -3 0], it
will return [1 3 0]. ©
10. Similar to the above but harder: write the matlab command(s) that, given a
predefined vector v of any length, returns only the values with odd indices.
The command must be the same regardless of the length of the vector. For
example, if v = [1 5 3 -3 0], it will return [1 3 0] but if v = [1 5 3], it will return
[1 3]. This reduction in data length is called downsampling when applied to
digital signal processing. ©
11. Make a vector v3 of the alternating digits [1 -1 1 -1 …] that is 210 = 1024
long. Hint: Do not specify each value independently, since that would take
too long. Instead, either think about how to concatenate [1 -1] into longer
and longer units, or alternatively, think about how to use the fact that
(−1)0 = 1, (−1)1 = −1, (−1)2 = 1, (−1)3 = −1, etc. ©
12. Given vector x of any length, what matlab command creates a vector y
consisting of every odd-indexed value in x? For example, if x = [5 1 2 5],
then y = [5 2], and if x = [1 3], then y = [1]. ©
13. Using indexing rather than the built-in function fliplr(), write the matlab
command that takes a given vector g of any length, and from it, produces
its flipped vector f. For example, if g = [1 2], then f = [2 1], and if g = [1 2 3 4],
then f = [4 3 2 1]. Hint: Vector increments can be negative. ©
14. Given a vector x of arbitrary length, write the matlab commands that create
the vector y which doubles the x vector length by duplicating each value.
For instance, if x = [2 -1], then the commands will create [2 2 -1 -1], and if
x = [2 -1 3], then the commands will return [2 2 -1 -1 3 3].
Begin with the following two commands, and find the third command that
solves the problem: ©
 y = zeros(1,2*length(x));
 y(1:2:end-1) = x;
This increase in data length by duplicating values is an approximate model
of the theoretical process called zero-order hold that a digital to analog
converter uses.

72 Programming for Electrical Engineers


15. Given a vector of arbitrary length, write the matlab command that returns
a vector v that is equal to the average value of adjacent values of s. For
instance, if v = [1 4 2 -2], then s will be [2.5 1 0] (see image below). Note that
the length of the result is always one shorter than the given vector.

Although the example uses a length-4 vector, the command should work
with an s vector of any length of 2 or greater. The answer is a single matlab
command, and the first part is given below. Fill in the part represented by
the ellipses (…). ©
s = (v(1:end-1)+ …)/2
This is called a moving-average filter, and it is used in fields from Electrical
Engineering to stock market analysis.
16. Given a predefined vector v of any odd length, write the matlab
command(s) to extract its center value. For example, [2 3 7] would extract
3, and [1 6 2 9 5] would extract 2. The command should be the same
regardless of the length of the vector it operates upon. ©
17. Find the equivalent parallel resistance of a 5 Ω resistor placed in parallel
separately with each of the standard-value resistors from 1 Ω through 9.1 Ω.
(You already created that vector in Problem 1).
That is, find the equivalent of a 5 Ω resistor in parallel with a 1 Ω resistor,
and repeat that with the 5 Ω in parallel with a 1.1 Ω resistor, etc., up to the
5 Ω in parallel with a 9.1 Ω resistor. Do this in matlab by defining R1 = 5 and
R2 = the vector of resistances you defined in Problem 1. Then define the
single command, and matlab’s result, that answers the question. ©
18. You learned in the previous chapter that plot(x,y) plots an x vector
against a y vector. Create vectors x and y that plot the square wave in the
following diagram. Do not worry about the formatting of the axis numbers,
or whether the square wave touches the top and bottom of the plot
window (the next chapter will cover these and other formatting issues).

Chapter 2: matlab as a Calculator 73


For the purposes of this problem, focus on the shape of the square wave.
Record the matlab commands used and the resulting plot. ©

19. You learned in the previous chapter that plot(x,y) plots an x vector
against a y vector. Create vectors x and y that plot the sine wave shown
in the following diagram below, where the horizontal axis has a domain
from 0 to 10π. Do not worry about the formatting of the axis numbers, or
whether the sine wave touches the top and bottom of the plot window
(the next chapter will cover these and other formatting issues). For the
purposes of this problem, focus on the shape of the sine wave. Hint: Unlike
Problem 18 above, you cannot explicitly enter values for x and y. Instead,
use linspace() to calculate the x values, choosing enough points to
make the plot smooth and calculate the y values using the appropriate
mathematical function. Record the matlab commands used and the
resulting plot. ©

2 + j7
20. Let z =
23∠ 45°
  Use matlab to calculate z and display in both rectangular and polar
notation. Use degrees for the angle in polar notation. 
21. Given the complex number 2 ∠ 37° written in polar form, use matlab to
write the same number in different forms. In each case, write the result
1
numerically, rather than as an equation (i.e., 0.7071, rather than or
π √2
cos ).
4
a) Write the complex number in rectangular form ©
b) Write the complex number in complex exponential form (using radians),
and format it so that it looks like the formatting of this example: 4.5ej0.72 ©

74 Programming for Electrical Engineers


22. Given the complex number 2√2ejπ/4 written in complex exponential form,
use matlab to write the same number in different forms. In each case, write
the result numerically, rather than as an equation (i.e., 0.7071, rather than
1 π
or cos ).
√2 4
a) Write the complex number in rectangular form ©
b) Write the complex number in polar form (using degrees) and format it using
the ∠ symbol for angle and the degree symbol as described in the text ©
23. Given the complex number 7 – j12 written in rectangular form, use matlab
to write the same number in different forms. In each case, write the result
1
numerically, rather than as an equation (i.e., 0.7071, rather than or
π √2
cos ).
4
a) Write the complex number in polar form (using degrees) ©
b) Write the complex number in complex exponential form (using radians),
and format it so it looks like the formatting of this example: 4.5ej0.72 ©
24. Given the complex expression ( 3 − j12) ( 4 ∠ 55° ) , use matlab to evaluate
the expression and write the result in different forms. In each case, write the
1
result numerically, rather than as an equation (i.e., 0.7071, rather than or
π √2
cos ).
4
a) Write the result in rectangular form ©
b) Write the result in complex exponential form (using radians), and format it
so it looks like the formatting in this example: 4.5ej0.72 ©
c) Write the result polar form (using degrees), and format it using the ∠ sym-
bol for angle and the degree symbol as shown in the text ©
25. Given the complex expression ( 1 + j7) 5ejπ/3 , use matlab to evaluate
the expression and write the result in different forms. In each case,
write the result numerically, rather than as an equation (i.e., 0.7071, not
1 π
or cos ).
√2 4
a) Write the result in rectangular form ©
b) Write the result in complex exponential form (using radians), and format
it so it looks like the formatting in this example: 4.5ej0.72 ©

Chapter 2: matlab as a Calculator 75


c) Write the result polar form (using degrees), and format it using the ∠ sym-
bol for angle and the degree symbol as shown in the text ©
26. The complex impedance z of an inductor and capacitor in parallel is
j2πf
z=
1 − ( 2πf )2 L C
where f is the frequency in Hz
L is the inductance in Henrys (H)
C is the capacitance in Farads (F)
Use matlab’s vector functions (i.e., run the equation once with a vector,
rather than rerunning it five separate times) to find the complex impedance
of a 2∙10-3 F capacitor in parallel with a 2.2∙10-3 H inductor at the following
frequencies in Hz: 1000, 5000, 10,000, 20,000, 50,000. Hint: The answers will
be complex; write them in rectangular notation. ©
27. Create a string variable called str1 = '341'. Type the matlab command that
isolates the last two characters (that is, 41), converts them into a number,
and adds 1 to the result. ©
cos ( 10° ) √2
28. A student wants to create the matrix m = using the
3 j3
following matlab command:
 m = [cos(10), sqrt(2); 3 j3];
However, this command generates an error because there is one mistake in
each of the matrix rows. Write the correct code. ©
29. A mesh analysis of a circuit yields the equations listed below. Use matlab
to solve them for I1, I2, I3, and I4. Hint: If an equation does not mention a
variable, there is 0 times that variable. ©
2i1 - i2 + i3 + 6i4 = 20
 -i1 + 3i2 = −12
  i3 + i4    = 1
 2i1 – i3 = 12
30. Node voltage analysis of a circuit yields the equations shown below.
Use matlab’s matrix-solving capabilities to find the three voltages. Hint:
Remember to move constants to the right side. ©
 3 V1 – 2 V2 + V3 = 0
   V1 + V2 + 1 = 0
   V1 – V2 + V3 –2 = 0

76 Programming for Electrical Engineers


31. A nodal analysis of a circuit yields the following set of complex equations.
Use matlab to find V1 and V2, and write the result in rectangular notation. 
 (1 + j2) V1 + j3 V2 = −1 + j12
 2 V1 − 4 V2 = −16 + j34
32. Mesh current analysis of a circuit yields the complex equations shown
below. Use matlab’s matrix-solving capabilities to find the two currents in
polar form, with the angle in degrees. Hint: Remember to move constants
to the right side. ©
(4-j) I1 + I2 + 4–j = 0
j7 I1 – 3 I2 = 0 

Chapter 2: matlab as a Calculator 77


matlab GRAPHICS
3
OBJECTIVES

After completing this chapter, you will be able to use matlab to do the following:

•  reate line plots, similar to an oscilloscope display


C
• Create multiple line plots in the same axes, like a multiple trace
oscilloscope
• Create scatter plots to show individual data pairs, like calculated versus
measured voltage
• Create bar plots to show grouped data
• Create linear or logarithmically spaced axes
• Create plots with multiple sets of axes
• Add text labels to plots, including usage of Greek symbols

Programming for Electrical Engineers 79


TYPES OF PLOTS

Electrical engineers use a wide variety of graphs to show data. The most com-
mon types are the line plot, the scatter plot, and the bar plot, as shown below.
The line plot is used to show continuously varying data, much as an oscilloscope
may be used to view a time-varying voltage. The scatter plot is used to show
discretely measured data (i.e., the actual vs. rated resistance of a sample of six
inductors). If there is too much data to display using a scatter plot (i.e., a data set
sampling 10,000 resistors), the data may be grouped into bins and displayed in
a bar plot.

Common types of plots used in electrical and computer engineering are shown above. “Voltage versus time” shows the line plot
(with two differently formatted lines on the same axes), while “Inductance value” and “Resistor value distribution” are examples of
the scatter plot and the bar chart, respectively. In this chapter, you will learn how make all of these in matlab. 

80 Programming for Electrical Engineers


LINE PLOT

The line plot is the most common type of graph. It requires two vectors of equal
length: one that specifies the horizontal coordinates of each point and one that
specifies the corresponding vertical points. In high-school mathematics classes,
horizontal distances are often called x and vertical distances y. In electrical engi-
neering, the horizontal axis is often t for time, and the vertical axis is a voltage
v(t), a current i(t), or a generic signal, such as x(t) or y(t).

To plot the equation y(t) = t cos(t) between 0  ≤ t ≤  5 shown above,


2
1. Create the horizontal t vector with enough points to give a smooth plot:
t = linspace(0, 5, 1000);

2. Recall that a semicolon is needed at the end of the command to
suppress echoing the 1000 elements of t to the screen.
3. Create the vertical y vector corresponding to the desired function:
y = t/2 .* cos(t);

 Remember that .* is needed for multiplication between corresponding
vector elements.
4. Create the plot using plot(horizontal, vertical)
plot(t,y)

Chapter 3: matlab Graphics 81


RECALL
The commands +, −, *, and / work between a scalar and a
vector. Between two vectors, the commands + and – add or
subtract corresponding elements of the two vectors. You must
use .* and ./ to multiply or divide corresponding elements
between two vectors.

Selecting Line Colors

matlab will select blue for plot lines by default. To select a different color, such as
plotting the previous example in red, type
 plot(t, y, 'r')
where 'r' stands for red.

matlab has predefined eight colors with single-letter shortcuts.

Color Abbreviation
blue 'b'
green 'g'
red 'r'
cyan 'c'
magenta 'm'
yellow 'y'
black 'k'
white 'w'

You do not need to memorize these abbreviations; find them by typing


help plot

DIGGING DEEPER
If you need to embed matlab plots in Microsoft Word, do
not use screen grab tools, which only capture low-quality
bitmaps that will appear blurry when printed. Instead,
select the plot window you wish to copy; choose Edit ->
Copy Figure from the menu; and then paste it into the Word document.

82 Programming for Electrical Engineers


Selecting Line Styles

By default, matlab uses solid lines to draw plots; however, other line styles can be
specified, such as dotted, dashed, and dash dot:

Style Abbreviation
Solid '-'
Dotted ': '
Dashed '--'
Dash dot '-.'

To create a dotted line, as shown


in the plot to the right, type
 plot(t, y, ':')
This command can be used in
addition to the line color command, as shown in the following example:
 plot(t, y, 'r:')
This creates a red dotted line. Notice how the commands are combined into a
single quoted command. 

Choosing Line Width and Arbitrary Colors

Specifying predefined colors and line styles is so common that they are inte-
grated in the plot command itself. Other less-common options, such as choosing
the width of the line or choosing an arbitrary color, are accessed through the
keywords at the end of the plot command, followed by a number or vector. 

Varying Plot Line Width

The line width is set to 1 by default. To make it five times thicker, choose a line-
width of 5 using this command:
 plot(t, y, 'linewidth', 5)

Chapter 3: matlab Graphics 83


Examples of plots with line widths ranging from 1 to 15 are shown below:

Similarly, if you need a color other than one of the eight predefined colors that
matlab provides, use the 'color' keyword, followed by the color specification
in [red, green, blue] coordinates. This is a vector of three numbers, with each
number varying between 0 and 1, that defines how much red, blue, and green
(respectively) are present. This color specification system is a common one in
computer graphics. For example, orange is made with a lot of red, mixed with a
medium amount of green and no blue, so the RGB coordinates [1 0.5 0] yields an
orange hue, which can be plotted using the following command:
 plot(t, y, 'color', [1 0.5 0]) 

Combining Commands

Commands to plot() must be grouped into two parts. The first is the x,y data,
followed by the single-character color and the one- or two-character linestyle.
Any color and linestyle characters must all be grouped together and enclosed
in a single set of quotes, e.g. 'r-' rather than 'r','-'. Commands that are
given in two parts, like 'linewidth', 10, must come at the end. For exam-
ple, to draw the thick red dotted line shown on the next page, use the command:
second part

plot(t,y,'r:','linewidth',10)

84 Programming for Electrical Engineers


PRACTICE PROBLEMS
1. P lot cos(t) from −2π  ≤  t  ≤  2π. ©
2. Repeat the above using a dotted, green line, with a width 10
times thicker than the default. ©

Axis Labels and Titles

Most plots will need a title and labels for each axis. This can be done after the
plot is created using the title, xlabel, and ylabel commands, as shown
in the example below, which plots the first 5 seconds of a decaying voltage
exponential:
 t = linspace(0,5,100);
 y = exp(-t);
plot(t,y)
title('Decaying Exponential')
xlabel('time (s)')
ylabel('amplitude (V)')

Chapter 3: matlab Graphics 85


Notice that strings in matlab are contained in single quotes, unlike the double
quotes used by most programming languages. See the resulting plot below:

Axis Limits

matlab usually does a good job of choosing vertical and horizontal axis limits,
but not always. For example, to make a right triangle, draw three lines connect-
ing these four points (the last point is the same as the first to close the triangle):
{0,0}, {1,0}, {0,1}, and {0,0}. This corresponds to
 x = [0 1 0 0]; y = [0 0 1 0]; plot(x,y)
Here, the figure’s axis limits are scaled to the limits of the figure, making the
edges of the triangle difficult to distinguish from the axes themselves.

86 Programming for Electrical Engineers


To choose your own axis limits, use the following command:
 axis([xmin xmax ymin ymax])
For example, to clarify the plot in the previous figure, choose horizontal and ver-
tical axis limits that range from −1 to 2:
 axis([-1 2 -1 2])
This command will result in the much clearer figure below:

PRACTICE PROBLEMS
3. M
 any waveforms in Electrical Engineering are derived from
complex exponentials. Plot y = real part of (ejtπ) for 0  ≤  t  ≤  5.
(Remember how to find the real part of a complex number?)
Title the plot “Complex Exponential” and label the horizontal
axis “time” and the vertical axis “Volts”. ©

Chapter 3: matlab Graphics 87


TECH TIP: OSCILLOSCOPES

Electrical engineers often use oscilloscopes to graph


time-varying voltages in circuits. Oscilloscopes are usually
marked with a grid background. The user sets the scope so that
each vertical division of the grid represents a certain number of
volts (abbreviated V/div), and so that each horizontal division
corresponds to a known amount of time (abbreviated time/div).

Grids

You can add an oscilloscope-like grid to your plots with the grid command.
After creating your basic plot, turn the grid on or off using these commands:
grid('on')
grid('off')

88 Programming for Electrical Engineers


PRACTICE PROBLEMS
4. C
 reate an oscilloscope-like plot (that is, use a grid) of the
waveform x(t) = cos(3t) − 2 for 0  ≤  t  ≤  5 s. Label the plot as
“Oscilloscope trace,” the horizontal axis as “time (s),” and the
vertical axis as “Volts (V)”. 

 Logarithmic Axis Scaling

Logarithmic axis scaling is useful when plotting values where the independent
(horizontal) or dependent (vertical) variables have dense information for small
values, but progressively spread out larger values. For example, attempting to
plot each of the 145 standard value 5% resistor values from 1 Ω to 1M Ω would
be impossible on a standard, linear-scaled axis because the 0.1 Ω difference
between the 1.0 Ω and 1.1 Ω would not be visible on a scale that extended to
1,000,000 Ω.

To fix this, the horizontal, vertical, or both axes of a plot may be logarithmically
scaled, using the following commands, respectively:
semilogx(horizontal_data, vertical_data)
semilogy(horizontal_data, vertical_data)
loglog(horizontal_data, vertical_data)
These commands are used in place of the plot() command and have the exact
same syntax. For example, to create a plot of log-scaled voltage data in vector v
measured at corresponding times t, using a black line five times thicker than the
matlab default, type
semilogy(t,v,'k','linewidth',5)
Note that a logarithmically scaled axis cannot contain a zero value, since
log(0) = -∞.

Chapter 3: matlab Graphics 89


Plots comparing the same data with and without logarithmic scaling of the hori-
zontal axis are shown below. Notice how horizontal log scaling of this particu-
lar data set reveals important information lost in the linearly scaled plot, even
though the horizontal and vertical ranges of the axes are the same in both.

TECH TIP: BODE PLOTS

Bode plots are a type of plot used by electrical engineers to


represent the frequency-specific amount of signal passed by
a filter. The vertical scale is measured in decibels (abbreviated
as dB), which are calculated as 20 log10(x), where x is the
amount of signal. The horizontal scale is always plotted
logarithmically. For example, to plot the frequency (Hz),
voltage (V) pairs {1, 1}, {10, 1}, {100, 0.1}, and {1000, 0.01} as a
Bode plot in matlab:
 f = [1 10 100 1000];
 y = [1 1 0.1 0.01];
 dB = 20*log10(y);
 semilogx(f,dB)
 title('Bode Plot')
xlabel('Frequency (Hz)')
 ylabel('Amplitude (dB)')

90 Programming for Electrical Engineers


Bode Plot
0

–10

Amplitude (dB)
–20

–30

–40
100 101 102 103
Frequency (Hz)

PRACTICE PROBLEMS
5. Plot the following filter response using the above Bode styl-
1
ing: y = . Use logspace to generate logarithmi-
10000 + f 2
cally spaced points in the f vector from 1 Hz to 10,000 Hz.
In other words, the Tech Tip gave the f and y vectors. Now,
calculate them with logspace and the given equation. 
Hints:
• If logspace returns infinite numbers, reread its section
in Chapter 2.
• Recall that *, /, and ^ work differently with vector and ma-
trix arguments than with scalars. How do you modify them
to work on respective elements between two vectors?
• While the problem requires you to create your own hori-
zontal and vertical vectors of data, the dB computation
and the logarithmically scaled axis plotting routine is the
same as the example (and indeed, for any Bode plot).

Chapter 3: matlab Graphics 91


TECH TIP: LOW PASS FILTERS

Low pass filters are a common type of electrical circuit that


removes high frequencies and allows lower ones to pass
through. The simplest type can be constructed from a single
resistor and capacitor, as shown below on the left. Circuit
analysis courses can teach you how to derive the equation
shown below on the right, which completely describes the
circuit’s behavior. This equation is the circuit’s transfer function
H(f) and evaluates to a complex number, as described in Chapter
2. To see what the circuit does to an input signal of frequency f,
evaluate H(f) at that frequency and take the magnitude of the
resulting complex number. If |H(f)| = 1, it passes that frequency
without change; if |H(f)| > 1, it amplifies the signal; and if
|H(f)| < 1, it attenuates the signal.

1
H (f ) =
1 + j2π f R C

Simple low pass filter Transfer function

H(f) is complex; it is the magnitude |H(f)| that is commonly


plotted against frequency f and often as a Bode plot, which
plots f along a logarithmically scaled horizontal axis, and plots
the magnitude |H(f)| in dB.

92 Programming for Electrical Engineers


For example, plot the response of this circuit with R = 1 kΩ and
C = 1.6 μF from 1 ≤ f ≤ 10 kHz with the following commands:

 = 1000;
R
C = 1.6e-6; defines the component values
f = logspace(0,4,100);  creates a log-spaced frequency
vector from 1 to 10,000 Hz
H = 1./(1+j*2*pi*f*R*C); calculates the H vector

dB = 20*log10(abs(H));  calculates the magnitude of
H in dB
semilogx(f,dB)

title('Lowpass filter')

xlabel('Frequency (Hz)')

ylabel('Amplitude (dB)')

grid('on')


A lowpass filter response is shown above. It starts to cut frequencies


above about 100 Hz.

Chapter 3: matlab Graphics 93


PRACTICE PROBLEMS
6. R
 edo the previous Tech Tip example using the values
R = 5kΩ and C = 3.2 μF. Plot |H(f )| in dB for 30 frequencies that
logarithmically span from 0.1Hz to 10kHz. 

LINE PLOTS WITH MULTIPLE LINES

Just as oscilloscopes often have two channels of input data, so engineers often
graph more than one set of data on the same axes. Both data sets {t1, y1} and
{t2, y2} can be plotted on the same axes with the following command:
plot(t1,y1,t2,y2)
The following commands plot y1 = sin(t) and y2 = cos(t) in the same axes for
0  ≤  t  ≤  6:
 t = linspace(0,6,1000);
 y1 = sin(t);
 y2 = cos(t);
plot(t,y1,t,y2)

94 Programming for Electrical Engineers


Note that all of the options introduced previously work as expected. The follow-
ing commands will make the first line green and the second black and dashed,
with each plotted at twice the default matlab width (see the corresponding
figure below):
plot(t,y1,'g',t,y2,'k--','linewidth',2)

There is no limit to the number of lines plotted on one set of axes; for example,
with more calculated values of y3, y4, and so on, one could use a command like
plot(t1,y1,t2,y2,t3,y3,t4,y4,…)

Chapter 3: matlab Graphics 95


Adding Legends

A figure legend enables a viewer to tell the difference between different lines
plotted on the same set of axes. To add a legend to a set of two lines, use the fol-
lowing syntax:
legend('name1', 'name2')
To add a legend to the sin/cos plot in our earlier example, type
legend('sin(t)', 'cos(t)')
The legend may be dragged with the mouse to avoid covering the data.

Legends are especially useful when printing on black and white printers. In that
case, denote the difference between plots by using solid and dashed lines. 

PRACTICE PROBLEMS
 circuit is found to have a response v1(t) = 2e-t, for 0  ≤  t  ≤  1.
7. A
Adding a capacitor introduces oscillations, making the new
response v2(t) = 2e-t cos(20t), over the same time region. Plot
both v1(t) and v2(t) on the same set of axes, label the axes,
and create a legend. Use as many points as needed to gen-
erate a smooth plot. 

96 Programming for Electrical Engineers


SCATTER PLOTS

Scatter plots use similar data to line plots, but instead of joining each {x,y} pair of
data with lines, scatter plots mark the points themselves with markers. They are
most appropriate when graphing discrete data values, where the linear interpo-
lation between data points that are implied by connecting them with a line may
not be appropriate. To create scatter plots, use the same syntax as for a plot, but
use one of the symbols in the table below instead of a line style symbol:

Symbol Abbreviation
• '.'
o 'o'
× 'x'
+ '+'
* '*'
Δ '^'
□ 's'

To create a scatter plot for measured resistances r  =  [57 65 63 59 65] of five


different heating elements x = [1 2 3 4 5], use the following code:
 x = 1:5;
 r = [57 65 63 59 65];
plot(x,r,'o')

Chapter 3: matlab Graphics 97


Decorating Scatter Plots

The same techniques learned earlier with plot() to specify marker color, title,
axis labeling, and grid also work for scatter plots (now, color specifies the marker
color rather than the line color). You can also specify the marker size with the
'markersize' keyword. For example, the plot from the previous page could
be changed to the plot below with the following command:
 plot(x,r,'^','color',[1 0.5 0],'markersize',25)

PRACTICE PROBLEMS
8. F ive 10 kΩ resistors are pulled from a drawer and measured.
Their values are found to be 9.6kΩ, 10.2kΩ, 10.4kΩ, 9.9kΩ,
and 10.0 kΩ. Scatter plot these values using circles as
markers. For the horizontal axis, use the measurement num-
bers 1, 2, 3, 4, and 5. Label the axes and title the plot. 

98 Programming for Electrical Engineers


PRO TIP: PROFESSIONAL LICENSURE (PE)

Just as doctors and lawyers are licensed to practice medicine


and law, engineers can be licensed as well. Licensed engineers
are called “Professional Engineers,” and they add the letters P.E.
after their name, like John Doe, P.E. Unlike law and medicine,
most electrical engineering careers do not require licensure
(however, such requirements are becoming increasingly more
common). Careers in which licensure is especially helpful
include
• A rchitecture and Building: Only P.E.s may certify cer-
tain types of engineering plans.
• Consulting: Only P.E.s may engage in private engi-
neering consulting, and engineering consultant firms
are required to maintain a certain minimum ratio of
licensed engineers on their staff.
• Government: Being a P.E. is a common requirement for
higher-level state and federal engineering jobs.
• Energy: Most power distribution companies seek P.E.s
to help them certify power station plans.
• Teaching: Some states require engineering depart-
ments to ensure that a certain percentage of their
engineering faculty is licensed.
Licensing requirements vary by state, but a typical path includes
graduating from a 4-year engineering program, passing the
Fundamentals of Engineering (F.E.) exam, working for 4 years
under a P.E., and then passing the P.E. exam.

Chapter 3: matlab Graphics 99


 PLOTTING SCRIPTS

Students often find themselves copying many previously typed lines of com-
mands when modifying complicated plots. There is a way to do this much more
efficiently by creating a matlab script:

1. N
 avigate into your personal directory using the matlab folder window
and directory toolbar, as highlighted below:

2. F rom the matlab command window type edit. This will spawn a
separate text editing window. In the text editing window, type the
commands shown below (in this case, to plot a sinc waveform):
t = linspace(-10,10,100);

y1 = sin(t)./t;

y2 = zeros(size(y1));

plot(t,y1,'b-',t,y2,'k-')
3. S ave the file as “figure1.m.” All matlab code files must end with a .m
suffix. The edit window should now look like the figure below:

100 Programming for Electrical Engineers


4. T o run the code, a script, go back to the main matlab command window
and type the name of the file without the suffix. In this case, to run the
script in figure1.m and generate the figure below, type figure1 in the
command window.

The extra work to create a script to generate complex plots is often justified
by the ease with which they can be modified. In our current example, you
can make the plot lines twice as thick just by changing the last line to add
'linewidth',2 and rerunning the script.

PRACTICE PROBLEMS
9. C
 reate a script to build the sinc waveform without the
horizontal zero line given in the previous example, and then
modify the script to make the line-width five times as thick
as the default. Run the script (do not cut and paste the com-
mands into matlab). Show both the script and the result. ©


Chapter 3: matlab Graphics 101
LAYERING PLOT COMMANDS USING hold()

One of the most powerful abilities of plot() is its ability to layer multiple line
plots on the same axis. There are two different ways to accomplish this:
1. Use the plot(x1,y1,x2,y2) syntax earlier introduced
2. Use plot(x1,y1),hold('on'),plot(x2,y2),hold('off')

Let’s begin by describing the weakness of the first method. You know how to
plot two sets of data {x1, y1} and {x2, y2} with two lines using:
plot(x1,y1,x2,y2)
You also know how to format them individually—for instance, making the first
line red and solid and the second line black and dotted. Recall the commands
must be grouped with the data, as in the example below:
second line
plot(x1,y1,'r-',x2,y2,'k:')

The second black dotted line here is hard to see because it is small. How can
you make the first line thick and the second line thin? Two-part commands like
'linewidth', 5 and 'color', [1 0 1] will not work because they must
appear at the very end of the plot() command, and so they apply to all the
line plots within the plot() command, as shown below:

102 Programming for Electrical Engineers


second line whole-plot line
plot(x1,y1,'r-',x2,y2,'k:','linewidth',5)

To obtain the desired effect of just the second (black) line being thicker, one must use the
hold() command to layer two different plot() commands on top of each other. To
do this, plot only the first line, and then turn hold on using hold('on'), as follows:
plot(x1,y1,'r-')
hold('on')
Then plot the second thick black line with the linewidth modifier:
plot(x2,y2,'k:','linewidth',5)
Do not forget to turn hold off, or the next plot you create will continue to layer
on top of the current plot:
hold('off')

Chapter 3: matlab Graphics 103


PRACTICE PROBLEMS
10. Create a plot of h(t) = e-t from 0  ≤  t  ≤  5 using a black line
15 times thicker than the default. Using hold(), plot the
default thin-sized line of y(t) = e-t + 0.04 cos(15t) over it in
white (that is 'w'). Remember to turn hold off at the end. 

BAR PLOTS

A bar plot is a convenient way to visualize large quantities of raw data grouped
into bins. For example, if a large class completes a lab and measures the follow-
ing voltages across a capacitor:

Vc 3.3 3.4 3.5 3.6 3.7


Number of observations 3 12 34 25 9

Then to graph this relationship, use the same syntax as the plot command, but
use bar(). As always, the horizontal data go first, followed by the vertical data:
 v = 3.3:0.1:3.7;
 n = [3 12 34 25 9];
bar(v,n)

104 Programming for Electrical Engineers


The same techniques used to adorn line plots also work with bar plots. For exam-
ple, the previous plot could have a title and axis labels applied using title(),
xlabel(), and ylabel(), or the axis() command could be used to change
the axis scaling to eliminate the white space at the right side of the plot.

Bar plots can be colored and also grouped into different series as shown below;
type help bar for more information.

PRACTICE PROBLEMS
11. Digital logic gates have a (usually undesired) delay between
when an input signal changes and when the gate responds,
called propagation delay tp. The following propagation
delays are tested for the common 74LS04 chip, a NOT gate.

tp 2.5ns 2.75ns 3ns 3.25ns 3.5ns


# of chips 2 12 27 16 3

Create a bar plot displaying the above values. Label the axes
and give it a title. Hint: Rather than converting very small
numbers like 2.5 ns to 0.0000000025 s, leave it as 2.5 and
label the appropriate axis as “time (ns)”. 

Chapter 3: matlab Graphics 105


SUBPLOT

You have learned how to plot multiple items on the same set of axes using
hold()or plot(x1,y1,x2,y2). Sometimes you may want to group mul-
tiple separate axes in the same plot as in the figure below, which shows the
frequency response of a Butterworth lowpass filter plotted against various com-
binations of axis scaling. Note that neither hold nor plot can put these on the
same set of axes, since it is the same data plotted using different axis scalings.

Instead, use the subplot() command. This command divides the master plot
into rows and columns of subplots (two rows and two columns in the above
example) and sets the “active” subplot, so that the next plot() command will
draw into it. To create a set of r rows by c columns of subplots and to set the
active sub-plot to p, use the command:
subplot(r,c,p)

106 Programming for Electrical Engineers


The subplots are numbered in the same way that we read in English, from left to
right, then top to bottom, as shown below:

As an example, the following commands create a set of two long, narrow plots,
one over the other, the top one graphing v1(t) = sin(t) and the bottom graphing
v2(t) = a triangle wave, for 0 ≤ t ≤ 4π:
 t1 = linspace(0,4*pi,1000);
 v1 = sin(t1);
 t2 = linspace(0,4*pi,9);
 v2 = [0 1 0 -1 0 1 0 -1 0];

subplot(2,1,1)
plot(t1,v1)
title('sin(t)')

subplot(2,1,2)
plot(t2,v2)
title('triangle wave') 

Chapter 3: matlab Graphics 107


PRACTICE PROBLEMS
12. A circuit with inductors, capacitors, and resistors “rings”
(oscillates) when driven by a step in voltage. Both voltage
and current oscillate with the same frequency but with
different phases, such as v(t) = e-t/4 cos(4t) and
i(t) = 0.01e-t/4 cos(4t + π/2). Plot for 0  ≤  t  ≤  15. Plot these in two
subplots, one on top of the other like in the above example. 
13. Using the plot(x,y1,x,y2) command, plot the above
data using a single axis. Which of these two methods is a
better way to visualize the similarities between v(t) and i(t)? 

ADVANCED PLOT DECORATION

There are two fundamentally different methods to gain complete control over all
aspects of plots:
• the interactive plot editor
• handle graphics

Interactive Plot Editor

To enter the interactive plot editor, first create a plot, and then from the plot’s
figure window menu, choose Tools → Edit Plot.

108 Programming for Electrical Engineers


Square selection boxes appear in this mode. There are three selectable things, as
shown below: the Figure Window, the Axis Window, and the Data Set.

The Figure Window (left), the Axis Window (middle), and Data Set (right) selected when in Edit Plot mode.

Once the desired item is selected, double click to enter the editor. The editor
is context-sensitive and will offer choices dependent on the currently selected
item. Because it is graphical and interactive, the interface is very intuitive to use.
This is the primary benefit to using this method: it is fast. 

Handle Graphics

An entirely different method to fully customize your graphics is to use handle


graphics. This method uses keyword/value pairs, like 'linewidth',5. The
­difficulty with this method is that there are many different keyword pairs, and
they are accessed through handle graphics, which means you will need to use
the new commands get() to learn which keywords are available and set()
to change them. If you need to print an idea quickly, you might find the interac-
tive plot editor preferable. However, in practice, this is rare; if you need to adjust
details of the plot, it is often because you plan to use the plot in a document or
presentation (which you may need to revise at a later date). All changes made
using the interactive plot editor are lost, whereas with handle graphics, one can
build a script file to build and modify each figure and then recreate it later, thus
preserving the document’s editability. 

Chapter 3: matlab Graphics 109


Using get() to Get the Keyword Names of Settable Properties

To use handle graphics, it is necessary to understand how matlab stores graphics


information. All information about the plot, from data, to line style, to axis tick
labels, is stored inside one of three elements: the figure window, the axis, or the
line plot. These are the same three elements that are selectable using the inter-
active editing mode. To see the options for each element, use get(). 

Figure Window
get(gcf)  lists figure window properties. There are about 60 of these proper-
ties, including:
'position', [x,y,width,height]  sets the size and location of
the figure window relative to the desktop.
'color', [r,g,b]  sets the color, in [red green blue] coordinates, for
the background of the figure window 

Axis
get(gca)  lists all axis properties (there are over 120), including:
'position', [x,y,width,height]  sets the size and location of
the axis window relative to the figure window
'xtick', 1:10   sets the numeric position of the tick marks along the
x axis
'fontSize', 12  sets the font size in points of the text labeling the axis
'visible', 'off'  makes the axes invisible but keeps visible the data
that they display 

Data
h = get(gca,'children');get(h)  lists the properties of the plotted
data. The number of these properties depends on the type of plot, but data for a
line plot have about 36 of them, including:
'markerfacecolor', [r,g,b]  sets the fill color for the data markers
'markeredgecolor', [r,g,b]  sets the color for the outside border
of the data markers
'linecolor', [r,g,b]   sets the fill color for the data markers

110 Programming for Electrical Engineers


DIGGING DEEPER
With well over 200 different keywords that govern even
simple graphics objects, this subject could be a book
in itself. It is even possible to attach actions to graphics
objects, so that clicking them, or having the mouse pass over them,
executes other matlab code called callback functions. If you are interested
in this, finish the Programming chapters first, and then consult the
matlab help for App Designer, which lets you write your own interactive

GUI programs.

 Using set() to Get the Keyword Names of Settable Properties

To set the properties, use the set() command instead of the get() command,
and use the two-part keyword/value for the property you wish to set, e.g.,

Figure keyword value

set(gcf,'position',[50,50,500,100]) makes the figure window


wide (500 pixels) and short (100 pixels) and places it in the lower left-hand cor-
ner of the desktop 

Axis keyword value

set(gca,'xtick',[0 1]) changes the horizontal tick locations to 0 and 1 


Data
h = get(gca, 'children');

keyword value

set(h,'markerfacecolor',[1,0,1]) fills the markers with pink


Chapter 3: matlab Graphics 111


PRACTICE PROBLEMS
14. Create a scatter plot of the data x = [0.5 1.5 1], y = [0.5 0.5 1.4],
using black circles of size 20. Hint: After you create the data,
you can plot this with a single command. Use the interactive
plot editor to fill them with green. 
15. Create a script file that does the same as the above using the
handle graphics set command. Hint: Changing the marker
face color is a property of the data. ©

TEXT ANNOTATIONS

To create text at an arbitrary position on a plot, use the following command:


text(x,y,'text string')
The example below illustrates this technique and shows the resulting plot:
 t = linspace(0, 5, 1000);
 y = t/2 .* cos(t);
plot(t,y)
text(0.5,0.5,'Local maxima')
text(3,-1.8,'Global minima')

112 Programming for Electrical Engineers


TECH TIP: GREEK SYMBOLS IN ECE

Electrical engineers commonly use 19 of the 24 letters in the


Greek alphabet, and it is important to be able to recognize
and pronounce the names of them. The table below pairs each
symbol with its application in ECE:

α alpha exponential decay rate


β beta transistor current gain
Γ Gamma transmission reflection
Δ Delta change
δ delta impulse function
η eta efficiency ratio
θ theta angle
λ lambda exponential decay rate
μ mu (micro) 10–6
ξ xi damping ratio
Π Pi product
π pi 3.14159…
Σ Sigma sum
σ sigma conductivity, real part of a complex number
τ tau time constant
Φ Phi magnetic flux
ϕ phi angle (similar use as θ)
Ω Omega (ohm) unit of resistance
ω omega radian frequency

Chapter 3: matlab Graphics 113


ADVANCED TEXT FORMATTING

Electrical Engineering plots often require exponents, subscripts, or Greek sym-


bols, and thus, matlab provides a way for title(), xlabel(), ylabel(),
legend(), and text()to display them.

Greek Symbols

Greek symbols are very common in Electrical Engineering, as described in the


previous Tech Tip, and they can be embedded using the backslash character \,
followed by the name of the Greek symbol. The following command labels the
horizontal axis with “Resistance in MΩ”:
xlabel('Resistance in M\Omega')

Super and Subscripts

Superscripts, like powers, such as t2, and subscripts, like V1, are easy to create
in matlab text if the superscript or subscript is just a single character: use ^ or _
respectively. The following command creates the title V1(t) = f(t2):
 title('V_1(t) = f(t^2)')

114 Programming for Electrical Engineers


To group multiple characters in the superscript or subscript, surround them with
curly braces (i.e., {}). The following command creates the text annotation f(t) = ejωt
(notice how it also includes Greek symbols):
text(0.25,0.5, 'e^{j\omegat}')

PRACTICE PROBLEMS
16. Graph v1(t) = 2 e−λt, 0  ≤  t  ≤  0.5, where λ = 4; label the vertical
axis “v1 (V),” and give it the title “2e−λt, λ = 4”. 

THREE-DIMENSIONAL matlab PLOTS

Although the two-dimensional line, scatter, and bar plots described so


far are the most common types of graphics used by electrical engineers,
three-dimensional plots can show how one dependent variable changes
as a function of two independent variables. For example, the sinc function
discussed earlier in this chapter also exists as a function of two dependent
variables, and it is used in image processing. This function is described by
the equation:
sin x2 + y2
z (x , y)=
x2 + y2

To graph this between −15  ≤  x  ≤  15 and −15  ≤  y  ≤  15, first create x and y matri-
ces using meshgrid(), which can be thought of to be a 3D counterpart of

Chapter 3: matlab Graphics 115


linspace(). Meshgrid’s first argument is the vector of x locations, and its sec-
ond is the vector of y locations, as follows:
 [x,y] = meshgrid(-15:15,-15:15);
Then define the function to plot:
 z = sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2);
Last, create the 3D plot using surf():
surf(x,y,z)

To get a smoother-looking plot, add a shading() command, which will turn


off the black edges and make the shading more gradual:
shading('interp')

116 Programming for Electrical Engineers


Solid surfaces are created by the surf() command. To create a wireframe, use
mesh()instead of surf(), as shown below:
 [x,y] = meshgrid(-15:15,-15:15);
 z = sin(sqrt(x.^2+y.^2))./sqrt(x.^2+y.^2);
mesh(x,y,z)

PRACTICE PROBLEMS
17. Create a surface plot of the following function using a grid
spanning both x and y from −10 to 10. 
x y
z (x , y) = sin cos
3 3

Chapter 3: matlab Graphics 117


PRO TIP: IEEE CODE OF ETHICS

To follow the IEEE Code of Ethics, electrical engineers agree to


1. accept responsibility in making decisions consistent with
the welfare of the public, and to disclose promptly factors
that might endanger the public or the environment;
2. avoid real or perceived conflicts of interest where possible,
and to disclose them to affected parties when they do exist;
3. be honest and realistic in stating claims or estimates
based on available data;
4. reject bribery in all its forms;
5. improve the understanding of technology and potential
consequences;
6. improve our technical competence and undertake
technological tasks for others only if qualified by training or
experience, or after full disclosure of pertinent limitations;
7. seek and offer honest criticism of technical work, to
correct errors, and to credit the contributions of others;
8. treat fairly all persons and not to engage in acts of
discrimination based on race, religion, gender, disability,
age, national origin, sexual orientation, gender identity,
or expression;
9. avoid injuring others, property, reputation, or
employment by false or malicious action;
10. assist colleagues with professional development and
support them in following this Code.
See the unabridged text at https://www.ieee.org/about/ethics.html.

118 Programming for Electrical Engineers


COMMAND REVIEW

Line Plots
plot(x,y)  plots the x vector against the y vector
plot(x,y,'r-')  red, straight lines. g, b, k = green, blue, black. -, --, : = solid,
dashed, dotted
plot(x,y,'r-', 'linewidth',5)  plots using a line width 5x the default
plot(x,y, 'color',[r g b])  plots using a line with color specified by
r, g, and b values from 0 to 1
plot(x,y,'b-',x2,y2,'r:')  plots two lines on the same axes (first a
blue solid line, then red dotted)
semilogx(x,y)  plots using a logarithmic horizontal axis
semilogy(x,y)  plots using a logarithmic vertical axis
loglog(x,y)  plots using logarithmic horizontal and vertical axes 

Scatter Plots
plot(x,y,'k.')  plots points. Use ., o, and x for dot, circle, and x markers
plot(x,y,'o','markersize',10)  plots using a marker 10x default size 

Bar Plots
bar(x,y,'b')  creates a blue bar plot. Other colors are same as plot(). 

Options for Line, Scatter, and Bar Plots


axis([xmin xmax ymin ymax])  sets axis limits on any plot, overriding
default
grid('on'), grid('off')  changes the grid visibility
legend('label1', 'label2')  creates a legend to label a plot with
multiple sets of lines or markers
hold('on'), hold('off')  causes next plot command to overlay data
on top of previous
subplot(r,c,n)  divides plot into r rows and c columns of different axes.
The next plot will go into the nth one. 

Chapter 3: matlab Graphics 119


Text on Line, Scatter, and Bar Plots
title('My title')  places a title at the top of a plot window
xlabel('x axis')  places the text “x axis” below the plot’s horizontal axis
ylabel('y axis')  places the text “y axis” to the left of the plot’s vertical axis
text(x,y,'my text')  writes “my text” into the current plot at position x,y
Greek letters inside text quotes use backslash letter, such as '\alpha'
Super/subscripts  inside text quotes use _ or ^, such as 'V_1, x^2' for V1, x2 

Three Dimensional Plots


[x,y] = meshgrid(vx,vy)  creates matrices x, y spaced according to the
vectors vx, vy
surf(x,y,z)  creates a surface plot using matrices x,y,z (x,y created using
meshgrid)
mesh(x,y,z)  creates a wireframe plot using the same syntax as surf() 

Handle Graphics
get(gcf), get(gca)  returns all settable option names for current figure
and axes
get(get(gca,'children'))  returns all settable option names for
current data set
set(gcf, 'keyword',val)  sets the figure option named “keyword” to val
set(gca, 'keyword',val)  sets the axis option named “keyword” to val
set(get(gca,'children'),'keyword',val)  sets the data set option
named “keyword” to val 

LAB PROBLEMS

 common function in signal processing is the sinc function, x(t) = sin(t)/t.


1. A
Using exactly 200 points, plot the sinc function for t = −20 to 20. Use a thick
blue line, 10 times thicker than the matlab default. ©

2. A
 commonly used function in digital signal processing is the Hamming
window and its variants. The equation for this function is shown below:
2πt
w(t) = k − (1 − k) cos , which is plotted over 0 ≤ t ≤ T
T

120 Programming for Electrical Engineers



In a single plot axis, compare the plots for k = 0.4, k = 0.5, and k = 0.54, draw-
ing each in a different color and in a different line type (solid, dashed, and
dotted) with a legend. Use a line width of 2 to make the lines easier to see.
Use T = 10 for each of the plots. Hint: The first step is to create a time vector
t; do this with 100 points. ©
− t
 lot the voltage waveform v(t) = 2 + e 5 cos (2t) in the style an
3. P
oscilloscope would show, including using a grid, for 0  ≤  t  ≤  10 seconds.
Label all axes and title the plot. ©

4. A
 student ill-advisedly places a 1 Ω resistor in a US electrical socket, causing
it to dissipate a time-varying power, in Watts, of
2
p(t) = 120 √2 cos (2π60t)


Plot this power for 0.1 seconds using 1000 points, title the plot “power across
1 Ω,” and label the horizontal axis “time (s)” and the vertical axis “power (W).” ©

5. S ignals and Systems classes teach how to design and analyze filters that
remove signals based on their frequency. One such transfer function is
100
H(f ) =
100 + j2π f

where j is the imaginary value √ −1 and f is the frequency in Hz. H(f) is com-

plex, so in complex polar notation, it has a magnitude and an angle. Plot the
magnitude of H(f) as f varies between 1 and 100 Hz. To do this, use log-
space() to create f, and plot the result in a Bode-style plot with the vertical
axis in dB and the horizontal axis logarithmically scaled. ©

 high pass filter is a circuit that allows high-frequency signals to pass but
6. A
blocks slowly changing signals. A transfer function for one type of high pass
filter is given below:
j20π f
H(f ) =
10 + j20π f
where j is the imaginary value √ −1 and f is frequency in Hz. H(f) is complex,

so it can be viewed in complex polar notation as having a magnitude and

Chapter 3: matlab Graphics 121


an angle. Plot the magnitude of H(f) as f varies between 0.01 and 100 Hz.
To do this, use logspace() to create f, and plot the result in a Bode-style
plot with the vertical axis in dB and the horizontal axis logarithmically scaled.
Label the figure “High pass filter.” ©

7. C
 ontrol classes teach how to analyze systems that could control a robot
arm’s horizontal motion with varying degrees of damping λ, as described by
the equation:
x(t) = λe−λt

Create three sets of line plots on the same set of axes showing the effect of
λ = 0.5, 1, and 2 over the range of 0  ≤  t  ≤  5, with three different linestyles (e.g.,
solid, dashed, dotted), so each will be readable on a black and white printout,
and create the corresponding legend for it. ©

8. C
 omponent values are usually within some tolerance of their nominal value.
A student takes 10 capacitors from a bin labeled “4.7 μF” and measures the
following values, all in μF: 4.81, 4.23, 5.02, 5.25, 4.86, 4.93, 4.60, 4.85, 4.40,
and 4.45. Scatter plot (with points, not connected lines) these values in μF
(e.g., plot 4.81, not 0.00000481) using the measurement number 1–10 for
the horizontal axis. Add horizontal lines showing the limit 10% over and
under the nominal 4.7 value. Hint: A horizontal line can be drawn with two
points. Title the plot “4.7 μF 10% capacitor values.” Note that μ is the Greek
character mu, not the Latin character u. ©

9. High-tension power lines use high voltages to transmit power so that


currents, and therefore, losses from resistance can be kept relatively low.
Typical high-voltage power lines operate at 138 kV. Even so, voltages
decrease over the power line with distance, as some power is lost to wire
resistance and becomes heat energy that radiates into the air. A particular
power line has measured voltages [138 136 135 134 133 132] kV at
distances [0 4 8 12 16 20] km from the generating station. Create a scatter
plot using large markers of your choice showing these values. Label the
horizontal axis “distance from generator (in km)” and the vertical axis
“Voltage (in kV),” and title the plot “Power Transmission”. ©

122 Programming for Electrical Engineers


10. Digital integrated circuits (ICs) have small but unavoidable propagation
delays between the time a signal changes at the input and the time the
signal changes at the output (these delays are one reason why computer
speeds are limited). A student measures the following delays, all in ns (1
billionth of a second) for different samples of a CMOS chip: 22.9, 24.9, 21.1,
20.2, 20, 22.9, 21.2, 23.1, 22, and 19.9. Scatter plot these values in ns (i.e., you
can ignore the “ns”) using the measurement number 1–10 for the horizontal
axis. Place a horizontal line showing the maximum acceptable limit of delay
of 24.2 ns (one component falls outside this range). Hint: You can define a
horizontal line with two points. Title the plot “Propagation delays in ns.” ©

11. Create a plot of a blue square wave y1 and red sine wave y2, both with
heights ranging from −1 to +1 and extending from 0 ≤ t ≤ 4 as shown. Hints:
• Manually specify eight {t1,y1} pairs to make the square wave, but calcu-
late the sine wave using {t2,y2} with many points to make it smooth.
• From trigonometry, sin(π t) will fit two cycles in the span of 4 seconds, as
shown. ©

12. The sawtooth waveform shown to the right is commonly encountered in


engineering. It can be approximated by a sum of sine waves according to
the following equation:

1 sin(πt) sin(2πt) sin(3πt) sin(4πt)


y (t) = − − − −
2 π 2π 3π 4π

Chapter 3: matlab Graphics 123


Plot this equation’s approximation to the sawtooth from 0  ≤  t  ≤  8 using
1000 points. Then use the hold command and a second plot command to
plot the exact straight-edged sawtooth wave shown in the image above.
The two images should overlay one another so that it is apparent how
closely the equation models the ideal sawtooth. Hint: Unlike the equation’s
complex approximation to the sawtooth, it only takes nine points to plot
the ideal straight-line sawtooth. Use a linewidth of two to make the plots
more easily visible. ©

13. Plot the vector of 145 resistor values (from 1 Ω to 1 MΩ) you saved in Chapter 2
using subplot() to create two plot axes over one another. The top one should
have the normal (linear) vertical axis and the bottom one should have a
logarithmic vertical axis. Both axes should have the normal (linear) horizontal
axis and both horizontal axes should count from 1 to 145 for each of the
standard 5% resistor values. Which plot best shows the data? ©

14. Industrial motors and long-distance power transmission often use three-
phase power. The voltages in one such system are shown below, where the
arguments to the cosine function are in radians, not degrees:
vA (t) = 120 √2 cos (2π60 t)

vB (t) = 120 √2 cos 2π60 t +
3

vC (t) = 120 √2 cos 2π60 t −
3
 lot the three waveforms vA, vB, and vC  for 0  ≤  t  ≤  0.05 seconds. Use 1000
P
points to plot them, plot each waveform in a different color, and use a legend
with subscripts to show which is vA, vB, and vC.

15. The complex exponential, f(ω) = e-jω, is frequently used in signal processing,


but it is difficult to graph directly since for every real value of ω, f(ω)
evaluates to a complex value. To visualize it, create two subplots, both in
the same row, in a single window. Let ω vary from 0 to 8. Hint: You cannot
create ω as a variable in matlab, so use w as being similar.

124 Programming for Electrical Engineers


In the first subplot, create two different line plots on the same set of axes.
One should be the real part of f(ω), and the other should be the imaginary
part of f(ω). Use a legend to tell them apart. Label the horizontal axis with the
Greek letter ω and give it the title e-jω using superscripts. In the second sub-
plot, plot the real part against the imaginary part. In other words, for this sec-
ond subplot, use the real part of e-jω as the x values and the imaginary part of
e-jω as the y values, and plot(x,y). Do not label or title the second subplot. ©

16. Control systems theory can help predict how a system responds to a
sudden change in input, which is called the system’s step response. Three
common types of step response are given in the following equations:
− t
e 20

−t t −t
e 2+ e 2
2
−t t
e 8 cos
5
 lot the three responses for 0  ≤  t  ≤  75 seconds using the above equations.
P
Use 1000 points to plot them, plot each equation in a different color, and use
a legend to describe them. In the legend, call the first equation overdamped,
the second equation critically damped, and the third equation underdamped.

17. Plot the following function:


2 2
z (x , y) = 2 − 2
+ y2 + y2
e( x − 0.5) e( x + 0.5)

Use a grid spanning x and y from −3 to 3 in 0.2 increments. Use the surf()
command to plot. Hint: To get the x and y to increment in steps of 0.2
instead of their default 1 intervals, you will need to change the arguments
into meshgrid. ©

18. Common lossy image compression algorithms rely on basis functions that
are similar to the following function:
z (x , y) = sin(x) cos(y)

Plot this function using a grid spanning x and y from −5 to 5 in 0.2
­increments. Use the mesh() command to plot. Hint: To get the x and y to

Chapter 3: matlab Graphics 125


increment in steps of 0.2 instead of their default 1 intervals, you will need
to change the arguments into meshgrid. Title the plot “2D Basis Function”
since, although the plot is a 3D plot, it is a basis function of a 2D image.
Hint: The plot should look like a number of smooth hills or an egg crate. If
you get an image with sharp transitions, think about how to do element-
by-element matrix multiplications. ©

19. Using the IEEE Code of Ethics set out in this chapter, write a one-paragraph
answer to the following case study:

 s a Master’s engineering student, your thesis involves work on signal process-


A
ing routines that can identify a type of cardiac (heart) disease based on analysis
of electrocardiogram (ECG) signals. ECG signals are the voltage signals mea-
sured on the chest surface that propagate from the electrical depolarization of
the heart as it beats. Manufacturers X and Y go to court over a dispute of patent
rights involving a system that uses a related technology, and you are offered a
temporary 2-week job to work as an expert witness for Company X. Your job is
to explain to the judge why Y’s approach infringes on X’s patent claims. As you
prepare for the case, you write down the many reasons that this is true; how-
ever, you also realize there are several reasons why the opposite argument may
be made. At the trial, after you deliver your report, the opposing lawyer asks you
during cross-examination if you have any reasons to doubt your reported find-
ings. Does your ethical obligation to your client, Company X, outweigh your eth-
ical obligation to completely disclose your doubts? Would your answer change
if the opposing expert witness testified first and, when faced with the same line
of questioning, answered “of course not,” giving the judge a biased view?

20. You have been tasked by an automotive company to improve airbag safety
by designing a system that either (A) works very well with passengers of
common heights, but fails to protect passengers who are either unusually
tall or short, or (B) works suboptimally for all passengers equally. Which of
the 10 articles of the IEEE Code of Ethics described in this chapter provide
guidance for this choice? How would you approach the decision in light of
the IEEE Code? 

126 Programming for Electrical Engineers


matlab PROGRAMMING

OBJECTIVES
4
After completing this chapter, you will be able to use matlab to do the following:

•  escribe the differences between matlab scripts and functions and the
D
strengths and weaknesses of each
• Explain what input and output arguments are and how they are used
• Write a function that takes and returns any number of arguments
• Use commenting effectively
• Use logical operators to create relational expressions
• Use if-elseif-else conditional structures
• Create strings with embedded numbers

Programming for Electrical Engineers 127


WHY PROGRAM?

A matlab program is simply a collection of commands that one could type from
the command line. These commands are grouped together into a file called a
program and are run by typing the file’s name into the matlab command win-
dow. There is nothing one can accomplish from a matlab program that cannot
be accomplished by typing commands at the command line. So why program?
Programs are important because they:
• Simplify repeating a calculation. For instance, instead of having to type
the formula Rparallel = (R1*R2)/(R1+R2) every time you need
it, just create a program called Rparallel.m.
• H ide complexity. A user can call a program called plotFigure2(),
for instance, without having to remember or understand how
plotFigure2() works.

This chapter introduces programming, which involves two types of text:


• The commands entered at the command prompt ≫ in the matlab
command window to run the program, and
• The program itself that is saved in a separate text file.
Programming for Electrical Engineers color codes text to differentiate between
these two cases: blue text represents commands entered in the command
window following the ≫ prompt, and red text represents the program code
saved in separate file as shown in the diagram below:


128 Programming for Electrical Engineers
SCRIPTS

There are two fundamentally different types of matlab programs: scripts and
functions. A script file is a collection of matlab commands, saved in a file that
ends in a .m suffix. When executed, it behaves exactly as if the commands were
typed from the command line. All variables created in the matlab session before
the script is run are available inside the script, and any variables created in the
script are left in memory after the script finishes. This means that the user will
need to remember the names of the variables that the script expects and ensure
they exist before calling the script.

To create a script that computes the value of two resistors in parallel:


1. Decide the names of the function and the variables it acts upon. For
example, let the name be ParallelScript and have it find the
equivalent parallel resistance of variables R1 and R2.
2. Navigate to the directory in which you want to save your program.

Chapter 4: matlab Programming 129


3. I n the command window, type “edit” to open a simple text editing
window, as shown below:

4. Create the script. This is the one-line piece of code:


Rp = (R1*R2)/(R1+R2)

5. Save the file as ParallelScript. matlab will automatically append
the suffix “.m” to the name to designate it is a matlab program. Before you
run the script, you must first define the variables it uses in the command
window as shown below:
R1 = 10

R2 = 15

6. Now run the script by typing the filename from the command window:
>>ParallelScript
The script should print
>>Rp = 6

7. When the script is done executing, the variables R1 and R2 that were
defined before the script ran will remain in the memory workspace
along with a new variable Rp that was created inside the script.

130 Programming for Electrical Engineers


NOTE
Scripts and function names cannot have spaces in them.
ParallelR.m is a valid matlab filename, whereas Parallel R.m
is not.

PRACTICE PROBLEMS
1. C
 reate a script called CurrentSolver that expects to have
the variables V and R defined. It should create a variable
called I and set it equal to the current defined by Ohm’s Law:
V = I R. ©

FUNCTIONS

Functions, like scripts, are programs consisting of collections of matlab com-


mands stored in a .m file. But functions correct two major problems with scripts
involving how variables are passed into and out of the program and how vari-
ables created inside the program are handled after the program ends.

How Scripts Work

Scripts require that variables be predefined with specific names before the script
is run, such as R1 and R2 in the previous example. Then the script is run, and the
script creates variables to store the result, Rp in the previous example. A more
complicated script may create intermediate variables to help work out the final
answer. All of these variables still exist when the script exits—the output variable
that holds the answer and any intermediate variables created to help compute
the answer. 

Chapter 4: matlab Programming 131


Script Problems

Scripts have two problems. First, the script user must know the name of the input
variables and the names of the new variable that the script creates to hold the
answer. If you use someone else’s script, you will have to open up the script in an
editor to figure out what the input and output variables are called. If the script
happened to use the same output variable name that you were already using,
your data would be overwritten by the script.

Another problem is that the script may need to create many intermediate vari-
ables to help compute the answer. All of these intermediate variables remain
in memory after the script exits, potentially cluttering up your workspace with
many undesired temporary variables. If any of these variables happen to have
the same name as variables you were using, your variables would be overwrit-
ten. Both of these problems can be avoided by using functions. 

How Functions Work

Functions are written the same way that scripts are written, except that they add
an extra first line. This extra line declares the program is a function, defines the
outputs, and defines the inputs. This is called the function declaration, and it
will be discussed in detail in the following section.

Functions are called differently than scripts. Scripts are called by first defining
the input variables and then by running the script. Functions do not require pre-
defining variables; variables are passed into and out of the function using the
following syntax:
 outputVariables = functionName(inputVariables)

You have used this already with built-in functions, like these:
y = exp(-6) % The input variable is -6 and y is set
 % to the function’s result
x = sin(pi) % The input variable is π and x is set
 % to the function’s result

132 Programming for Electrical Engineers


Here is a comparison of the ParallelScript program as a function, now
called ParallelFunction:

Script Function
Script program Function program
Rp = (R1*R2)/(R1+R2) function Rp = ParallelFunction(R1, R2)
Rp = (R1*R2)/(R1+R2)
Using the script Using the function
  R1 = 10   ParallelFunction(10,15)
  R2 = 15
returns 6 to the command window. Since it was not assigned
The script creates the variable to a variable, it is assigned to the default variable ans:
  Rp = 6   >> ans = 6

Notice that the script requires the input variables to be defined R1 and R2 and
creates the output variable that is always named Rp. Unlike the script, the func-
tion does not require input variables to be defined at all. In this example, the vari-
ables were passed directly in, and passed directly out. One could have defined
them using the same names as the function declaration used, as follows:
 R1 = 10
 R2 = 15
 Rp = ParallelFunction(R1, R2)

But the variables also could have been defined as anything because the func-
tion is not aware of any variables in the command window, except those passed
by the input arguments. For example, the following commands will work just as
well as those in the previous example:
 FirstR = 10
 SecondR = 15
 OutputR = ParallelFunction(FirstR, SecondR)

In fact, the input variables do not need to be separately defined, as this equiva-
lent example shows:
 OutputR = ParallelFunction(10,15); 

Chapter 4: matlab Programming 133


How the Function Runs

When a function is called by the user in the command line, like so:
ParallelFunction(10,15)
the function begins to execute. It begins with the first line:
 function Rp = ParallelFunction(R1, R2)
This first line tells the function to create temporary variables R1 and R2 and
to assign them the values that were passed into the function (i.e., 10 and 15,
respectively). Unlike a script, these temporary variables R1 and R2 will not stay
in memory once the function exits, and they will not interfere with any other
variables in the command window, even if the command window already holds
variables of the same name.

Except for the way variable names are handled, the rest of the function works the
same as a script, or as if it were typed directly in the command line. For example,
 Rp = (R1*R2)/(R1+R2)
creates a temporary variable Rp and assigns it the result of the computation,
with the temporary variables R1 and R2. Here the variable Rp is not left in mem-
ory once the program exits, and if the command window had a variable named
Rp, the temporary variable would not interfere with it. Inside the function, no
variables from the command window are accessible.

After the last line of the function is run, the function goes back to its declaration:
 function Rp = ParallelFunction(R1, R2)
and returns Rp to the command line. This can be viewed if the user calls the func-
tion in the command line, as follows:
ParallelFunction(10,15)
≫ 6
Or it can be set to a variable of the user’s choice, like so:
 Rout = ParallelFunction(10,15)
This creates the variable Rout and sets it equal to 6. In either case, the temporary
variables R1, R2, and Rp defined inside the function will not be left in the com-
mand window’s memory, and if the command window had already defined vari-
ables R1, R2, and Rp, they would not be changed once the function ran.

134 Programming for Electrical Engineers


In summary, functions, unlike scripts, pass whatever variables they need in and out
using the function declaration, eliminating the possibility of variable name con-
flicts. Any variables created while a functions executes will be removed once the
function ends, leaving only the variable(s) that the function was designed to return.
This behavior of the function is so preferable to that of scripts that we will use func-
tions exclusively from this point onwards in Programming for Electrical Engineers.

PRACTICE PROBLEMS
2. S ave the following script to MyScript.m. It takes three vari-
ables, Isource, R1, and R2, and computes current I1.
 Rp = (R1*R2)/(R1+R2);
 V = Isource*Rp;
 I1 = V/R1;
Remove all variables from matlab’s memory by issuing a clear
command. Then initialize the variables and run the script, like so:
 R1 = 10;
 R2 = 15;
 Isource = 5;
MyScript
What are the names and values of the variables in memory after
the script is run? These can be viewed from the Workspace panel. ®
3. The above program is rewritten as the function below and
saved in the file MyFunction.m:
 function I1 = MyFunction(R1, R2, Isource)
 Rp = (R1*R2)/(R1+R2);
 V = Isource*Rp;
 I1 = V/R1;

Chapter 4: matlab Programming 135


Remove all variables from matlab’s memory by issuing a clear
command. Then run the function as follows:

R = 10;

R2 = 15;

Isource = 5;

Ioutput = MyFunction(10,15,5);
What are the names and values of all the variables that are in the
current matlab session (i.e., what are the variables that are visible
in the Workspace panel) after the function runs? ®

FUNCTION ARGUMENTS

The variables passed into or out of functions are called arguments. We have
seen that these are declared in the first line of the function declaration, e.g.,

function outputArguments = functionName(inputArguments)

This declaration ensures that the variable outputArguments will be created


inside the function and will set it equal to computed result. Let us examine, then,
how any number of input arguments can be passed into the function and any
number of output arguments can be passed out of the function.

One Output Argument

This is the most common case. Examples include the built-in function exp()
and sin(). The function is declared as follows, where input arguments are
abbreviated with “…”:
 function outputArgument = functionName(…)
For example, a function that converts millimeters to inches could be defined as
 function inches = mm2inches(mm)
 inches = mm ./ 25.4;

136 Programming for Electrical Engineers


Notice that using . / rather than just / means the function mm2inches()will
work if given a vector or a scalar. The above function is saved as mm2inches.m
and can be called from the command line using the following syntax:
 myInchesVariable = mm2inches(254)
After calling this function, myInchesVariable holds 10. 

Two or More Output Arguments

Sometimes you will need to return more than one variable. An example of this is
a program that converts mm to inches and feet. The declaration for multiple out-
put arguments wraps the output variable names in square parentheses, like so
 function [output1, output2] = myFunction(…)
For example, a function that converts millimeters to feet and inches could be
written as
 function [feet, inches] = mm2ftin(mm)
 inches = mm ./ 25.4;
 feet = floor(inches/12);
 inches = inches - feet*12;

RECALL
The floor() command returns the integer part of its
argument. floor(3.7) for instance returns 3.

The above function must be saved as the file mm2ftin.m and can be called from
the command line using the following syntax:

[myfeet, myinches] = mm2ftin(5000)
Now the variable myfeet equals 16 and myinches equals 4.8504. Notice another
power of using functions. Since you previously created a mm2inches() func-
tion, you could change the second line in mm2ftin() from
 inches = mm ./ 25.4;
to
 inches = mm2inches(mm)
which simplifies your program by calling a function from within your function. 

Chapter 4: matlab Programming 137


Zero Output Arguments

Occasionally, it is useful for a function to not return any arguments, such as when
a function just displays a plot. An example you have already encountered is the
built-in plot(x,y) command. The declaration for a zero output function is
function myFunction(…)
For example, the following function creates an artistic-looking plot and returns
no arguments to the command line:
function coolPlot()
plot(fft(eye(11))); 

NOTE: PLOTS AS FUNCTIONS


It is often useful to write custom functions to create plots for
reports, especially if they are customized from the default plot
options. Reports are often revised, and it will save time to be able
to quickly regenerate a plot with updated data or to alter its style.

One or More Input Arguments

Variables are passed into functions in the first-line function declaration state-
ment to the right of the equals sign, as shown below for three input arguments:
 function outputs = myFunction(input1,input2,input3)
When this function is called from the command window using the syntax below,
 x = myFunction(1,2,3)
then variables called input1, input2, and input3 will be created and set equal to
1, 2, and 3, respectively. The function can also be called using the syntax
 x = myFunction(a,b,c)
Whatever the variable a, b, and c hold will now be assigned to input1, input2,
and input3. Variables a, b, and c will not be visible inside the function, but input1,
input2, and input3 will be. Once the function ends, input1, input2, and input3
will be destroyed. Any changes the function makes to variables input1, input2,
and input3 will not propagate outside the function. 

138 Programming for Electrical Engineers


Zero Input Arguments

Occasionally, a function that does not require any inputs is needed. A function
that always returns a random capacitor value, for instance, could be defined
using the following syntax:
 function randCap = RandomCapacitor()
Note there is nothing inside the parentheses since no variables are being passed
into the function. It is called from the command line as follows:
 x = RandomCapacitor(); 

Arguments Can Be Scalars, Vectors, or Matrices

Both input and output arguments can be scalars, vectors, or matrices. For
instance, take a custom simultaneous equation solver that takes the A coeffi-
cient matrix and the b coefficient vector described in Chapter 2 and computes
the result using the following function:
 function result = Simultaneous(A,b)
 result = A\b
The inputs, A and b, are a single matrix and vector, respectively, although both
could contain thousands of elements.

PRACTICE PROBLEMS
4. W rite the function declaration (that is, write the first line of
the function but not the code that calculates the answer) for a
function that computes the maximum frequency of a square
wave generated by a microcontroller given the frequency
of the microcontroller’s clock. Name the function clock1
and have it take one input called frequency and one output
called squarewave. ©
5. Write the function declaration for a function that takes one
vector of values, such as a list of all standard 5% resistor values,

Chapter 4: matlab Programming 139


and a second input that describes how many random resis-
tor values are requested and returns a vector of that many
random resistors. Only write the function declaration, not the
code to solve the problem. Call the function problem5. ©

 CREATING YOUR OWN FUNCTIONS

There are several steps to creating your own functions:


1. Change the matlab working directory into the folder that you wish to
hold your functions. This is done in the same way as described under the
Scripts heading on page 129.
2. Decide the names of the input and arguments since the function will only
have access to these variables. Use this information to write the function
declaration, which is the first line of the function.
3. Then decide what commands one would type at the command window
to solve the problem using these input variable names. These commands
form the remainder of the function. As part of this section, consider if
the input arguments will only be scalars or could be vectors or matrices.
Check that the output variable is assigned in the function.
4. Save the function as a file of the same name as declared in the function
definition. matlab will add a .m suffix.

Example

An earlier Practice Problem involved a script to use Ohm’s Law V = I R to solve for
the current given a voltage and a resistance.

Solution

Input arguments: V, R
Output arguments: I

140 Programming for Electrical Engineers


Function declaration: function I = ISolveFunction(V, R)
Commands using only the arguments: I = V./R;
Note that using “./” instead of “/” allows either or both V and R to be vectors.
Check: output variable I is assigned.
In summary, to solve the problem, the following text should be entered in the
editor window and saved as ISolveFunction.m:
 function I = ISolveFunction(V, R)
 I = V./R;

PRACTICE PROBLEMS
6. C reate a function called SeriesResistance that takes
two resistor values and returns their equivalent series
­resistance (which is their sum). ©
7. Create a function called ParallelResistance that takes
two resistor values and returns their equivalent parallel
resistance (which is their product divided by their sum). ©

COMMENTING PROGRAMS

The percentage sign % is used in matlab to denote a comment. All information on


the line following a % symbol is ignored. Use this to insert comments to help you
understand what your program does or to help break very large programs into
blocks. Continuing from the previous example,
 function I = ISolveFunction(V, R)
 I = V./R; % this is Ohm's Law V=I R solved for I
For short, two-line programs like this, you may not see the need for comment-
ing, but as your programs grow to tens or hundreds of lines of code, comments
become very important. 

Chapter 4: matlab Programming 141


CREATING HELP

You have used help with built-in functions, such as


help linspace
You can build help text into your functions as well. This is done by inserting com-
ments on the second line, immediately under the function declaration. All com-
ments between the function declaration and the first line of executable code are
returned to the command window when the user types
help functionName
where functionName is the name of the function in the function declaration,
which is the same as the name of the function’s file.
Building on the previous example:


function I = ISolveFunction(V, R)

% ISolveFunction finds current given voltage and resistance

% I = ISolveFunction(V, R)


I = V./R; % this is Ohm's Law V=I R solved for I

If this is saved as ISolveFunction.m, when the user types


help ISolveFunction
The command line window will return
 ISolveFunction finds current given voltage and resistance
 I = ISolveFunction(V, R)
Note the extra blank line that was added inside the program. matlab ignores
blank lines, so they can help to organize your program into logical blocks, like
the help and code areas in this example.

142 Programming for Electrical Engineers


PRACTICE PROBLEMS
8. C  reate a commented function F2C() that converts a tem-
perature in Fahrenheit to a temperature in Celsius. It should
run using the command F2C(32), for example, which will
5
return 0. The conversion formula is C = (F − 32). ©
9
The function should implement help; when the user types
help F2C
 the following is returned to the command line:
F2C returns a temperature in Celsius

given a temperature in Fahrenheit.

MORE COMPLEX FUNCTION EXAMPLES

Examine the following functions to develop your programming ability.

Example: Complex Parts in Polar Form Using Radians to Complex

Complex numbers in Electrical Engineering are often given in complex polar


form, written with a magnitude and an angle that can be in radians or degrees.
These were introduced in Chapter 2 in the Complex Numbers section on page
49; an example is 23∠1.23 (radians) or 23∠45° (degrees). matlab requires complex
numbers to be entered in rectangular form, i.e., using real parts and imaginary
parts like 4+j3 or 6*cosd(45) – j*sind(12). Chapter 2 described how a complex
number can be changed from polar form of mag∠angle into rectangular form of
realpart + j ∙ imagpart using the following formulas:
 realpart = mag*cos(angle)
 imagpart = mag*sin(angle)
Once the real and imaginary parts of the number are obtained, they can be
assembled into a single complex number z using the command:
 z = realpart + j*imagpart

Chapter 4: matlab Programming 143


Note that cos() and sin() in matlab expect angles in radians; if you need
to convert using angles in degrees, use the cosd() and sind() functions. A
function to do the entire conversion follows:
 function z = polarRadian2Complex(magnitude, radians)
 % polarRadian2Complex assembles the magnitude and
% angle parts of a complex number
 % into a single complex number.
%
 realpart = magnitude * cos(radians)
 imagpart = magnitude * sin(radians)
 z = realpart + j*imagpart

To use it to input 23∠0.5 radians into variable x, save as polarRadian2Complex.m


and call it from the command line, like so:

x = polarRadian2Complex(23,0.5)
matlab will respond with

x = 20.1844 + 11.0268i 


NOTE
Inside the function, the output variable is called “z,” but it was
called from the command line using a completely different
variable “x.” This is one strength of using functions—the
person using the function does not have to know what the function calls its
variables internally.

Example: Plot a Lowpass Filter’s Response Given a Cutoff Frequency

Courses in Signals and Systems will develop the following equation that describes
a lowpass filter:
1
H (f ) =
1 + j f / fo

In this equation, f is the input frequency in Hz and fo is the cutoff frequency in


Hz. The filter is designed to pass frequencies less than fo and block frequencies
above it. H(f) is a complex function of f, since it has a j term in the denominator.

144 Programming for Electrical Engineers


RECALL
A Bode-style plot uses semilogx and plots the vertical
(amplitude) axis in dB. To find the value in dB of a complex
number z, take 20 log10|z|.

Problem

Create a function called lowpass() that takes a cutoff frequency fo and creates a
Bode plot of the magnitude of |H(f)| from 1  ≤  f  ≤  100.

Solution

Since the function takes one number (fo) and returns nothing (it creates a plot),
the function definition line and help lines are
function lowpass(fo)
 % lowpass(fo) creates a Bode-style plot of the
 % response of a lowpass filter with a cutoff of fo
Then create a frequency vector, logarithmically spaced between 1 and 100Hz:
 f = logspace(0, 2, 50); % 1-100Hz = 10^0 – 10^2
Next, compute H(f):
 H = 1./(1+j*(f/fo)); % since using vectors, use ./
Now, change that into dB for the Bode plot (see the Recall inset above):
 dB = 20*log10(abs(H)); % find the magnitude of H in dB
Complete the plot and label it:
semilogx(f,dB)
title('Lowpass filter')
xlabel('Frequency (Hz)')
ylabel('Amplitude (dB)')
grid('on')
Save the program as lowpass.m and call it from the command line for a 10Hz
lowpass filter as follows:
lowpass(10)

Chapter 4: matlab Programming 145


The following Bode-style plot is displayed:

Note that none of the variables created inside the function remain after the func-
tion runs.

PRACTICE PROBLEMS
9. M
 odify the above function to return the filter response in dB
rather than plotting it. For example, using fo = 10, a vector of
50 values are returned, the first of which is −0.0432. ©

 SORTING

The matlab command sort() takes a vector of numbers and returns them in a
vector sorted from smallest to largest. For example,
 vout = sort([4 9 1 -6 0])
returns
vout = [-6 0 1 4 9]
This capability can be useful inside functions that simulate circuit designs over
many different random component value variations and will be used in one of
the lab problems.

146 Programming for Electrical Engineers


PRO TIP: GRADUATE STUDIES IN EE

Masters
There are two types of master’s degree programs: industrial
and research. This is confusing since there are no standardized
names for each type of program. Some universities offer both,
while others offer only one of the two. Some call one degree a
Masters of Science (M.S.) and the other a Masters of Engineering
(M.Eng.), while some programs call both an M.S. Examining the
graduation requirements will make it clear which course(s) a
particular university offers.
• Industrial M.S.: Industrial M.S. programs prepare students for
jobs in industry. They typically require 8–10 classes. A thesis,
if required, is small, i.e., the equivalent of one or two courses.
It takes typically one full year to complete, with the associ-
ated cost of tuition.
• Research M.S.: This prepares the student for a research posi-
tion and is the first step in earning a doctorate. Coursework
varies widely, from as little as three courses to as much as
required for an industrial masters. A thesis is mandatory
and is a major component of the work. It takes longer than
an industrial masters, often 18–24 months. This is often not
a separate degree program but part of a doctoral degree
program, so tuition cost may be waived in return for work as
a Teaching Assistant (TA) and Research Assistant (RA), de-
scribed below. 

Doctorate
Engineering doctorate degree programs are usually spon­
sored fully through a mix of Teaching Assistantships (TAs)

Chapter 4: matlab Programming 147


and Research Assistantships (RAs), which typically provide
tuition remission and a modest stipend to pay for food and
basic accommodations.

In the first year, the student usually works as a TA and teaches


undergraduate students. During this year, the doctoral
candidate is expected to seek longer-term funding from
professors as an RA. This is done by visiting research labs
whose work the student finds appealing. If the student and
the principal investigator (or PI, the laboratory’s lead professor)
think they may be a good match (i.e., the PI believes the student
will be an asset to the laboratory, and the student enjoys
the type of research work, likes the other RAs, and trusts the
professor), then the student begins working part time in the
laboratory as a trial run. After a semester of this, it should be
clear if the lab is a good fit for the student, and the PI will offer
an RA to the student. This will allow the student to drop the TA,
keep the tuition waiver, and now be paid to do the research that
is required by his or her thesis. The PI becomes the student’s
primary research advisor.

A less-common, but more prestigious, type of funding is a


fellowship. A doctoral student holding a fellowship receives
tuition remission and a stipend comparable to that of an RA, but
the source of funding for the fellowship comes from an outside
agency, rather than from the PI who funds the RA. This makes
students with fellowships very desireable for PIs, who no longer
have to pay for their tuition and stipend.

148 Programming for Electrical Engineers


 RELATIONAL EXPRESSIONS

A logical expression is a statement that evaluates to either “true” or “false.” Rela-


tional operators are a type of logical operator, and compare two values such as
5 > 4 (true) or 3 ≤ −4 (false). matlab returns a 1 to indicate true and 0 to indicate
false. matlab has several types of relational operators; some of the most common
are listed below:

Operator Name Example Example result


> Greater than (5 > 2) 1
< Less than 7 < -6 0
>= Greater than or equal a = -5 0
to a >= 6
<= Less than or a = 7; b = 9 0
equal to a*b <= a+b
== Equal to 5 == 5 1
~= Not equal to 5 ∼= 5 0
isequal() Equal to, works with a = 'hello' 0
strings, vectors, and b = 'Hello' (capitalization
matrices isequal(a,b) matters)

Note that one of the most common relational statements, the test to see if two
scalar numbers are the same, is not = but rather ==.

In the example below, the function called password() tests to see if the input
is “secret” and outputs a 1, if so, and 0, otherwise:
 function result = password(input)
 % password tests to see if the input is
 % the string 'secret'
 result = isequal(input, 'secret');

Chapter 4: matlab Programming 149


PRACTICE PROBLEMS
10. Modify the above function to take a number as an argument
and test to see if it is 999. If so, it outputs a 1; otherwise, it
outputs a 0. Call the function problem10(). ©

LOGICAL OPERATORS

Logical operators operate on logical true (1) or false (0) arguments and are par-
ticularly important to ECE students, since binary true/false signals form the basis
of all digital computers. Common ones are listed below:

Operator Name Example Example result


&& AND. True only if both x = 5;
­operands are true. (x>1) && (x<4)
0 (only one is true)
|| OR. True if either oper- x = 5;
and is true. (x>1) || (x<4)
1 (the first test is true)
∼ NOT. Changes true to a = 'Hello';
false and false to true. ∼isequal(a,'T') 1 (the strings are not equal)

If you are familiar with digital gates, the associated digital logic symbols are:

Operator Symbol

AND

OR

NOT

150 Programming for Electrical Engineers


As an example, suppose you need to check the validity of numbers in a large data-
set of electronically sampled location measurements. These numbers should all
be nonnegative integers less than 10 or could be −1 if the sensor is returning an
error condition. The following function tests whether a particular number meets
these criteria:
 function out = test(in)
 isError = (in == -1); % 0 if non-error, 1 if error
 isInteger = (in == floor(in)); % 0 if non-integer, else 1
 isInRange = (in >= 0) && (in < 10);
 out = isInteger && (isInRange || isError);

PRACTICE PROBLEMS
11. Create a function called problem11() that takes a scalar
(single number) and returns a 1 if the input is both not an
integer and is negative. Thus problem11(pi) returns 0,
but problem11(-pi) returns 1. ©

LOGICAL OPERATIONS ON VECTORS AND MATRICES

It is frequently desirable to perform logical operations on large datasets in vec-


tors or matrices. A logical operation on a vector will return a vector of logical
results. For example,
 v = [-2 -1 0 1 2]
 b = (v >= 0)
results in
b = [0 0 1 1 1]

Chapter 4: matlab Programming 151


There are four common actions done with such a resulting vector (or matrix) of
logical values:
• Determine if any of the logical results are true
• Determine if all of the logical results are true
• Determine how many of the results are true
• Replace the values of the vector or matrix for which the given
­relationship is true with another number

Determine if Any of the Logical Results Are True

Use the any() logical operator. In the above example,


any(b)
or equivalently
any(v>=0)
evaluates to true (returns 1) since some of the values in vector v are positive. 

Determine if All of the Logical Results Are True

Use the all() logical operator. In the above example,


all(b)
or equivalently
all(v>=0)
evaluates to false (returns 0) since not all of the values in vector v are positive. 

Determine How Many Results Are True

Since logical true values are represented by the numeric value of 1, summing the
results will return the total number of operations that evaluates to true. Using
the above example,
sum(b)
or more directly
sum(v>=0)
will return 3. 

152 Programming for Electrical Engineers


Replace the Values of the Vector for Which the Given Relationship Is True
With Another Number

This is a very common requirement and has its own syntax. Up to this point, vec-
tors have been indexed with a number like v(4) and matrices have been indexed
with a pair of numbers like m(3,4). However, they can also be indexed by a logical
vector or matrix of the same size as shown in the following example. To replace
the negative elements in the following vector with 9’s,
 v = [-2 -1 0 1 2]
 v(v<0) = 9
Now v = [9 9 0 1 2]

PRACTICE PROBLEMS
12. Create a function called problem12() that takes a vector
of numbers and returns two variables. The first it returns is
a variable called “count” that is the count of all the values
of the input vector greater than 10. The second is a vector
called “result” and is equal to the input, but with all values
greater than 10 replaced with 10. In other words, its function
definition is
function [count, result] = problem12(x)

and as an example of its use
[count, result] = problem12([-5 20 6
11])
causes count = 2 and result = [-5 10 6 10]. ©

Chapter 4: matlab Programming 153


 CONDITIONAL BRANCHING: if-end

Thus far, every matlab program we have discussed has executed every line of code
in it when run. if-end statement blocks are an exception; the code between
the if-end statement only runs if a logical statement is true, e.g.,
if (logical expression that evaluates to true or false)
 % Statements here execute if the logical
 % expression is true.
 % All statements until the closing end are
 % conditionally run
end
For example, the following statements duplicate the functionality of abs(x),
which takes the absolute value of x:
if (x < 0) % if x is negative
x = -x;

 end % continue program
Notice that each if statement needs to be paired with a matching end state-
ment. Also notice that the statements between the if and end pairs are
indented. Since matlab ignores spaces, these indentations are optional, but they
make the code easier to read.

Some programmers use flow-


charts to show how their code
flows.While this technique is
no longer as common as it
used to be flowcharts
make clear the way that program
execution branches around
if-end blocks.

154 Programming for Electrical Engineers


A more complicated example evaluates the sinc(x) function, a very common
function used in signal processing, which is defined as follows:
sin (x)
 , x≠0
sin(x) =  x
 1,
1 x =0
This is implemented in the following example:
 function y = sinc(x)
if x ∼= 0
y = sin(x)/x;

end
if x==0
 y = 1;
end

PRACTICE PROBLEMS
13. Create a function called problem13 that takes a string
and returns a string which is set to the phrase “unlocked” if
the supplied password is “secret” and “locked” otherwise.
© Hints:
• Unlike other programming languages, matlab uses a
single quote' to denote strings, not double quotes “.
• == and ∼= compare numbers; isequal()
and ∼isequal compare strings, vectors, and arrays.

Chapter 4: matlab Programming 155


CONDITIONAL BRANCHING: if-else-end

In the previous section, a sinc function was developed that ran one set of code
if x equaled zero and used a second if statement to run a second set of code if
x was not zero. This need, to run one set of code if the logical test is true, and a
different set of code if the logical test is false, is so common that it has its own
syntax: if-else-end.
if (logical expression that evaluates to true or false)
 % statements here execute if the logical
 % expression is true
else
 % statements here execute if the logical
 % expression is false
end
The sinc() function developed in the previous section can be simplified using
this syntax, as shown below:
function out = sinc(x)
 % sinc(x) takes a scalar, returns sinc
if (x==0) % if x is zero
 out = 1;
else
 out = sin(x)/x;
end

All conditionally executing blocks


of code can have many statements
that run if the logical test is true or
false, although this example has just
one line of code in each. Remember
to end the if-else block with an end
statement to mark the code that will
run regardless of the if’s logical test. 
if-else-end flowchart showing program execution flow.

156 Programming for Electrical Engineers


PRACTICE PROBLEMS
14. Update the previous problem13 function to use the
if-else-end statement, and save it as problem14. ©

CONDITIONAL BRANCHING: if-elseif-else-end

If there is one outcome of a test that requires special code, we use an if-end
block. If there are two different outcomes that each require special handling, we
use an if-else-end block. If there are more than two outcomes that require
different code blocks to be executed, the if-elseif-elseif-…-else-end
block works, using as many elseif statements are needed for each possible
outcome, with a final and optional else statement handling all remaining cases.

The many possible outcomes of an if-elseif-else-end block.

As an example, one could generate a random number between 0 and 1 and,


based on that number, provide a number of different responses. For example,
 function out = isECEfun()
r = rand();
if (r<0.2)
 out = 'always!';

Chapter 4: matlab Programming 157


elseif (r<0.4)
 out = 'sometimes';
elseif (r<0.6)
 out = 'usually, but not on Mondays';
elseif (r<0.8)
 out = 'up until 1:30AM';
else
 out = 'can I change my major to biology?';
end 

PRACTICE PROBLEMS
15. Create a function called problem15 that computes the
sign function used in control theory. It takes a number and
returns −1 if the input is negative, 0 if the input is zero, and
1 if the input is positive. Use an if-elseif-else-end
construction. ©

CREATING STRINGS WITH EMBEDDED NUMBERS

To create a string with both text and embedded numbers in it, use sprintf().
For example, the commands
 current = 36.5;
 s = sprintf('The current is %g Amps.', current);
create a string s with the contents The current is 36.5 Amps.

RECALL
To change a string into a number use str2num(), for
instance, x = str2num('42').

158 Programming for Electrical Engineers


Each occurrence of the %g character inside the single quotation marks is replaced
by the number that follows the quotation marks. There can be more than one
variable, e.g.,
 node = 5; voltage = 42;
 s = sprintf('Node %g voltage is %g Volts', node, voltage)
will cause s to hold the string Node 5 voltage is 42 Volts

The sprintf() command permits extensive formatting. Three of the most


common formatting commands are the \n command that inserts a new line
(i.e., a vertical line space), the \t command that inserts a tab to help align tables,
and the %0.2f command that formats the number with two decimal spaces. As
an example, consider the single line below:
 s = sprintf('Node 1:\t %0.2fV\nNode 2:\t %0.2fV',pi,2*pi);
will create a string s that displays as the following two lines of formatted text:
Node 1: 3.14V
Node 2: 6.28V

Displaying Strings to the Command Window

Sometimes you will need to display a result to the command window directly,
rather than setting a string variable equal to it. In this case, use fprintf(),
instead of sprintf(), as follows:
 fprintf('Node 1 = %0.2fV\nNode 2 = %0.2fV\n',pi,2*pi);
 prints the following to the command line:
 Node 1 = 3.14V
 Node 2 = 6.28V
Note the trailing \n inside the quotation marks; it is necessary because without
it, the cursor will be left dangling at the last character written (to the right of the
final “V” character in the example just given), and the next character written will
continue from that point, rather than being reset to the beginning of the next
line as expected.

Chapter 4: matlab Programming 159


PRACTICE PROBLEMS
16. Write the fprintf() command (not the entire function)
that, given a variable R, prints the statement (for example, if
R = 26.2) to the command window ©:
 The resistance is 26.2 Ohms

TECH TIP: WIRE SIZING

Wire sizes in North America are specified by the American Wire


Gauge (AWG) standard. Smaller wire diameters have higher wire
gauge sizes. General-purpose hookup wire used in electronics
prototyping is typically 22 AWG; thicker wire used to carry
electricity to kitchen appliances is often 18 AWG, and heavy-duty
power extension cables are 14 AWG. Wire is sized as a function of
its maximum required current carrying capacity and by the length
over which it is required to carry the current. The table below lists
common AWG sizes with wire diameter and its recommended
current capacity over short distances such as inside appliances:

AWG Conductor diameter (in.) Max current capacity (Amps)


12 0.0808 41
14 0.0641 32
16 0.0508 22
18 0.0403 16
20 0.0320 11
22 0.0253 7
24 0.0201 4

Wire is also available in two types: solid and stranded. Solid


wire is composed of a single, solid (usually copper) conductor.

160 Programming for Electrical Engineers


It is preferred for use in prototyping because it can be pushed
into the holes of solderless prototyping breadboards and for
power distribution in buildings because it is easier to connect
to receptacles. Stranded wire is composed of several strands of
smaller wires bundled together. Stranded wire is more flexible
than solid-core wire and is preferred in applications that may
repeatedly bend, such as the power wires connecting to a
laptop or an electric iron.

PRACTICE PROBLEMS
17. Write a function called problem17 that takes an AWG
wire size (even sizes 12–24) and returns the following string
(using as an example an AWG of 12) “AWG 12 is 0.0808 inches
diameter, max current 41A.” Use if-elseif-elseif-end
statements to check the wire size and to set temporary wire
diameter and current capacity variables. Then at the end use
one sprintf() statement to create a string using those
temporary wire diameter and current capacity variables that
are returned by the function. ©

Chapter 4: matlab Programming 161


TECH TIP: ENGINEERING NOTATION

Engineers use unit postfixes (a letter following a number) to


express large or small numbers so that the mantissas are always
between 1 and 1000. This is not scientific notation: 4.3 × 10−11
in scientific notation is written in engineering notation as
simply 43 p, for example. These postfixes are in ratios of 1000.
Common ones used in our profession are shown below. Note:
Capitalization matters! A 1 MΩ resistor is extremely large; a
1 mΩ resistor is very small. Notice how the numerical parts of all
the examples are between 1 and 1000.

Prefix Name Scaling Engineering Scientific notation


example (do not use!)
p pico 10–12 12 pF 12 × 10−12 F
n nano 10–9 −434 nV −434 × 10−9 V
μ micro 10–6 1.2 μA 1.2 × 10−6 A
m milli 10–3 150 mH 0.15 H
– – 1 36 H 36 H
k kilo 103 13 kV 13,000  V
M Mega 106 1 MΩ 106 Ω
G Giga 109 96 GB 96 × 109 B
T Tera 1012 2 TB 2 × 1012 B

As you get used to using these symbols you will find they will
help you do mathematics spanning large intervals easily. For
instance, a 12 μA current through a 4 MΩ resistor generates their
product in voltage, which is 12 × 4 in units of μ (two up from the
center) times M (two down from the center), which is simply 48
times the center, or 48V. No powers of 10 are required!

162 Programming for Electrical Engineers


The if-elseif-else-end construct can be used to change numbers into
engineering form. Here is an implementation that works for milli, (unity), and
kilo prefixes:
 function s = engform(x)
 % engform take a number and rewrites it in
% engineering form
 % 0.0032 is returned as 3.2m.
 % 12452 is returned as 12.452k
 % 98.6 is returned unchanged as 98.6
if (x<1) % values is in milli units
 x = x*1000;
 prefix = 'm';
 elseif (x<1e3) % no prefix needed if between 1 and 1000
 prefix = '';
 else % value is in a kilo units
 x = x/1000;
prefix = 'k';
end
 s = sprintf('%g %s',x,prefix);
Note that %g is used in sprint for numbers and %s is used for strings.

TECH TIP: RESISTOR COLOR CODES

The size of a resistor is not related to its resistance but rather


to how much power it can dissipate. Many modern ones
are in extremely small surface mount packages. The 0201
package, for instance, is about 0.02″ × 0.01″; two could fit

Chapter 4: matlab Programming 163


on the period at the end of this sentence. However, most
resistors used for prototyping in solderless breadboards are
1/4W or 1/8W sized and look like this magnified image:

These resistors have four bands of color that with some practice
can be read by sight according to the following diagram:

Color Digit Digit Multiplier Tolerance


Black 0 0 1
Brown 1 1 10 1%
Red 2 2 100
Orange 3 3 103
Yellow 4 4 104
Green 5 5 105
Blue 6 6 106
Violet 7 7 0.1%
Gray 8 8
White 9 9
Gold 5%

The above resistor is gray, red, yellow, and gold, meaning


82 × 104 = 820 kΩ, 5% tolerance.

164 Programming for Electrical Engineers


PRACTICE PROBLEMS
18. Write a function that takes a resistor digit from 0 to 9 and
returns its color code. Use the if-elseif-else-end
construct. For example, s = problem18(4) sets s equal
to ‘Yellow’. ©

PRO TIP: INDUSTRY OR GRADUATE SCHOOL?

Even at the start of their studies, EE students often wonder if


they should enter industry or graduate school after completing
their bachelor’s degree. It is a hard decision and perhaps best
summarized by listing the benefits of each approach.

The benefits of going directly into graduate school:


• Many careers require a graduate degree, such as manag-
ing large engineering projects or performing cutting-
edge research.
• Most electrical engineers eventually earn a graduate
degree, so it makes sense to do so when:
– Material learned as an undergraduate is the freshest
– Additional life responsibilities are less likely to
­impinge on studies
– An early start may help boost career advancement
significantly.

Chapter 4: matlab Programming 165


The benefits of going into industry first:
• Graduate school requires a specialization within EE, and
it can be difficult to choose without some industry expo-
sure first.
• Since graduate school admissions favor a student’s most
recent accomplishments, students without high under-
graduate GPAs may do well in industry and then gain
entry into graduate programs they would not have been
accepted into directly out of college.
• New graduates can earn and save significantly during a
few years in industry.
• Many employers, especially large ones, pay their employ-
ees to get an M.S. in a related field.
• New graduates may find they enjoy the industry position
they land with their B.S., thus saving the time, expense,
and opportunity cost of pursuing unnecessary graduate
studies.

With these many reasons supporting both courses of action, it


is not surprising that there is no consensus. Statistics indicate
that roughly 25% of graduating seniors continue directly to
graduate programs in electrical engineering and computer
engineering and about 55% enter engineering-related industry
and government positions after graduating. The remaining 20%
pursue a variety of other options including military, business,
law, and medicine. Of those students who graduate and enter
engineering industry, about 75% will continue at some point
in their career to graduate school, often after first working 3 to
5 years.

166 Programming for Electrical Engineers


Many students seek paid summer internships, often during
their rising junior or senior years. Besides earning a substantial
amount of money, these often help clarify the choice between
industry and graduate school. If the student chooses the former,
internships often lead to postgraduation job offers.

Chapter 4: matlab Programming 167


COMMAND REVIEW

Utility Functions
vout = sort(vin)  returns vector vout of the elements in vin, sorted from
smallest to largest
sum(v)  returns the sum of the values in vector v

Relational Statements
<, <=  less than, less than or equal to
>, >=  greater than, greater than or equal to
==, ∼=  equal to, not equal to
isequal()  isequal works with strings, vectors, matrices

Logical Operators
a && b  AND, true if both a and b are true
a || b  OR, true if either a or b is true
∼a  NOT, negates the logical value of a
all(v)  true if all logical values in vector v are true
any(v)  true if any logical values in vector v are true

Conditional Statements
if (a)-end  executes code up to the end if statement a is true
if (a)-else-end  executes one set of code if a is true, a different set if false
if (a)-elseif-else-end  multiple tests each with different code sets

Embedding Numbers and Strings in Strings


sprintf('%g bits',8)  creates a string with “8 bits” in it
sprintf('%g %s',8, 'bits')  also creates the string “8 bits”
fprintf('%g bits\n',8)  displays “8 bits” to the command window 

168 Programming for Electrical Engineers


LAB PROBLEMS

1. C reate a function called problem1 that takes the values of two resistors,
R1 and R2, and a character code that can be “S” or “P.” It returns the value of
the resistors in series if the code is “S” and in parallel if the code is “P.” The
function definition is as follows:
 function Rout = problem1(R1, R2, code)
2. Create a function called problem2 that takes two real numbers, a
magnitude, and an angle in degrees and returns one complex number
whose value in polar coordinates is described by that magnitude and angle.
You may need to review the information about complex numbers from
Chapter 2. The function definition should be
 function z = problem2(mag, degrees)
To test it, problem2(10, 30) should return 8.6603 + 5i.
3. Create a function that does the inverse of the above problem; it takes a
single complex number z and returns its magnitude and angle in degrees.
The function definition should be:
 function [mag, degrees] = problem3(z)
To test, [mag,degrees] = problem3(1+j) should return
 mag = 1.414, degrees = 45
4. A small college stadium uses 250 high-efficiency LED lighting modules.
Each module consumes 500 W of power. If electricity costs $0.000135/W
every hour, write a function that takes the number of hours that the lights
must be on and returns a string containing the cost of electricity used, in
dollars. The function definition is as follows:
 function str = problem4(hours)
The answer should be rounded to the nearest cent and the string should
begin with a “$,” as shown in the example below:
problem4(7) returns
$118.13

Chapter 4: matlab Programming 169


5. V
 oltage dividers, introduced in Chapter 2, take a voltage V1 and reduce it to
V2 using resistors R1 and R2 as shown in the schematic diagram. This circuit
uses a constant current I.

The two formulas describing this circuit are shown below:


R2 V1
V2 = V1 , I=
R1 + R2 R1 + R2
 rite a program that takes as arguments V1, V2, and I and returns the resistors R1
W
and R2 needed to build the circuit. The function definition should be as follows:
 function [R1, R2] = problem5(V1, V2, I)
Testing with [R1, R2] = problem5(12, 4, 0.01) returns
 R1 = 800, R2 = 400
6. A measure of energy used by electrical engineers is the Watt-hour
(abbreviated W∙hr), which is equal to 1 W for 1 h. Solar cell panels provide
an annual energy output of 20 W∙hrs per square foot of solar cells. Write
a function that takes the width and length of a roof surface and returns a
string with the expected annual energy output if the roof were covered
with solar cells. If the number is less than 1000 W∙hr, return the answer like
this: “936 W-hrs.” If the answer is equal to or over 1000 W∙hrs, such as 2500,
covert it into kW∙hrs, such as “2.5 kW-hrs.”

T he function definition is as follows:


 function str = problem6(width, length)
Testing with str = problem6(20, 40) returns
16kW-hrs
7. A particular class has an overall semester grade that is entirely dependent
on three equally weighted tests. Write a function that takes the first two
test grades, and a desired overall class grade, and returns what the last
grade must be in order to earn the given desired overall grade. The function
definition should be

170 Programming for Electrical Engineers


 function g3 = problem7(g1, g2, gdesired)
Testing with problem7(85, 92, 90) should return 93.
8. The circuit shown in the schematic diagram slowly blinks the LED. It uses
two new components: bipolar junction transistors (BJTs).

The time between blinks is given by the equation below:


tblink = (0.014) R
where tblink is measured in seconds and R is measured in kΩ and can range
between 10 kΩ  and 100 kΩ. For example, if R is 22 kΩ, then tblink = 0.308 s.
Write a problem that does the opposite (i.e., it takes tblink as an argument
and returns the required resistor R value in kΩ). If the value of R is greater
than the allowable range of 10 kΩ –100 kΩ, it instead returns −1.

Testing with R = problem8(7) returns


 R = -1
9. A more complicated oscillator circuit than the one described in the previous
problem can create sinusoidal and square waves from 0.01 Hz to 1 MHz. It
uses the XR-2200 integrated circuit (IC), as shown below:

Chapter 4: matlab Programming 171


T he R and C values control the frequency at which the circuit oscillates
­according to the equation f = 1/(R C), where R can be in the range 4 kΩ–200 kΩ
and C can be in the range 10−9 F to 10−4 F. Write a function that takes the
value of R in Ohms and C in Farads and returns either the frequency at
which the circuit oscillates if R and C are in range or −1 if they are not in the
allowable range.
The function definition is as follows:
 function f = problem9(R,C)
As an example,
 f = problem9(5e3, 4.7e-5)
 sets f = 4.2553, indicating oscillation at about 4.26 Hz, but entering
 f = problem9(5e3, 4.7e-4)
 sets f = –1 since the capacitor value is not in range.
10. If you have two resistors you can use them individually or in combination
to get four different values of resistance. Write a program that, given 2
resistors R1 and R2, outputs a vector with all possible values of resistance
in sorted order (that is, R1, R2, and their value in series, and their value in
parallel, sorted from smallest to largest). The function definition is
 function Rlist = problem10(R1, R2)
Testing it with Rlist = problem10(10,15) should return:
 [6, 10, 15, 25]
11. More challenging: do the same problem as above, but using three resistors.
There are many different ways to combine them (for instance: R2 alone, R1
in series with R3, R1 in series with [R2 and R3 in parallel]). This is a tough
problem! See how many unique ways you can combine them—the more
unique combinations, the higher your score. Sort the resulting values from
lowest to highest. The function definition should be
 function Rlist = problem11(R1, R2, R3)
Testing it with Rlist = problem11(30,70,420) should return
[ 20 21 28 28.2692 30 60 60.5769 70 80.7692 90 98
100 420 441 450 490 520]

172 Programming for Electrical Engineers


12. High pass filters are used to block low frequencies and pass high frequencies.
An example of one such filter is shown in the schematic diagram.

It has a corner frequency, which is the demarcation between its blocking


and passing frequencies, of
1
f=
2π RC

where f is in Hz and R and C are in Ohms and Farads, respectively. Create a


function called problem12 that takes the values of R and C and returns
the corner frequency f. The function definition is as follows:
 function f = problem12 (R, C)
13. Microcontrollers frequently use 8 bit digital values which are integers between
0 and 255, inclusive. Create a function that takes a vector of input values and
returns its closest integer between 0 and 255. The function definition should be
 function result = problem13(in)
Testing it with
problem13([-4.2 0 0.3 2.4 25 254.5 255 999])
should return:
[0 0 0 2 25 255 255 255]
14. Students decide to use matlab to roll a virtual die in a Dungeons & Dragons™
game. Use the rand() command with the ceil()command, or the new
command randi(), with the sum() command, which takes a vector
and returns the sum of its components. The function should take two
arguments: the first is the number of rolls and the second is the virtual die’s
number of sides, and it should return the sum of all the rolls. For example, a
single roll of a twenty-sided die would be made using
problem14(1,20)

Chapter 4: matlab Programming 173


a nd the sum of three rolls of a six-sided die, which would be some integer
between 3 and 18, is found using
problem14(3,6)
15. Write a function that improves engform to work with all of the given
prefixes. That is, it should take an argument like 0.0001235 and return
“123.5u” (use “u” for “μ”). The function definition should be
function s = problem15(x)
Hint: Build it using the starter code in the Tech Tip: Engineering Notation.
16. The digital circuit shown in the schematic diagram has the truth table
shown below. This means, for example, that when x = 0, y = 0, and z = 1, out
will be 0, but when x = 0, y = 1, and z = 0, out will be 1. Inputs and outputs
will always be 0 or 1.

x y z out
0 0 0 0
0 0 1 0
0 1 0 1
0 1 1 1
1 0 0 0
1 0 1 1
1 1 0 0
1 1 1 1
 reate a function called problem16 that takes the values of x, y, and z and
C
returns the result out. The function definition is as follows:
 function out = problem16(x,y,z)
 For example, problem16(0,1,0) should return 1.

 If anything other than a 0 or 1 is input into the function, the function returns
−1. Use the truth table to check your work.

174 Programming for Electrical Engineers


17. Challenging!: Write a function called problem17 that takes a resistance
value that is an integer from 1 to 1,000,000, and outputs a string of four
colors that correspond to the resistor’s color code for a 5% tolerance
resistor. Do not capitalize the colors but put a space between them. The
function definition should be
 function s = problem17(x)
Testing it with problem17(10000) should return the matlab string:
'brown black orange gold'
Hint: use if-elseif statements to print the color strings. There are other
techniques that can do this more elegantly not yet covered (e.g., by using
switch statements, cell arrays, or string arrays).      

Chapter 4: matlab Programming 175


PROGRAMMING II: LOOPING
5
Looping is a powerful programming technique that allows matlab users to
execute a set of code multiple times, or over every value in a vector. For example, if
you need to run a simulation in which a filter’s response to variations in resistor tol-
erance is calculated and displayed for 1000 random perturbations in resistances, or
calculate the output of a circuit whose input is a complicated input waveform sam-
pled at 1000 different times, the for-end loop makes such applications possible.

OBJECTIVES

After completing this chapter, you will be able to use matlab to do the following:

•  rogram using for-end loops


P
• Understand how to index vectors within for loops
• Nest loops inside each other
• Create functions that call other user functions
• Program using while-end loops
• Understand how to preallocate memory to speed program execution

Programming for Electrical Engineers 177


DISP

Previously, fprintf()was introduced as a function to print text and numbers


to the screen, possibly using formatting characters including tabs and newlines.
A simpler command that can print either pure string text or a variable contain-
ing a number or vector, but not combined text with numbers, is disp(). For
example,
disp('Hello world')
 v = [1 2 3 4]; disp(v)
will cause the following to print to the command window:
Hello world
 1 2 3 4
Use disp() instead of fprintf() when you only need to print a simple vari-
able. It is frequently helpful when debugging to put in a disp() statement to
check how the code is evaluating inside a function. 

FOR-END LOOP

The for-end loop is used to repeat a section of code for a known number of
times, as in the example below:
 for i = 1 : 10
  disp('ECE is fun');

end
The for-end loop requires the creation of a loop variable, here called i, and a
loop vector, here the set of numbers from 1 to 10. The loop executes as many
times as there are entries in the loop vector, and for each iteration the loop vari-
able takes on a successive value of the loop vector. There can be any number of
command lines inside the for-end loop. Notice how these commands are typi-
cally indented to make them easier to read, much like the commands inside the
if-else-end block are indented.

178 Programming for Electrical Engineers


For example,
for i=1:5
  disp(i)
end
will print the following to the command window:
1
2
3
4
5

The code below makes a list of the squares and cubes of several even numbers:
for x=2:2:6
 disp([x x^2 x^3])
end
The above code prints the following to the command line:
2 4 8
4 16 64
6 36 216

PRACTICE PROBLEMS

1. What does the following function do? Try to figure it out


before you run it to check. Pass in a value between 5 and 10
to check your understanding.
function problem1(n)
x=1;
 for i = 1 : n
 x = x+x;
 disp(x)
end

Chapter 5: Programming II: Looping 179


2. Fill in the missing part below, labeled ***, to create a function
that takes a single resistor value r, returns nothing, and displays
the value of r in parallel with resistors of standard values 10, 15,
22, 33, 47, 68, 82 using a for loop. Test it with a value of 30. ©
function problem2(r)
 for r2 = [10 15 22 33 47 68 82]
 rp = (*** a function of r and r2 ***);
 disp(rp)
end
3. Write a function that takes no arguments, returns no arguments,
and prints a two-column list that converts degrees to radians. It
should print from 0 to 180 degrees in 5 degree increments. ©

 FOR-END LOOPS INDEXING VECTORS

One of the most common uses of a for loop is to index a vector. This permits
complex operations to be applied to vectors. For example, a different way to
accomplish the previous class problem is in the following function:
function ForIndexingVectorExample(r)
 vAllResistors = [10 15 22 33 47 68 82];
 for i = 1:length(vAllResistors)
 rCur = vAllResistors(i);
 rp = (r*rCur)/(r+rCur);
 disp(rp)
end
This example begins by defining a vector holding all standard values resistors
called vAllResistors. Then it creates a loop variable i which iterates from 1 to the

180 Programming for Electrical Engineers


number of resistors in vAllResistors. For each iteration, it pulls one resistor out
of the vector and calls it rCur. Then it finds the parallel combination of rCur with
whatever resistor value was passed into the function and displays the result.

Up to this point, vector math has been handled with a single operation, for exam-
ple, multiplication of vector v by a constant c is the single operation: v*c. This
operates on the entire vector at once and is very efficient, but some operations
are more easily understood using a for loop that steps through every value
inside the vector. For instance, consider a piecewise-linear function called the
step function and abbreviated u(t), defined and graphed as follows:

A function that plots this same function is given below:


 function plotStepFunction() % takes and returns
% no arguments
 vt = linspace(-2, 3, 1000); % horizontal axis
 % has 1000 points
 vu = zeros(1,1000); % create vertical data vector
 % of same size
 for i = 1:length(vu)
 
t = vt(i); % t loops through each point
 % in vector vt

Chapter 5: Programming II: Looping 181


 if (t<0)      % if t is negative
  vu(i) = 0;   % then vu at that time is 0
 else        % otherwise
  vu(i) = 1;   % vu at that time is 1
 end
end
plot(vt,vu)
Notice how the for-end loop sets t to every possible value of the vt vector, and
then individually performs some operation on it—here, checking to see if it is
positive or negative, and then creates the output vector accordingly.

The more complex example plot below plots the following mathematical func-
tion from 0 ≤ t ≤ 30:

function plotPiecewiseFunction()
vt = linspace(0,30,1000); % let t range from 0 to 30
vf = zeros(1,1000); % fill with 0’s
for i = 1 : 1000
 t = vt(i); % iterate so t will be
 
% every value in vt
 
if (t >= 0) && (t < 10)
  vf(i) = sqrt(10*t);
 elseif (t >= 10) && (t < 20)
  vf(i) = 10*exp(10-t);
 elseif (t >= 20)
  vf(i) = t-20;
 end
end
plot(vt,vf)

182 Programming for Electrical Engineers


PRACTICE PROBLEMS

4. C
 reate a function that plots the following for −5 ≤ t ≤ 5. Plot
using 100 points. 

1− t , t < 0
v(t ) =
et 4 , t ≥ 0

Chapter 5: Programming II: Looping 183


TECH TIP: MONTE CARLO SIMULATIONS

Monte Carlo simulations are commonly used in EE to test how


engineering designs respond to random changes in component
tolerance. For example, consider the low pass circuit shown
below, which passes low frequencies but tends to block
frequencies above f = 1 :
2πRC

Choose R = 1 kΩ and C = 1 μF to make the filter pass frequencies


below 160 Hz. How will this cutoff frequency vary given a resistor
tolerance of ±5% and capacitor tolerance of ±10%? A graduate-
level course in stochastic theory will derive the result exactly, but
it is simpler to simulate the results several thousand times, each
time with different random resistor and capacitor values.

In matlab, rand returns a random number between [0,1].


To change this to [−0.05 + 0.05] to simulate a 5% resistor
tolerance, note there is a desired span of 0.1 in [−0.05 0.05], so
(rand*0.1) gives the correct span of [0 0.1]. Subtract 0.05 to
create the desired range [-0.05 0.05]. Therefore, rand*0.1-
0.05 gives a random number between −0.05 and 0.05 for the
resistors. Similarly, rand*0.2-0.1 gives a random number
from −0.1 to 0.1 for the capacitors.
function result = MonteCarlo(N)

% N is the number of simulations desired

result = zeros(1,N);
 % fill result with
 % N zeros
for i = 1 : N % do the simulation N times


184 Programming for Electrical Engineers


 R = 1000 + 1000*(rand*0.1-0.05);
  % ±5% resistor tolerance
 C = 1e-6 + 1e-6*(rand*0.2-0.1);
  % ±10% capacitor tolerance
 f = 1/(2*pi*R*C);
 result(i) = f;
end
Run the function from the command window using the
commands listed below, and have it do 1000 simulations. The
results show that most, but not all, of the critical frequencies
span from 140 to 180 Hz, something difficult to derive using
methods other than simulation.
 result = MonteCarlo(1000);
plot(result,'.')
xlabel('simulation number')
ylabel('critical frequency')

200

180
critical frequency

160

140

120
0 200 400 600 800 1000
simulation number
A new matlab command that can help visualize the results of
Monte Carlo simulations is histogram(). This command bins
the data and plots a histogram of the results.

Chapter 5: Programming II: Looping 185


histogram(result); % plot the histogram
xlabel('critical frequency')
ylabel('number')

800

600
number

400

200

0
130 140 150 160 170 180 190
critical frequency

Now it is apparent that although the average value of the filter’s


cutoff is about 160 Hz, which is what would be obtained with
resistors and capacitors whose values are precisely as marked,
using real-world resistors and capacitors with about a 5% and
10% tolerance, respectively, will result in a spread of cutoff
frequencies. One could expect to find cutoffs as low as 140 Hz
and as high as 180 Hz when using components with real-world,
imperfect values. Notice how the histogram command
displays the same information as the previous MonteCarlo
function does, but in a more easily-interpreted format.

186 Programming for Electrical Engineers


PRACTICE PROBLEMS

5. S olve the Monte Carlo filter problem on the previous page,


but now assume that the capacitors are higher quality 5%
versions, and the resistors have a 1% tolerance. Plot the
results of 1000 simulations as a histogram. 

NESTED LOOPS

For-end loops are often nested inside each other. For example, if a parts cabinet
was stocked with exactly four types of resistors, 10Ω, 22Ω, 47Ω, 51Ω, find all pos-
sible combinations of these types:
function FindResistors()
 % FindResistors finds all combos of 2 resistors
 % given 4 types
 vr = [10 22 47 51]; % 4 types of stocked resistors
 for i1 = 1:4 % the first resistor index
 R1 = vr(i1); % R1 is the first resistor value
 for i2 = 1:4 % choose the second resistor index
  
R2 = vr(i2); % R2 is the second resistor value
  
fprintf('R1 = %g, R2 = %g\n’, R1, R2)
 end
end
This code returns the following output:
 R1 = 10, R2 = 10
 R1 = 10, R2 = 22
 R1 = 10, R2 = 47
 R1 = 10, R2 = 51
 R1 = 22, R2 = 10

Chapter 5: Programming II: Looping 187



R1 = 22, R2 = 22

R1 = 22, R2 = 47

R1 = 22, R2 = 51

R1 = 47, R2 = 10

R1 = 47, R2 = 22

R1 = 47, R2 = 47

R1 = 47, R2 = 51

R1 = 51, R2 = 10

R1 = 51, R2 = 22

R1 = 51, R2 = 47

R1 = 51, R2 = 51 

PRACTICE PROBLEMS

6. Modify the above code to print the equivalent resistance of


all possible values of R1 and R2 in parallel. ©
7. Is it possible to sort the above result with no code changes
other than by simply inserting the sort() command in the
correct place? If so, do it and report the result. If not, explain
why it is not possible. This problem should clarify when it is
helpful to print results to the screen and when it is helpful to
return results as a function’s output argument.

188 Programming for Electrical Engineers


USING NESTED LOOPS TO SEARCH FOR EXACT SOLUTIONS

Consider a program that searches for integer solutions for the sides of a right
triangle, known as Pythagorean triples, satisfying c = √a2 + b2 . The program
searches for integer hypotenuses as side a ranges from 1 to some given upper
bound N and as side b ranges from 1 to N.

RECALL
x is an integer only if x == floor(x)

Every time an integer hypotenuse c is found, it is printed to the command win-


dow, as shown below:
function pythagorean(N)
 % pythagorean(N) searches for integer sides of right
 % triangles for lengths of sides varying from 1 to N
 for a = 1:N % side a
 
for b = 1:N % side b
  c = sqrt(a*a+b*b); % side c, the hypotenuse
   if (c==floor(c)) % a solution is found
disp(c)
  end
 end % loop through side b values
 end % loop through side a values 

PRACTICE PROBLEMS

8. The above code for pythagorean() works, but it only


prints the hypotenuse values. Modify the code to print all
the sides a, b, and c that are Pythagorean triples, and list the
results for sides a and b between 1 and 20. 

Chapter 5: Programming II: Looping 189


PRO TIP: NON-ENGINEERING CAREERS

Many electrical engineering graduates choose to pursue careers


other than Electrical Engineering, and find that the quantitative
skills they learned as students transfer well. Popular non-
engineering careers for EE graduates include
• Sales: There are many opportunities for qualified engi-
neers who are more interested in working with people
than design. Although these jobs are really about build-
ing trusting relationships, many require engineering-
level knowledge about the system being sold, such as
when selling substation transformers to provide power
to growing communities.
• P
 roject management: This is another people-centric
position, and it requires the ability to manage teams of
engineers during the development phase of a project.
Such positions require far more communication and
planning skills than design skills.
• M
 ilitary: Increasing automation, especially in the tech-
nology-centric branches of the Air Force and Navy, calls
for greater numbers of engineers. There are often special
ROTC scholarships reserved specifically for engineering
majors to help fill this gap.
• M
 edicine: Engineers have higher Medical College Admis-
sion Test (MCAT) scores on average than both biology
majors and “pre-med” health science majors1, and the
analytical training they receive gives them advantages in
certain specialties, including cardiology, neurology, and
radiology.

190 Programming for Electrical Engineers


• L aw: Math-intensive undergraduate curricula are corre-
lated with Law School Admission Test (LSAT) performance.
Engineering majors are among the highest-scorers on
the LSAT, and on average significantly outperform other
common majors bound for law school including language,
psychology, social science, liberal arts, and pre-law majors.
Patent law recruits heavily from engineering majors; an
undergraduate degree in engineering alone is sufficient
qualification to take the US Patent Bar Exam.
Opportunities abound both within and outside the engineering
profession. Which will you choose?
1“MCAT and GPAs for Applicants and Matriculants to U.S. Medical Schools by Primary

Undergraduate Major, 2019–2020,” Association of American Medical Colleges, 2020.


www.aamc.org/download/321496/data/factstablea17.pdf.
2“Average LSAT Scores by Major,” https://magoosh.com/lsat/2016/average-lsat-scores-by-major/.

USING NESTED LOOPS TO SEARCH FOR BEST SOLUTIONS

Finding exact solutions, as was done in the previous section, is done by testing
with the == operator. Sometimes exact solutions do not exist, in which case one
must settle for finding the best solution. Finding this best solution requires keep-
ing track of the current best solution, and checking through every iteration to
see if the current computation is better. Error is often computed using code of
the form error = abs(currentComputation – desired) since it is
the absolute error that needs to be minimized.

Chapter 5: Programming II: Looping 191


For example, if you need to find the value of two standard value resistors from
1 Ω to 1 MΩ in series, whose sum is as close as possible to a given desired value,
enter the following:
function [R1best, R2best] = findclosestseries(rDesired)
 % create vR with standard value resistors from 1 to 9.1
 vR = [1 1.1 1.2 1.3 1.5 1.6 1.8 2 2.2 2.4 2.7 3 ...
 3.3 3.6 3.9 4.3 4.7 5.1 5.6 6.2 6.8 7.5 8.2 9.1];
 % ... wraps the line


% duplicate vR by multiples of 10 to create all

% standard value Rs

vR = [0 vR vR*10 vR*100 vR*1e3 vR*1e4 vR*1e5 1e6];

R1best = 0; % we haven’t yet found the best value of R1

R2best = 0; % we haven’t yet found the best value of R2

bestError = 1e12; % our initial error is huge

% loop through to find every possible value of R1


for i1 = 1:length(vR)
 R1 = vR(i1);
 % loop through to find every possible value of R2
 for i2 = 1:length(vR)
  R2 = vR(i2);
  Rseries = R1+R2;
  currentError = abs(Rseries – rDesired);
  if (currentError <bestError)
% we found a better solution

R1best = R1;

R2best = R2;

bestError = currentError;

  end
 end
end 

192 Programming for Electrical Engineers


PRACTICE PROBLEMS

9. C
 hange the above program to print out the closest value of
two standard-value resistors in parallel to a given desired
resistor. Test to find the nearest parallel combination of
­standard resistor values to match R = 40.5 Ω. How close is it? 

tic, toc

The commands tic, toc will time how long it takes matlab to execute the
commands that separate them. These commands must be either within a func-
tion or cut and pasted into the command window; otherwise, most of the delay
between the “tic” and the “toc” will be from your typing speed, not matlab’s cal-
culation speed limitations.
function calculationspeed
 % find how long it takes to create two random 50x50
 % matrices and multiply them together
tic
 a = rand(50,50); % create two random 50x50 matrices
 b = rand(50,50);
 c = a*b; % multiply them together
toc
matlab then returns the following on my 2017-era computer:
 Elapsed time is 0.278700 seconds.
The toc command will also return the elapsed time in seconds to a variable. 

Chapter 5: Programming II: Looping 193


PRACTICE PROBLEMS

10. How quickly can matlab solve a set of 100 equations with
100 unknowns? This problem was described in Chapter 2,
but to avoid typing 10,000 test coefficients, create a random
problem. First create a 100 × 100 matrix of random numbers
and save in variable A using the command:
A = rand(100,100);

Then create a 100 × 1 column vector of random numbers
called b. Finally, time how long it takes to solve them using
the command:
V = A\b;  

FUNCTIONS CALLING FUNCTIONS

Functions frequently call other functions inside them, as shown below:


 function z = polar2complex(mag, angle)
 % polar2complex returns a complex number given
 % the magnitude and angle in degrees
 z = mag*cosd(angle) + j*mag*sind(angle);
The sind() and cosd() are built-in functions called inside polar2complex.
User-created functions can be called the same way. Consider the following func-
tion that returns the equivalent resistance of two resistors in parallel:
 function p = parallel(r1, r2)
 % parallel returns the parallel resistance
 % of two given resistors
 p = (r1*r2)/(r1+r2);
The parallel function can be called by other user-defined functions. For example,
the Monte-Carlo routines described on page 184 could call parallel repeat-
edly in its simulations, allowing the Monte-Carlo code to become more readable. 

194 Programming for Electrical Engineers


break

It is sometimes necessary to break out of the middle of a loop before it is com-


pleted. For example, this might happen if the loop is searching for some criteria
to be met, such as trying to minimize a calculated error below some threshold.
Once this is accomplished, the loop has served its purpose; in such a case, you
can exit the loop immediately using the break command.

Another example involves searching to see if a given number is prime. One


method, given a number n, is to loop over all possible integers between 2 and n
to see if any are factors of the given number. The moment any factors are found,
the loop exits and reports that the number is not prime. If the loop completes
with no factors found, the function reports that the number must be prime. But
rather than searching for possible factors from 2 through n, one only needs to
search up to the square root of n, since any factor greater than this must be mul-
tiplied by a factor less than this.

Define the following helper function and save as isInteger.m:


 function b = isInteger(x)
 b = x == floor(x); % b is 1 if x is an integer,
 % otherwise 0
Last, define the main function to locate primes, and save as isPrime.m:
 function b = isPrime(n)
 b = 1; % assume it is prime, then check
 for f=2:floor(sqrt(n)) % f cycles through
  % all possible factors

Chapter 5: Programming II: Looping 195


 if isInteger(n/f) % is f a factor of n?
  b = 0; % n is not prime
  break % break out of the loop
 end
end
This program would run correctly without the break statement, but it would be
slower; if a factor were found, it would continue to run the loop until the end,
rather than returning the result immediately. 

PRACTICE PROBLEMS

11. Change the above code in isPrime to check to make sure


that the program has not been running for over 1 second.
Do this by starting a timing operation at the beginning of
the code using tic, and check the elapsed time inside the
loop with toc. Use the break statement to exit if the code
has been executing for over 1 second, and if so exit and
return −1. This is a useful technique to exit automatically
when a simulation does not converge on an answer. ©

MULTIPLE FUNCTIONS IN ONE M-FILE

In the previous example, a separate helper function called isInteger was


saved as a separate file, even though its purpose was only to be used within the
isPrime function. It is possible to pack multiple helper functions inside the
same m-file that houses the main function, as long as the helper functions are
defined after the main function. These helper functions can only be called by the
main function.

196 Programming for Electrical Engineers


For example, re-writing the last example using this method yields a single file to
be saved as isPrime2.m:
 function b = isPrime2(n)
 b = 1; % assume it is prime, then check
 for f=2:floor(sqrt(n)) % f cycles through
% all possible factors

 if isInteger(n/f) % is f a factor of n?
  b = 0; % change b to 0 to show n is not prime
  break; % break out of the loop
 end
end
%
 % helper functions
 function b = isInteger(x)
 b = (x == floor(x)); % b is 1 if x is an integer,
% otherwise 0

Defined this way, the helper function isInteger cannot be seen by the matlab
command line or any function other than isPrime2.m. 

while-end Loop

The for-end command loops for a number of times that is known in advance,
unless a break statement ends it early. The while-end loop will loop until a
logical condition is true.
 while(logical test statement)
 program code to be run
end
It is less common than the for-end loop command, and like the for-end
loop command, can be exited early using the break statement. It can be used,
for instance, in simulations that iterate until an error is acceptably small.
function sum=WhileExample(x)
 % WhileExample will loop until new additions are < x

Chapter 5: Programming II: Looping 197


 term = 1;
 sum = 0;
 while (term >= x) % run until the terms are less than x
 term = term/2;
 sum = sum+term;
end
This function snippet adds the geometric series 1 + 1 + 1 + ⋯ until the last
2 4 8
added term becomes smaller than some given number x. 

PRACTICE PROBLEMS

12. Change the above code so that it sums the sequence


1 1 1
+ + + ⋯ Report the result for summing each term
3 9 27
until the last term added is smaller than 0.00001. 

GROWING VERSUS PRE-ALLOCATING VECTORS

Often a function will return a vector whose elements are calculated inside a loop.
In this case, the vector may be either initialized to the full size with a zeros()
command and then filled inside the loop or else grown to size inside the loop
with its length increasing with every loop. The former method is much more
efficient and is accomplished by reserving the required memory for the vector
before the loops begins with a command like this:
 result = zeros(1,1000);
The latter less-efficient method is to grow the size of vector in the middle of the
loop, like this:
 result = [newvalue result];
If the resulting vector size is known before the loop begins executing, as is often
the case, use the former method. Only if the resulting vector length is not known
in advance should the latter method be used.

198 Programming for Electrical Engineers


Good practice: preallocate memory
function v = GoodProgram(n)
% return v of length n and preallocate v
v = zeros(1,n);
for i = 1 : n
 v(n) = rand + sin(2*i);

end

Bad practice: grow memory


 function v = BadProgram(n)
 % return v of length n but grow v to size
 v=[]; % define v as being empty
 for i = 1 : n
  newval = rand + sin(2*i); % newval is calculated

  v = [newval v]; % insert newval at start of v

end 

DIGGING DEEPER
The reason why vectors should be initialized with some value
like zeros, rather than grown as needed, is because of the
way matlab grows vectors. If a vector needs to be grown to
accommodate a new value, for instance, to go from length
100 to length 101, matlab must first internally create an entirely new 101 length
vector, then copy the original 100 values over to it, then save the additional
single value, and then destroy the original length 100 vector. Compare this
with the faster alternative of preallocating memory for the final array once,
and then replacing the initialized values with the calculated values.

Chapter 5: Programming II: Looping 199


TECH TIP: BINARY MATH WITH matlab

There are two types of mathematics electrical engineers do with


0 and 1: logical and binary.

Logical or Boolean Math


These use numbers to represent true (1) and false (0). The logical
operations of &&, ||, and ∼ model the effects of their counterpart
logic gates AND, OR, and NOT gates.

As an example, find the output of the following digital circuit


with matlab:

The output can be found by substituting the matlab logical


operations as follows:

The matlab code to calculate the answer given the inputs

200 Programming for Electrical Engineers


therefore is ∼((1||0)&&1), which evaluates to 0.
Binary math: dec2bin() and bin2dec()
Binary mathematics involves calculations with numbers in
base 2, but matlab shows all numbers in base 10. To convert to
base 2 use dec2bin()
For example, to convert 77 to base 2:
dec2bin(77)  returns  1001101
To convert back into base 10, use bin2dec and put string
markers around the binary value
bin2dec('1001101')  returns  77
As an example, perform the following operation in matlab:
100112 × 10012 + 10102:
bin2dec('10011')*bin2dec('1001')+
bin2dec('1010')
This returns 181 (in base 10). To see the result in binary, use
dec2bin(181)
This returns
10110101 (in base 2)

PRACTICE PROBLEMS

13. Use matlab to calculate the following logic block ©

14. Use matlab to evaluate the following binary math problem,


and report the answer in binary: (10012 + 11102) × 100112 

Chapter 5: Programming II: Looping 201


PRO TIP: FUNDAMENTALS OF ENGINEERING

An earlier Pro Tip discussed the advantages of taking the


optional step of earning the Professional Engineering license.
The first step in becoming a PE is to pass the Fundamentals
of Engineering (FE) exam. This test is designed to be
taken during the senior year, or by recent graduates of an
engineering program. There are versions of the FE exam for
Electrical, Mechanical, Civil, and other engineering majors;
the FE exam includes topics common to all of these majors,
such as mathematics, probability, ethics, and engineering
economics, as well as topics unique to the selected engineering
discipline. The EE exam, for instance, also includes circuit
analysis, signal processing, electromagnetics, digital systems,
and programming. The exam is composed of two three-hour
computer-graded segments, which are taken with a break
for lunch. Certain models of scientific non-programmable
calculators are authorized, and a book containing reference
equations is provided. You can find out more about the exam,
how to purchase a copy of the reference equation book, and
how to register for it by visiting NCEES.org, the administering
testing agency.

Although scores are reported, it is essentially a pass/fail exam


since its only purpose is to serve as one of several steps required
to become eligible to take the PE exam. In past years, roughly
70% of electrical and computer engineering test-takers earned
passing scores, and one can retake the exam as many times as
required, up to once in every two-months testing window, and
up to three times per year.

202 Programming for Electrical Engineers


Very few undergraduate majors have a national licensing
examination as engineers do. Although most electrical
engineering careers do not require the PE, it is difficult to
determine as a student where your particular career path will
lead. Why not take advantage that national licensure exists for
electrical engineers, and gain maximum career flexibility and a
distinguishing résumé line by planning to take the FE
as a senior?

Chapter 5: Programming II: Looping 203


COMMAND REVIEW

Looping Functions
for-end  for i = 1:10, fprintf('Loop %g\n', i); end
break  breaks out of a loop
while(condition)-end  loop until the logical condition is met, then exit

Utility Functions
tic, toc  prints elapsed time
tic, t=toc;  saves elapsed time in seconds in variable t
disp()

Binary Functions
dec2bin(73)  converts a base 10 value into base 2
bin2dec('101')  converts a base 2 number (in quotes) into base 10 

204 Programming for Electrical Engineers


LAB PROBLEMS

1. Write a matlab program that takes vector t, and returns a vector v, according
to the formula:

1+ t , t ≤ 0
v (t ) =
2e− t-1, t > 0

 se a for-end loop in your solution. The function definition line is:


U
 function v = problem01(t)
 Test it by verifying in the command line that problem01(-5) is -4 and
problem01(1) evaluates to -0.2642.

2. A compander is a device that passes audio signals from -1 V to 1 V without
change, but reduces the gain of higher magnitude signals, in part to
prevent very large transient (short length) signals from saturating the
system. You will learn more about companders in Communication courses.
An example of a compander is the rule:

1 1
vin − , −2 ≤ vin ≤ −1
2 2
v
vout = in , −1< vin < 1
1
vin + 1 , 1 ≤ v in ≤ 2
2 2
 ote that the horizontal axis (the “x” axis) is vin and the vertical axis (the
N
“y” axis) is vout. Write a matlab program that takes a vector of values for vin
and returns the associated vout vector. It should have the following function
definition line:
function vout = problem02(vin)

Test the code by verifying that the command problem02([-2 0 2])
evaluates to [-1.5 0 1.5].

Chapter 5: Programming II: Looping 205


3. Write a matlab function that creates a triangle waveform that oscillates
between 0 V and 1 V, starting at t = 0. The function should take three
arguments: the number of points computed, the triangle wave frequency,
and the length of time that the triangle waveform is computed. It should
return two arguments: the time vector t and the voltage vector v, so that
plot(t,v) plots the result. The function definition and the next line of the
code is as follows:
function [t,v] = problem03(nPoints, period, stopTime)

t = linspace(0, stopTime, nPoints);

There are many ways to write this function. One way is to calculate v(i)
inside a loop indexed by i for every time value in t. For each value of t being
inspected, first find how long it has been since the beginning of the last
period, and then offset t by this amount.

Check that the function works correctly. The following input should produce
the plot shown below:
[t,v] = problem03(21, 2, 10)

plot(t,v)

4. A commonly used function in digital signal processing is the Tukey window,


which is defined as follows:
1 1  2xπ  αN
 2 + 2 cos  α N − π  , 0 ≤ x < 2
  
 αN αN
y ( x ) = 1, ≤x≤N−
 2 2
1 1  2 x π 2π  αN
 2 + 2 cos  α N − α + π  , N − 2 < x ≤ N
  

206 Programming for Electrical Engineers


T his window is only defined for integer x from 0 ≤ x ≤ N. Write a function that
takes arguments N and α and checks to make sure N is a positive integer and
that α is between 0 and 1. The function should return two arguments, x and the
Tukey window function y(x) so that plot (x,y) draws the result. If either N or α
are not valid, it returns the error values −1 for both x and y.

The function definition and the first few lines of the code should be:
function [x,y] = problem04(N, alpha)

x = 0:N;

for i = 1:N+1

curX = x(i); % current value of x


Check that the function works correctly. The input below should produce the
plot shown below:
[x,y] = problem04(100, 0.5)
plot(x,y)

5. I n the “Nested Loops” section on page 187, there is a code segment called
“FindResistors” that outputs all combinations of four resistors taken two at
a time. However, it does not recognize that R1 = 10, R2 = 22 is the same
combination as R1 = 22, R2 = 10. Modify the code to avoid listing duplicates
like these. Hint: change the start index of i2 from 1 to something else. This
requires some thought; it may help to find the pattern by crossing out the
repeats in the output table. It should have the following function definition
line:
function problem05()

Chapter 5: Programming II: Looping 207


6. T he “Nested Loops to Search for Best Solutions” section on page 191 has
code to find the two standard-value resistors whose value in series is the
nearest to a given desired value. The associated Practice Problem asks you
to modify that to return the two standard-value resistors whose value in
parallel is the nearest to a given desired value. Modify the code so that it
returns the best single resistor, or set of two resistors in series or parallel,
that is closest to the given value. The function definition is
function [R1best,R2best, result]=problem06(rDesired)
The result is the equivalent resistance computed with R1best and R2best,
which shows both how close the match to rDesired is and whether R1best
and R2best should be connected in series or parallel. If the closest match is a
single resistor, then R2best should be 0.

Test the code by verifying in the command line that one can create an 8.5 Ω
resistor by placing a 1 Ω and a 7.5 Ω resistor in series, equivalently
[r1, r2, result] = problem06(8.5)

evaluates to
r1 = 1.0, r2 = 7.5, result = 8.5

Similarly verify that the best way to create a 2.555 Ω resistor is by placing a 4.7
and 5.6 Ω resistor in parallel, equivalently
[r1, r2, result] = problem06(2.555)

evaluates to
r1 = 4.7, r2 = 5.6, result = 2.5553


7. A
 Pythagorian Triple, as previously discussed, is a rectangle in two
dimensions with integer sides and an integer diagonal. It must satisfy the
equation x2 + y2 = d2 (for example, 3, 4, and a diagonal of 5, since 32 + 42 = 52).
In three dimensions, this becomes a rectangular prism (a box) with three
integer sides and an integer diagonal connecting opposite corners. It must
satisfy the equation x2 + y2 + z2 = d2 (for example, 1, 2, 2, and a diagonal of 3,
since 12 + 22 + 22 = 32). Write a program to find one such set of four numbers,
in which each of the sides and diagonal are at least 5 and not more than 11.
Hint: Three sets of nested loops are needed, one for each variable x, y, and
z. It takes no arguments and returns four different scalars x, y, z, and d with
any single solution (there is more than one solution).

208 Programming for Electrical Engineers


The function definition and first line of code should be as follows:
function [xPyth,yPyth,zPyth,dPyth] = problem07()
for x = 5:11

8. A single roll of a six-sided die yields an integer from 1 to 6, all equally-


likely. Two six-sided dice summed will yield a value between 2 and 12,
and all values will not be equally likely since there are many ways to roll a
total of 6 (1 + 5, 2 + 4, 3 + 3, 4 + 2, 5 + 1) but only one way to roll a 2 (1 + 1).
Write a function called problem08roll using a for loop that takes a
number of rolled six-sided dice and sums up their values. For example,
problem08roll(4) provides the sum of a virtual roll of 4 six-sided dice.

a) First, create the function problem08roll to do this, and then


b) Write a second function called problem08 that calls problem08roll
from within the same file (i.e., the main function is named problem08,
and within that file the function problem08roll is defined; see the
section titled “Multiple Functions in One M-File” for further guidance).
The function problem08 takes two numbers: a number of six-sided
dice to be rolled called nDice and a number of trials called nTrials. It
returns a vector of length nTrials, each value of which corresponds to an
output of problem08roll. For instance, if nDice is 2 and nRolls is 8,
one run might randomly return this vector: [4 2 5 6 8 4 12 7],
­representing 8 different sums of 2 six-sided dice.
c) Provide a histogram of the sum of 10 six-sided dice computed for
100,000 different trials. The histogram should look roughly like a Gauss-
ian curve, even though it is composed of sums of uniformly-distributed
random numbers. This tendency of sums of random variables to form a
Gaussian curve is called the Central Limit Theorem.

S ince both functions are defined in just one file, just provide the single
file called problem08 that houses both functions. Also provide the
histogram image in a separate Word file.

Chapter 5: Programming II: Looping 209


T he function declarations and some lines are shown below, where the
ellipsis (…) indicates one or more lines of unwritten code:
function results = problem08(nDice, nRolls)

results = zeros(1,nRolls); % preallocate for speed

for i = 1:nRolls



function total = problem08roll(nDice)

total = 0;




9. Filters are common circuits that


reduce certain frequencies but
pass others. One type of low pass
filter is shown to the right. It passes
low frequencies but substantially
reduces frequency components
higher than fc, where fc is

fc = 1
√ 2π R1R2C1C2

 a. Write a function that computes fc given values of R1, R2, C1, and C2. Call
this problem09LP. To test it, verify that when called with two identi-
cal 10 kΩ resistors and two identical 1 μF capacitors, the cutoff frequen-
cy fc returned is 15.916 Hz.
b. Let the resistors be 10 kΩ with a 5% tolerance (meaning each could
be anywhere from 9.5 kΩ  to 10.5 kΩ ) and the capacitors be 1 μF with a
10% tolerance. Write a second function called problem09 that calls
­problem09LP from within the same file (i.e., the main function is named
problem09, and within that file the function problem09LP is defined;
see the section titled “Multiple Functions in One M-File” for further guid-
ance). The function problem09 takes a number N representing how
many times the circuit will be simulated using different component val-
ues. For each of the N trials, it generates random values for R1, R2, C1,

210 Programming for Electrical Engineers


and C2 that are within the components’ tolerances, calls problem09LP
to determine the corresponding cutoff frequency fc, and stores this value
in an N-length vector vFc which it returns.
c. Provide a histogram of the resulting frequencies fc stored in vFc for
100,000 trials. The histogram gives a sense of the range of values of
cutoff frequency fc that will be encountered given real-world compo-
nents.

T he function declarations and some lines are shown below, where the
ellipsis (…) indicates one or more lines of unwritten code:
functionvFc = problem09(N)

vFc = zeros(1,N); % preallocate for speed

for i = 1 : N



function fc = problem09LP(R1,R2,C1,C2)




10. Voltage dividers (previously discussed in


a Chapter 2 Tech Tip) appear in the schematic
diagram of the circuit shown to the right. The
circuit input voltage Vin is divided between
the two resistors, so that the voltage across

V1 = Vin R1
R1 + R2

R1 is given as follows:

 a. Write a function that computes V1 given values of Vin, R1, and R2. Call this
function problem10Divider. To test it, verify that when called with
Vin = 10 V, R1 = 1 kΩ, and R2 = 10 kΩ, it returns a value of 0.9091 V.
b. Let Vin = 10 V exactly, R1 = 1 kΩ ± 5%, and R2 = 10 kΩ ± 5%. The 5%
resistor tolerance means the 1 kΩ could be anywhere from
1 kΩ - 5% = 0.95 kΩ  to1 kΩ + 5% = 1.05 kΩ. Write a second function

Chapter 5: Programming II: Looping 211


called problem10 that calls problem10Divider from within the
same file (i.e., the main function is named problem10, and within
that file the function p
­ roblem10Divider is defined; see the sec-
tion titled “Multiple Functions in One M-File” for further guidance).
The function problem10 takes a number N representing how many
times the circuit will be simulated using different random compo-
nent values. For each of the N trials, it generates random values for
R1, R2, that are within the components’ tolerances, calls problem-
10Divider to determine the corresponding voltage V1, and stores
this value in an N-length vector v1, which it returns.
c. Provide a histogram of the resulting voltages stored in v1 for 100,000 tri-
als. The histogram gives a sense of the range of values of voltage V1 that
will be encountered given real-world components.

T he function declarations and some lines are shown below, where the el-
lipsis (…) indicates one or more lines of unwritten code:
 function v1 = problem10(N)
 v1 = zeros(1,N); % preallocate for speed
 for i = 1 : N
 …
 function V1 = problem10Divider(Vin, R1, R2)
 …

11. A fault-tolerant computer has three redundant cores. Each core has a base
20% chance of failing. If any core fails, then recheck both the remaining
cores a second time to see if they fail—now they will fail with a 30%
likelihood. The fault-tolerant computer will fail if more than 1 core fails.

 a. Write a function that computes whether, for a particular trial, the fault-
tolerant computer fails. Do this by generating a random value for each
core to determine if it fails. If any one core fails, then generate new
random values for each of the remaining cores to see if they fail. If they
do, the entire system fails and the function should return a 0; other-
wise the system works and the function returns a 1. Call this function
­problem11Trial.

212 Programming for Electrical Engineers


b. Write a second function called problem11 that calls problem11Trial
from within the same file (i.e., the main function is named problem11,
and within that file the function problem11Trial is defined; see the
section titled “Multiple Functions in One M-File” for further guidance). The
function problem11 takes a number N representing how many times
the fault-tolerant computer system will be simulated. For each of the N
trials, it calls problem11Trial to determine if the computer simulation
worked and stores this value in an N-length vector v, which it returns.
c. Report the mean and standard deviation of the number of times the
computer system worked over 100,000 simulations. Hint: Use the
help command to learn about the mean and std functions. The mean
should be greater than the standard deviation, and both should be
less than 1.

T he function declarations and some lines are shown below, where the el-
lipsis (…) indicates one or more lines of unwritten code:
 function v = problem11(N)
 v = zeros(1,N); % preallocate for speed
 for i = 1 : N
 …
 function works = problem11Trial()
 …

12. One method to generate a squarewave


that alternates between 5 V and 0 V is to
use a 555 timer integrated circuit, as
shown in the schematic diagram to the
right. This method will be discussed in
greater detail in Chapter 6, but this
problem only requires the equation
governing the time tlow that each
square wave pulse is 0 V, which is
tlow = 0.693 C (R1 + R2 )

Chapter 5: Programming II: Looping 213


 a. Write a function that computes tlow, given values of R1, R2, and C. Call
this function problem12tlow. Test it by verifying that when called
with R1 = 1 kΩ, R2 = 1 kΩ, and C = 1 μF, it returns a value of 1.386 ms (i.e.,
0.001386).
b. Let R1 = 1 kΩ ± 5%, R1 = 1 kΩ ± 5%, and C = 1 μF ± 10%. The 5% resistor tol-
erance means the 1 kΩ could be anywhere from 1 kΩ−5% = 0.95 kΩ to
1 kΩ + 5% = 1.05 kΩ. Capacitors usually have looser tolerances than resistors.
Write a second function called problem12 that calls problem12tlow
from within the same file (i.e., the main function is named problem12,
and within that file the function problem12tlow is defined; see the
section titled “Multiple Functions in One M-File” for further guidance). The
function problem12 takes a number N representing how many times the
circuit will be simulated using different component values. For each of the
N trials, it generates random values for R1, R2, and C that are within the com-
ponents’ tolerances, calls problem12tlow to determine the correspond-
ing time tlow, and stores this value in an N-length vector v, which it returns.
c. Provide a histogram of the resulting tlow times stored in v for 100,000 tri-
als. The histogram gives a sense of the range of values of times tlow that
will be encountered given real-world components.
 The function declarations and some lines are shown below, where the ellip-
sis (…) indicates one or more lines of unwritten code:

  function v = problem12(N)
  v = zeros(1,N); % preallocate for speed
  for i = 1 : N
  …
  function tlow = problem12tlow(R1, R2, C)
  …

13. Most functions encountered in Electrical Engineering are well-behaved,


which makes exceptions all the more interesting. A Weierstrass function
is one such exception. This function is a continuous function (it can be
drawn without lifting pen from paper), yet it is so filled with abrupt changes
in direction that it is nowhere differentiable (i.e., it has no defined slope

214 Programming for Electrical Engineers


anywhere). One curve in this family of functions is defined in the limit as
N→∞ of the following equation:
N n
1
y (t) = cos ( 7nπ t)
n=0 2

 a. Write a matlab function that takes argument N and returns 10,000 pairs
of points {t,y} that plot the function over the range −1 ≤ t ≤ 1. The first
few lines of the function definition (where an ellipsis … indicates more
code follows) are shown below:
 function [t,y] = problem13(N)
 t = linspace(-1,1,1e4);
 y = zeros(1,1e4); % preallocate for speed
 for i = 1:1e4
 tCurrent = t(i);
 for n = 1:N
b. Plot the result for N = 100. The plot should look jagged and self-similar
when zoomed in a little. matlab’s limited precision prevents making
N arbitrarily large, since the 7n term becomes large quickly, but in the
limit the graph would be jagged and self-similar, regardless of the zoom
level.

14. A common waveform encountered in power supply design is the full-wave


non-precision rectified sinusoid, shown in the diagram below:

One cycle of this waveform is described by the equation below:


 sin (10 πt) , 0 ≤ t ≤ 0.9
y(t ) =  9
 0, 0.9 < t ≤ 1

Chapter 5: Programming II: Looping 215


a. W rite a function that takes as an argument N and returns vectors t and y
so that plot(t,y) will plot N points of the above waveform from
0 ≤ t ≤ 1.
The first few lines of the function, where an ellipsis (…) indicates addi-
tional code, are shown below:
 function [t,y] = problem14(N)
 t = linspace(0,1,N);
 y = zeros(1,N); % preallocate for speed
 …
b. Create a plot of the waveform for 0 ≤ t ≤ 1 using 100 points and use a
thick line width of 3 to make the line legible against the axes.

15. The full-wave non-precision rectified sinusoid described in the previous


problem is usually encountered with many cycles, instead of the single
cycle computed in Problem 14.

a. C reate a function that creates M duplicates of this waveform. This func-


tion should take as arguments N and M, where N is the number of
points per cycle and M is the number of cycles. It should return vec-
tors t and y, so that plot(t,y) draws the M cycles. Hint: It should call
­problem14(). The function definition is as follows:
 function [t,y] = problem15(N,M)
b. Create a plot of 10 cycles of the waveform using 100 points per cycle.
Plot the result using a thick line width of 2 to clearly show the plot
against the axes.

16. A Collatz Sequence refers to a sequence that begins with any positive
integer a1 and whose next value a2 is computed recursively as half of a1 if
that results in an integer, or else three times a1 plus one. Mathematically
stated, a Collatz Sequence appears as follows:

a_
 n1, an even
an =  2
 3an_1 +1, an odd

216 Programming for Electrical Engineers


F or example, if a1 = 7, the sequence is 7, 22, 11, 34, 17, 52, 26, 13, 40, 20, 10, 5, 16, 8,
4, 2, 1. The Collatz Conjecture is a famous, unproven mathematical problem that
says that the sequence will always reach 1 for any positive integer start value.
Write a function that takes an integer a and returns the vector holding the
Collatz Sequence v that begins with a and ends with 1. The function defini-
tion is as follows:
 function v = problem16(a)
Hint: Since the length of the result is not known at the start, the vector v must
grow with every iteration. Consider whether a for loop or a while loop is the
more natural iteration structure.

17. Use the results of the previous problem to write a function that
determines which starting number, from 1 to a given integer N, has the
longest Collatz Sequence. The function should return two numbers, the
starting integer and the length of the resulting sequence. For example,
if N = 5, then it should return the integers 3 and 8, since the Collatz
Sequence starting with 3 is 3, 10, 5, 16, 8, 4, 2, 1, and at length 8, it is
longer than the Collatz Sequences starting with any other number from
1 to 5. Hint: This function should call problem16(). The function
definition is as follows:
 function [longestA, longestLength] = problem17(N)

18. Write a function that models the amount of money saved by an engineer.
The engineer earns E dollars at the start of every month, and automatically
deposits P percent of that into a savings account. The savings account earns
I interest monthly, which is deposited at the end of the month.

 rite a function that returns how much is in the savings account at the end
W
of the month after M months. For example, if the engineer has a monthly
salary of $10,000 and saves 10% of that in a savings account earning 1%
monthly, E = 10,000, P = 10, and I = 1, and after the first month she will have
saved 10% of $10,000, which is $1,000, and earned 1% interest on it for a
total of $1,010. After the second month she will have deposited an additional

Chapter 5: Programming II: Looping 217


$1,000 for $2,010 total, and then earned 1% interest on that for a total of
2010 + 20.1 = $2,030.10. The function definition is as follows:
 function saved = problem18(E,P,I,M)
To test it, using the reasoning above, problem18 (10000,10,1,2) should re-
turn 2030.10 (which is 2.0301e+03 in matlab’s scientific notation).

19. Modify the problem above so that at the end of every year, the engineer
receives a raise of R percent. Hint: Inside the monthly for loop, at the end,
check to see if the month is evenly-divisible by 12, and if so, modify her
salary. The function definition is as follows:
 function saved = problem19(E,P,I,M,R)
To test it, after 10 years (120 months) of saving 10% with a starting monthly
salary of $10,000 in an account that earns 1% monthly, and earning a 5%
annual raise, problem19(10000,10,1,120, 5) should return $278,694.23
(or, 2.7869e+05 in matlab’s scientific notation. Use format bank to see the
answer to two decimal digits).

20. A square wave is applied to the circuit shown below that has a capacitor
value of 1/k.

1
The following piecewise-defined voltage v(t) is measured where V0 =
1 + ek

1+ (V0 − 1)e− kt , 0≤ t ≤1


 − k (t −1)
(1− V0 )e , 1< t ≤ 2
v(t) =  − k (t − 2)
1+ (V0 − 1)e , 2< t ≤ 3
(1− V0 )e

− k (t − 3)
, 3< t ≤ 4

218 Programming for Electrical Engineers


a.  se looping to create a function that takes a value of k and a number of
U
points N in the time region 0 ≤ t ≤ 4, and returns the corresponding time
vector t and voltage vector v. The first lines are shown below:
function [t,v]=problem20(k,N)
t=linspace(0,4,N);
b. Plot the result for k = 4 using a large number of points to make the
graph smooth (e.g., N = 1000). This is the typical “ocean wave” waveform
encountered after low pass filtering a square wave.

21. Repeat the calculations from Problem 20, but use k = 1/4. This demonstrates
how a simple circuit with a resistor and capacitor can turn a square wave
into a triangle wave.

22. Many engineering systems can be modeled as being in different states


that change with fixed probabilities, called a Markov Chain. An example
is shown in the diagram shown below, which models how a student who
matriculates as an EE major might change his major over four years of
education. Here the probability of changing major occurs once at the
end of each nongraduating year, for a total of three transitions (rising
sophomore, rising junior, and rising senior).

a. Write a function called MarkovMajor that takes a state, coded as 1 for


EE, 2 for CS, 3 for ME, and 4 for Business, and returns a state calculated at
random according to the probabilities in the illustrated Markov Chain.

Chapter 5: Programming II: Looping 219


The function definition is as follows:
 function out = MarkovMajor(in)
Test it by verifying that, for instance, MarkovMajor(4) always returns
4, but MarkovMajor(1) usually returns a 1, but occasionally returns a
2 or 3.
b. Write a program called Graduation that determines the graduating
major for a student that starts as an EE major (i.e., after going through
three potential state changes). It should take no arguments and return
a number from 1 to 4. The program should call MarkovMajor inside it.
Hint: The program will be very short, since most of the work is done by
MarkovMajor. The function definition is as follows:
 function major = Graduation()
c. Write a program that plots the histogram of graduating major
for 100,000 entering EE students. It should call Graduation(),
which will make the resulting code relatively short compared with
­MarkovMajor(). Include the code and the resulting histogram of out-
put states. The first few lines of the function definition are shown below:
function problem22()
 N = 100000;
 major = zeros(1,N);

23. Re-calculate parts a–c of


Problem 22 using the Markov
Chain shown to the right:

220 Programming for Electrical Engineers


24. A common method of analyzing
fault-tolerant, self-repairing systems
uses Markov Chains, an example of
which is shown in the diagram on the
right. This example shows a system
that can tolerate a failure in either
Part A or Part B but not both. A
single failure may be repaired, but
a failure in both parts results in a
non-recoverable system failure.
Every day a new random transition
takes place.

a. Write a function called MarkovSystem that takes a state, coded as 1


for all parts working, 2 representing the case in which Part A is broken,
3 representing the case in which Part B is broken, and 4 representing
both parts failed, with resulting permanent system failure. The func-
tion should return a state calculated at random according to the prob-
abilities in the illustrated Markov Chain. The function definition is as
follows:
 function out = MarkovSystem(in)
Test it by verifying that, for instance, MarkovSystem(4) always returns
4, but MarkovSystem(2) usually returns a 2, but occasionally returns
a 1 or 4.
b. Write a program called Week that determines the state that the com-
puter will be in after 1 week (i.e., after going through six potential state
changes). It should take no arguments and return a number from 1 to 4.
The program should call MarkovSystem inside it. Hint: It will be very
short, since most of the work is done by MarkovSystem. The function
definition is as follows:

Chapter 5: Programming II: Looping 221


 function state = Week()
c. Write a program that plots the histogram of states that the initially-
working system will be in after a week over 100,000 different random
simulations. It should call Week(), which will make the resulting code
relatively short compared with MarkovSystem(). Include the code
and the resulting histogram of output states. The first few lines of the
function definition are shown below:
 function problem24()
 N = 100000;
 state = zeros(1,N);

25. Re-calculate parts a–c of


Problem 24 using the Markov
Chain shown to the right, which
models a system with higher
failure rates but improved
repair methods.

26. Filtering (i.e., operating on) data is commonly used in Electrical Engineering,
as well as in other disciplines. Stock market analysis, for instance, may use
a 3-day moving average filter to look for trends while ignoring short-term
transients. A 3-day moving average takes a vector of daily prices for a stock
and returns a vector of the same length, representing the same time span,
whose corresponding values are the average of three days’ worth of current
and previous data (where possible). For example, the output vector’s value
at index 20 is the average of the input vector’s values at 18, 19, and 20.

There are two cases where this is impossible to do: neither of the first two
values in the output vector can be calculated this way because there does
not exist enough data in the input vector to do so. The second value of the
output vector can only be the average of the first two values of the input
vector, since one cannot go back an additional index in the input vector (it

222 Programming for Electrical Engineers


does not exist). Similarly, the first value of the output vector is the first value
of the input vector because earlier values in the input vector do not exist.
For example, the input might list Monday–Friday’s stock prices as
[46 48 50 61 69]. The output from a 3-day moving average filter is
[46 47 48 53 60], since 60 in the output vector is the average of 50, 62, and
69 in the input vector, and in the output vector, 47 is the average of 46
and 47, as there is no input value prior to 46.
Write a function that takes an input vector of data of arbitrary length and
returns a vector of the same length that is the 3-day moving average of the
input. The first few lines of the function are shown below:
function out = problem26(in)

N = length(in);

out = zeros(1,N); % preallocate vector


27. Generalize the function that solves the previous problem so that the
function is a moving average filter of length M, where M = 3 in the previous
problem. Hint: The mean(v) command calculates the average of vector v.
The first few lines of the function are shown below:
function out = problem27(in, M)

 N = length(in);
out = zeros(1,N); % preallocate vector

To test it, note that problem27([46 48 50],2) returns [46 47 49].

28. The built-in function exp(x) computes ex, but it could also be computed
in the limit as N grows large using the formula shown below:
N
xn
e =1+
x
where n! means the product of 1 × 2 × 3 × 4 ×… × n.
n=1 n!

Create a function that calculates this using the following function


definition:
 function result = problem28(x,N)
Test it by confirming that problem28(1,100) closely approximates
e1 = e = 2.718. Hint: There is a predefined function called factorial().

Chapter 5: Programming II: Looping 223


29. The following sum will calculate π in the limit as N grows large.
N
√12
f ( N) = k
k= 0
(−3) ( 2k + 1)

Calculate it by writing a function using the following function definition:


 function result = problem29(N)
To test it, setting N = 7 will return π to 4 decimal places of accuracy.

0. Use matlab to write a function that solves the math problem:


3
 result = (x + y) * 7
The function definition is:
 function result = problem30(x,y)
 The result should be in base 2. The arguments will be in base 2 and should be
provided with quotes. To check your work:
problem30('101','110')
  should return:

1001101

31. Write a function that takes a number in (typical) decimal form and returns
three strings: the string representation of the number in binary, in decimal,
and in hexadecimal (base 16). The function definition is as follows:
 function[bin, dec, hex] = problem31(in)

To test it, note that
[bin, dec, hex] = problem31(11)
should return
 bin = '1011'
 dec = '11'
 hex = 'B'
32. Fourier series analysis is an important technique from the signal processing
subdiscipline of electrical engineering. It involves the fact that any periodic
waveform can be broken up into a sum of sinusoids. It sounds impossible
that a sharp-edged function like a square wave could be composed of

224 Programming for Electrical Engineers


a sum of smooth sinusoids (indeed, Fourier’s original 1807 paper on the
subject was denied publication for this reason) but in the limit of summing
an infinite number of sinusoids, it is true. As an example, create a function
with the following function definition
 function f = problem32()
that calculates the following sum with t being a 1000 element time vector
ranging from 0 ≤ t ≤ 20 (f and t are bolded because they are vectors):

49
sin ( kt)
f=
k = 1 , 3 , 5 , ... k

In words, this means to first create a time vector t, and then initialize the
result vector f to be filled with a vector of zeros that is the same size as
the t vector. Next, create a for loop using loop variable k that starts at
1 and increments in steps of 2 so it becomes every odd number up to
49. For every iteration of the loop, add the vector sin(k t)/k to f. This is a
vector because t is a vector. The function returns f, but check your work
by embedding a plot (t,f) at the end of your code. It should look
similar to a squarewave. As the upper limit of the sum, 49, is increased the
function will appear progressively more similar to an ideal square wave.
When the program is run, besides returning the vector f, it should also
display the plot. Place this plot in a Word document.

33. Challenging!: You want to create a 72 Ω resistor, but that is not a standard
value. One way to build it is with a 33 and 39 Ω in series. Another way is
with a 75 and 1800 Ω in parallel. Numerically, both these options work
out to the same 72 Ω resistor. If you do a Monte Carlo analysis of the two
options with 10,000 simulations, do the two options have the same spread
of tolerances if they are all made with 5% resistors? For this problem, the
function should create the two histograms of data, labeled to show which is
the series and which is the parallel solution. These plots should be placed in
a Word document with additional text indicating your evaluation of which
is the better method or if both are equally preferable. 

Chapter 5: Programming II: Looping 225


SPICE
6
OBJECTIVES

After completing this chapter, you will be able to use LTspice to do the following:

•  se LTspice to create a schematic


U
• Analyze a DC circuit, and find the internal voltages and currents, as if
with a DMM
• Analyze a time-varying circuit, and find internal voltages, as if with an
oscilloscope
• Analyze a circuit whose output changes with frequency
• Describe the several meanings of “ground”
• Describe the differences between energy and power, and use LTspice to
compute them
• Simulate two common types of ICs: the 555 timer and the operational
amplifier

CIRCUIT SIMULATION

General circuit simulators calculate the voltages and currents in arbitrary circuits.
They have been in existence since the early 1960s, encouraged by increasingly
complex circuit designs and initially funded by the US Department of Defense.
An undergraduate class project in Berkeley spurred some of the first precursors
to the open-source program we now know as SPICE, the Simulation Program
with Integrated Circuit Emphasis. The first complete version was authored by
Laurence Nagel in 1973, and SPICE has since evolved to become the de facto
open-source standard for all circuit simulation packages.

Programming for Electrical Engineers 227


Most popular modern circuit simulators use SPICE at their core, including LTspice
by Analog Devices, PSPICE by OrCAD, and Multisim by National Instruments. This
text uses LTspice, which is free and available for both Windows and Mac operat-
ing systems. 

UTILITY

There are often two stages involved when solving real-world engineering problems:
design and validation. In the design phase, the engineer uses the problem speci-
fication to create the schematic using techniques taught in circuit and logic design
courses. The design phase cannot be aided by circuit simulation, although there
are other packages that can assist with this phase, such as filter design programs.

The validation phase confirms that the circuit created in the design phase works
as intended. Circuit simulators assist this phase by testing how the design per-
forms in both ideal and nonideal conditions, and they can evaluate performance
given a range of component tolerances, temperatures, and operating conditions. 

228 Programming for Electrical Engineers


INSTALLING LTSPICE

Download LTspice from the Analog Devices website (http://www.analog.com).


Versions are available for both PC and Mac operating systems. Both are relatively
small downloads, and despite possible differences in version numbers, both
offer near-identical user experiences. Microsoft users should choose the 64 bit
version if prompted during installation.

When the installation is complete, the program will automatically load and show
the screen below:

 STEPS IN SIMULATING

This textbook describes the following three steps in circuit simulation in detail:
1. Draw the schematic (i.e., schematic capture). Three different types of
entities must be defined in this stage:
A. Components, such as voltage and current sources, resistors, capacitors.
B. Ground.
C. Wires connecting the above elements.

Chapter 6: Spice 229


2. D efine the analysis type. In this textbook, we will describe the three
most common types:
A. DC Analysis: DC analysis assumes all sources are constant, so the
outputs will be constant.
B. Transient Analysis: Transient analysis measures time-varying outputs.
C. AC Analysis: AC analysis measures how the circuit responds to differ-
ent frequencies of an input sinusoidal source.
3. View the results. Depending on the analysis type, this output may be
a number, like a reading from a digital voltmeter; a time-dependent
waveform like an oscilloscope trace; or a frequency-dependent Bode plot.

TECH TIP: WHAT IS GROUND?

Unlike most components, there are three commonly used


symbols for ground: . LTSpice uses the triangular
symbol shown in the center. To make matters more confusing,
any of these ground symbols can mean any of three different
concepts, depending on the context:
1. Ground can mean a physical connection to the earth,
often through a copper spike driven into the ground.
Ground is required by certain types of radio antennas,
as well as by electrical power safety codes to protect the
user in case insulation fails.
2. Ground can also refer to the set of conductors that return
current to the power source in a circuit. For example,
most electrical equipment in automobiles have two
power connections: one connected by wires through
a fuse to the +12V source and the other to the metal
chassis of the car, called “ground.” The car chassis is
­connected to the negative side of the electrical power
source by a thick ground wire.

230 Programming for Electrical Engineers


3. I n this chapter, however, ground refers to an imaginary,
arbitrary voltage reference point in a circuit. Voltage is
always measured between two points, which makes
it awkward to describe in a circuit simulator, since the
number of possible combinations of any two points in
a circuit rises very rapidly with circuit complexity. When
the user attaches the ground symbol to a point, say at
“Point B,” she is saying all voltages are measured relative
to Point B. A single ground symbol does not change the
circuit behavior in any way; it just lets us say “the voltage
at Point A is 6 V,” rather than “the voltage between Point
A and Point B is 6 V.” In other words, we define the volt-
age at ground to be 0 V, which lets us measure all other
circuit voltages relative to ground.

Ground is often placed at the most negative point in the circuit,


which is often the negative terminal of the power source. In this
case, all other voltages in the circuit (relative to ground) will be
positive, and all current in the circuit will return through ground
to the power source.

The schematic below (L) shows a number of voltages defined


between various points. The adjacent schematic (R) adds a
ground symbol, which lets the same voltages be redefined in a
much simpler manner. Which would you rather read?

Chapter 6: Spice 231


PRACTICE PROBLEMS
1. T he schematic below introduces a new component, the
Bipolar Junction Transistor, or BJT. Its operation is covered in
a future electronics course. You do not need to understand
how it works to use the concept of ground to simplify the
circuit. Voltages between various points are shown. If ground
is placed at the bottom of the circuit, determine the voltages
relative to ground at points A, B, and C in the circuit. Use the
example in the Tech Tip on the previous page as a guide, and
remember that voltages do not change along a wire, only
across components. Note: this does not use Spice. 

 SCHEMATIC EDITOR

Circuit simulation begins with schematic capture, which means creating a sche-
matic diagram in the schematic editor. A schematic is composed of components
(such as voltage and current sources, resistors, capacitors, inductors, diodes, tran-
sistors, and integrated circuits), at least one ground symbol, and wires connecting
the components and ground. Every component has two pieces of associated data:
its name, called its reference designator, and data describing its value. For exam-
ple, a particular resistor may be named with a reference designator R11 and have a
value of 4.3 kΩ, or a voltage source may be called V1 and have a value of 12 V.

232 Programming for Electrical Engineers


Starting a New Schematic

The Windows application start button appears as follows:


When started, LTspice periodically checks for new devices added to its library.
Analog Devices provides this circuit simulator for free because its tight inte-
gration with the company’s integrated circuits encourages engineers to use its
devices. Since this textbook only uses basic components, it is safe to skip these
library updates if you wish.

Once loaded, the program will appear as shown on page 229. The grayed-out
logo in the center of the screen indicates that there is no current schematic. To
create one, choose File → New Schematic from the menu. The logo will disap-
pear, and the program’s title bar will show “Draft1.asc” to indicate that a new
schematic has been created with the default name. Change the name to “Sche-
matic1” by using File → Save As and notice the change in the title bar text.

 Selecting the Library

The library is a collection of predefined components, including voltage and cur-


rent sources, resistors, inductors, capacitors, and integrated circuits, all of which
can be selected and drag-and-dropped to create a schematic. All of these com-
ponents, and the libraries they are contained in, are selected using the button

Chapter 6: Spice 233


on the main toolbar. Choose it to display the Select Component Symbol dialog
box, as shown below:

Note the folder in which the library is defined, highlighted with a red ellipse in
the figure above. If the component dialog does not show components and com-
ponent folders, beginning with the [Comparators] folder, it is because the library
folder is pointing to the wrong location. Change it to the C:\Users\YourUser-
Name\Documents\LTspiceXVII\lib\sym folder using the Top Directory dropdown
selector and the Move Up Folder selector highlighted above. 

Defining Voltage, Current Sources

To create a voltage source, select the component option using the button on
the main toolbar. The component dialog box should appear as shown above, still
set to the correct library location selected in the above step. Move the horizontal
scrollbar until “voltage” is highlighted. Select it, click to place it in the schematic,
and press the Escape key to escape from voltage source placing mode.

234 Programming for Electrical Engineers


To select the voltage level of the source, right-click the symbol (not the text next
to the symbol) and enter the desired voltage in the “DC value (V)” textbox. Leave
the “Series Resistance (Ω)” textbox blank. Current sources are set in the same
manner using the “current” component.

The LTspice voltage and current sources are very flexible; they can represent con-
stant-voltage or current sources, a square wave, a sinusoidal wave, or a number
of other commonly encountered waveform types. By default, it is a DC (constant)
source. To select a different waveform type, right-click the symbol (not the text)
and choose the “Advanced” button.

To change the designator ID of the source, right-click the text surrounding the
source. Typical names for voltage sources are V1, V2, etc., and I1, I2, etc., for cur-
rent sources. 

Other Common Components: Resistors, Capacitors, Inductors, Diodes, and


Transistors

Resistors, capacitors, inductors, diodes, LEDs, transistors, and more can be


selected using the component dialog box. The only abbreviated names are “res,”
“cap,” and “ind” for resistor, capacitor, and inductor. These three and the diode
have dedicated toolbar buttons, also: . You can use the prefix symbols
M, k, m, and u to stand for Mega, kilo, milli, and micro, respectively (note that
letter u is used instead of μ). For example, it is less error prone to specify a 2.2 μF
capacitor as 2.2u rather than 0.0000022. 

Manipulating Component Placement

Components can be rotated in 90 degrees increments before they are placed


using the Ctrl-R key combination. Once they are placed, they can be rotated or
moved by selecting the tool, then selecting the component, and then either
moving it with the mouse or pressing Ctrl-R. Components can be deleted by
selecting the tool and then clicking on the component to be deleted. Mistakes
can be undone with the undo tool ; however, the undo tool is not mapped to
the typical Ctrl-Z shortcut. 

Chapter 6: Spice 235


Wire, Ground

Wires are drawn after selecting the wire tool, . Unwired connection points on
components appear as open squares; once connected with a wire, the square
disappears. The ground symbol is placed after selecting the ground tool, .
Make certain the open square on top of the ground disappears after connecting
it to the rest of the schematic with a wire. If this is not done, or if the ground is
not placed, the simulation will fail and report the warning, “This circuit does not
have a conduction path to ground.” 

Operational Amplifiers and Other Integrated Circuits

Future courses will likely introduce myriad new components, called integrated
circuits (the “IC” in SPICE). These can be found from the component dialog box by
opening up the folder of the IC category, and they include components such as
comparators and opamps. Sometimes generic components will be available; an
example of this is the “opamp” available in the “Opamps” library, which is meant
to represent a generic, somewhat-idealized opamp. 

Summary of Schematic Capture


• Schematic capture is the first step of circuit simulation.
• Components: created using toolbar button.
– Examples: voltage source, resistors, inductors, transistors, ICs.
– Rotate them before placing using Ctrl-R.
– Reference Designator: click on the text to change the component
name (e.g., C2).
– Value: click on the symbol to change the value (e.g., 4.7 uF).
• Ground: created using the toolbar button.
– At least one required per circuit.
– Often placed at most negative part of the circuit.
– Voltages measured relative to this point.
• Wires: created using the toolbar button.
– Open squares at connection points disappear when connected with
a wire. 

236 Programming for Electrical Engineers


PRACTICE PROBLEMS
2. C
 reate a schematic of the following circuit, print it, and
annotate it with your name. Save it to your work folder to
be used in the next Practice Problem. Using the Windows
Snip & Sketch Tool or the Mac Grab Tool, cut and paste the
image into a Microsoft Word file. 

TYPES OF LTSPICE SIMULATIONS

There are three commonly used SPICE analysis types at the undergraduate level:
DC Operating Point, Transient, and AC Sweep.

DC Operating Point: This is a complicated name for a simple concept. Use this
analysis type if the circuit has only unchanging sources, meaning constant-volt-
age and constant-current sources. In this case, all voltages and currents in the
circuit will also be constant, and would be measured in a real-world circuit using
a digital multimeter. There are no options for this simulation, and the results are
viewed by hovering the cursor over the wire or component of interest.

Transient Analysis: This is the analysis type to use if the circuit has changing
voltages and currents. Examples include circuits whose sources step from one
voltage to another, or are defined to be a square wave, or if the circuit oscillates.
The real-world circuit would require an oscilloscope to view how the circuit volt-
ages and currents change in time; the simulated results are viewed by clicking
the wire or component of interest after simulation to show their voltages on a
simulated oscilloscope.

Chapter 6: Spice 237


AC Sweep: Electrical engineers are often concerned with how a circuit changes
a purely sinusoidal source of various frequencies. For instance, a high-fidelity
audio amplifier should exhibit the same signal gain for input frequencies span-
ning the range of human hearing (often taken to be 20 Hz–20 kHz), or a low
pass filter that routes signal energy to bass speakers should pass frequencies
below about 150 Hz but attenuate higher-frequency signals. This analysis is per-
formed with an AC Sweep, in which one source is defined to be the source of the
variable-frequency AC signal, and the resulting change in the signal magnitude
and phase is displayed versus frequency. This is the equivalent of attaching a
spectrum analyzer to a real-world circuit, and the resulting magnitude versus
frequency plot is commonly called a Bode plot. 

DC SIMULATION WALKTHROUGH

The second and third phases of circuit simulation, defining the analysis type and
viewing the results, are best taught by example. The first of the three main types
of circuit analysis this chapter covers is DC simulation, and it will be taught by
completing an analysis of the circuit shown below:

Follow these steps to gain a solid working knowledge of DC circuit analysis.

Open up a Blank Schematic


• Open LTspice and from the menu, File → New Schematic.
• Save it immediately using menu, File → Save As. Give the schematic a
simple name with no spaces under “Name” (e.g., spice_dc). Save it in
your personal data directory for this course. 

238 Programming for Electrical Engineers


Add a 10V Source
• Click the component icon . Find the “voltage” component—typing
the first few letters will scroll to it—double-click to select it, and place
it in your schematic by clicking once. If you click again, you will place
a second voltage source; to prevent this and get out of “create voltage
source” mode, press the Esc key.
• How to delete and move components: rather than select-and-drag, or
select-and-delete, as in most programs, select the action first, and then
select the thing you want to change. Create a second voltage source
now using the above steps to practice:
– To delete the second voltage source, select the delete tool , and
then click on the offending voltage source. Press Esc to exit delete
mode.
– Move your desired V1 source to the left middle screen by selecting
the move tool . If you forget which icon it is, hover the mouse over
the icons for a tooltip. Select the voltage source you want to move,
then move your mouse and click to place it. Press Esc to exit move
mode.
• To set the voltage to 10 V, right-click inside the symbol. Do not right-
click on text outside the symbol or you will change the name of the
source but not change its value.
– Set the DC value to 10 V (the “V” at the end is optional), leave the
series resistance box empty and press OK.
• Save your work! Ctrl-S or from the menu, File → Save.
• Review: to make a 10 V source, select the part using and choose “Volt-
age,” then set the value of the source by right-clicking inside the symbol. 

Add Two Resistors


• You could click and choose “resistor,” but resistors are so common
they have their own icon: . Click it and place two resistors stacked
vertically but separated by a small distance to the right of the voltage
source. Click “Esc” to exit resistor-placing mode.
• Want to change the vertical orientation of your resistors? Try placing
one horizontally oriented. To do this, choose the resistor icon again

Chapter 6: Spice 239


as you did above, but before placing the resistor, press Ctrl-R to rotate
it. Place this horizontal resistor, then delete it using the technique you
learned in the previous section.
• Right-click resistance symbol (not the text) and make the top one 6 k
and the bottom 4 k. Save your work.
• Review: To place a resistor, choose , and right-click the symbol to set
the resistor’s value. Press Ctrl-R before placing to rotate. 

Add the Ground and Wire Everything Together


• Click the icon and place it below the voltage source so there is a little
space separating them.
• Select the wire tool to wire the parts together.
• Click on one component end, and then click on another component
that you wish to wire together. The open square ends of the wire will
vanish, and the wire will stop following the cursor. Clicking intermediate
points while wiring will allow you to create corners.
• Mistakes can be deleted using the tool.
• Repeat to wire all components together. When you place a wire
on another wire, it will form a closed square indicating a connection.
Compare your result to the figure on the right. Save your work.
Hint: To check your work, check to make sure there are no open
boxes (unwired connection points).
• Review: Place a ground using and wire components using . 

Run the Analysis


• Specify the type of analysis to run. From the menu, choose Simulate
→ Edit Simulation Cmd and choose the “DC op pnt” tab (DC operat-
ing point) to determine all voltages and currents for this example with
constant sources. Choose “OK” and place the “.op” text that appears
anywhere on a blank area of the schematic.
• Select Simulate → Run from the window or choose the button. An
analysis window will pop up and show the voltages at, and currents
through, various cryptically named nets like “n001.”

240 Programming for Electrical Engineers


• T o determine the voltage along any wire relative to ground, hover the
cursor above the wire and look in the status bar at the bottom of the
window. This duplicates probing the wire with a digital multimeter.
• To determine the current flowing through any component and the
power that it dissipates, hover the cursor over the component and look
in the status bar.
• Review: Find DC voltages and currents using Simulate → Edit Simulation
Cmd and choosing “DC op pnt.” Run the simulation using the but-
ton. View voltages and currents by hovering over them in the schematic
window.

PRACTICE PROBLEMS
3. S imulate the following circuit you built in Practice Problem 2,
and find the voltage across the 4 Ω resistor. 

Chapter 6: Spice 241


TECH TIP: POWER VERSUS ENERGY (WORK)

Many people use the terms “power” and “energy” inter­


changeably, but these terms have very different meanings.
Energy, measured in Joules (J), is the ability to do work—
examples of a quantity of energy include a coin lifted by 1 foot
(20 J), two AA batteries (20 kJ), a ham sandwich (2 MJ), or 20
gallons of gasoline (2.4 GJ). The rate at which energy is used is
power, measured in Watts (W). A Ferrari will be able to deliver
more power than a Volkswagen Beetle, even though both may
start with their gas tanks identically full (i.e., they begin with the
same energy, but the greater power of the Ferrari will cause it
to use that energy more quickly). A car going up a hill will use
more power than the same car traveling on flat ground. The
ham sandwich will power a young child for longer than an adult,
and the AA battery will light a 150 mW LED for about twice as
long as a brighter LED rated for 300 mW of power consumption.

Mathematically, energy is the time-integral of power (or


power × time, if power use is constant), and power is the time-
derivative of energy (or energy/time, if power use is constant).
energy = ∫ power (t) dt = power × time (if power is constant)
energy
power = d energy (t) = time (if power is constant)
dt

242 Programming for Electrical Engineers


PRACTICE PROBLEMS
4. U
 se LTspice to determine how much power is being delivered
by the voltage source in the figure below: 

5. H
 ow long will 8 1.5 V AA batteries power the circuit above if a
single AA battery holds about 10 kJ of energy? Hint: solve the
energy
power = time equation given above for time. ©

PRO TIP: ETHICS II

Your engineering integrity will likely be tested many times


throughout your career, which is why the Accreditation Board
for Engineering and Technology (ABET) requires that ethics
be an integral part of engineering education. Besides the IEEE
Code of Ethics, described in an earlier Pro Tip, engineers who
earn the Professional Engineer (PE) certification promise to
abide by a similar set of rules set by the National Society of
Professional Engineers (NSPE). This organization represents all
engineering fields, including electrical, computer, mechanical,
civil, biomedical, chemical, nuclear, and petroleum.

Chapter 6: Spice 243


The preamble of the NSPE Code of Conduct for Engineers (2007)
states:

Engineers shall at all times recognize that their primary obliga­


tion is to protect the safety, health, property, and welfare of
the public. If their professional judgment is overruled under
circumstances where the safety, health, property, or welfare of
the public are endangered, they shall notify their employer or
client and such other authority as may be appropriate.

David Jonassen developed a generic framework to help you use


this NSPE Code of Ethics, or the IEEE Code of Ethics, with any
engineering ethics problem (Journal of Education, vol. 98, no. 3,
2009). His analysis method consists of five steps:
• State the problem. Define the ethical problem clearly in
a few words.
• Get the facts.
• Identify and defend competing moral viewpoints. Most
ethical problems involve multiple perspectives, and each
viewpoint may lead to a different conclusion.
• Identify the best course of action.
• Qualify the course of action with facts.
When faced with a difficult decision, consider documenting
your decision using this framework.

244 Programming for Electrical Engineers


TECH TIP: 555 TIMER

There are over ½ million integrated circuits (ICs) sold just


by Digi-Key, one of the largest electrical parts vendors. Of
these, the 555 timer is historically the most popular. Since its
introduction by Signetics in 1972, this chip has outsold all other
types of ICs. It has been used in medical monitors, spacecraft
navigation systems, and children’s toys. Although it can be used
in many different configurations, one of the most common is
as an astable multivibrator—in simpler words, an oscillator.
The frequency is set using two resistors and a capacitor; it does
not change significantly with changes in the powering voltage.
The schematic using it as an astable multivibrator and the pin
numbering for the IC is shown below.

Notice that although the schematic symbol is rectangular like


the IC, the pin numbering of the schematic does not have to
correspond to the pin positions on the actual device, which
allows the schematic to be drawn more simply. For instance,
the schematic shows pins 4 and 8 next to each other since they
are electrically connected with a wire, although on the physical
device those pins are diagonally across the body of the IC.

Schematic
Pin numbering
The design equations for this circuit are:
LED blinks on for 0.693*R2*C seconds

Chapter 6: Spice 245


PRACTICE PROBLEMS
6. U
 se matlab to find the values for R1 and R2 so that the LED
is on for 1/3 second and off for 2/3 second. Use a C = 1 μF
capacitor. 

 TRANSIENT SIMULATION

The second of the three types of circuit analysis this chapter describes is tran-
sient analysis. It will be taught by completing an analysis of the circuit shown
below (L). Note that although similar, this is not the solution to the Practice Prob-
lem. Follow through the steps that follow to gain a solid working knowledge of
transient circuit analysis. When the schematic capture is complete, it should look
as shown below (R). LTspice fixes the location of the IC pins in the same positions
as on the physical chip. Although this makes wiring up a physical circuit from an
LTspice schematic easier, it makes the schematic more difficult to read.

Open up a Blank Schematic


• Open LTspice, and from the menu, File → New Schematic.
• Save it immediately using menu, File → Save As. Give the schematic a
simple name with no spaces under “Name” (e.g., spice_transient). Save it
in your personal data directory for this course. 

246 Programming for Electrical Engineers


Add Voltage Source
• Click the component icon . Find the “voltage” component—typing
the first few letters will scroll to it—double-click to select it, and place it
in your schematic by clicking once. Right-click the symbol, not the text,
and make it 5 V. 

Add 555 Integrated Circuit


• Integrated circuits are organized into folders. Choose the [misc] folder
and select the NE555 component. The NE prefix is unimportant; it in-
dicates a variant improving upon the original 555 design. Leave plenty
of room between it and the voltage source to place the resistors and
capacitor. You may need to alter the zoom with the tools that
zoom in, pan, zoom out, and zoom to fit the entire schematic on the vis-
ible page, respectively. 

Add Resistors, Capacitor, LED, and Ground


• Click the resistor icon , and Ctrl-R if desired to rotate, place, and right-
click the component symbol (not text), and give it a value of 50k. Spice
understands “k” and there is no need to add the Ω symbol. Do the same
for the capacitor using the symbol and using 1u. Recall Spice uses “u”
for μ. The LED is found under the main folder, and like the 555 IC has
no parameters to set. The ground is placed with the symbol. 

Wire It Up
• Use the tool to wire the circuit together. 

Run the Transient Simulation Analysis


• Specify the type of analysis to run. From the menu, choose Simulate
→ Edit Simulation Cmd and choose the default “transient” tab since
the oscillator’s output varies with time. To analyze the circuit from 0 to
0.5 seconds, specify 0.5 as the stop time, 0 seconds as the time to start
saving data, and leave the rest of the options blank.

Chapter 6: Spice 247


DIGGING DEEPER
Curious about all of the other options for the transient
simulation analysis? Most of the options are rather arcane and
can be investigated under Help > LTspice > Transient Analysis
Options. The only three commonly adjusted options are Stop time, Time to start
saving data, and Maximum timestep. Stop time is the duration of the simulation
in seconds. Set a Time to start saving data value to greater than 0 seconds if
early circuit behavior is not of interest. LTspice automatically chooses how
frequently to compute output values—more often when output values
are quickly changing, and less-frequently otherwise. This can be manually
controlled by setting the maximum timestep value, often in milliseconds or less.

•  hoose “OK” and place the “.tran 0.5” text on a blank area of the schematic.
C
• Select Simulate → Run from the window or choose the button. The
following split schematic/analysis window will appear.

•  osition the cursor over a wire in the schematic in which you want to
P
see an oscilloscope-style plot of the voltage versus time. In the example
above, the cursor is hovering over the wire that is attached to pin 3,
OUT. The cursor changes to resemble a red oscilloscope probe.
• Click on the probe to display the corresponding voltage waveform.

248 Programming for Electrical Engineers


•  lick on other wires to add traces. Right-click on a trace and from the
C
popup menu choose Edit → Delete to remove. 

PRACTICE PROBLEMS
7. M
 odify the above walkthrough to print one second’s worth
of data. Record a screen grab of the analysis window using
the Snip & Sketch Tool (if on Windows) or Command+Shift+4
(if on a Mac). 

TECH TIP: OPERATIONAL AMPLIFIERS

The operational amplifier, or more simply “opamp,” is a very


commonly used integrated circuit. It is available in a stunning
number of varieties; Digi-key sells 35,000 different types of
opamps. Opamps are thoroughly described in circuit courses;
this textbook considers one application of an idealized opamp
whose schematic symbol is:

Chapter 6: Spice 249


The opamp is used for many different purposes, including:
amplifying, filtering, and even as an analog computer,
integrating and differentiating input signals. An example of
a low pass filter is shown below. The signal input vin(t) to the
opamp is on the left, the output is on the right, and the vertical
wires in the middle of the opamp with the small polarity
symbols are the DC power connections to the opamp.

The circuit shown below, known as a second-order Butterworth


low pass filter, will pass input sinusoids with frequencies
below a preset frequency f0, but attenuate sinusoids of higher
frequencies. It could be placed before a bass amplifier to ensure
no high frequencies are sent to the woofer speakers.

The right-most 5V source’s wire crosses, but does not connect


to, the output of the opamp. The convention in EE is that two
wires crossing perpendicularly do not connect unless there is a
large black dot drawn at their intersection.

The design equations for this circuit, given desired cutoff


frequency f0 and resistor value R, are
√2 C1
C1 = and C2 =
2π R f0 2

250 Programming for Electrical Engineers


PRACTICE PROBLEMS
8. U
 se the above equations to select C1 and C2 to design a low
pass filter with a cutoff of 200Hz, a realistic value for a sub-
woofer speaker amplifier. Use 10 kΩ resistors. 

AC SWEEP SIMULATION

The last of the three types of circuit analysis this chapter describes is AC sweep
analysis, and it will be taught by completing an analysis of the circuit shown
below on the left (note that although similar, this is not the solution to the Prac-
tice Problem). Follow the steps below to gain a solid working knowledge of AC
sweep analysis. When the schematic capture is complete, it should look as below
on the right. Notice that because ground is defined, there is no need to bring the
lower wire out from the schematic to define Vout between two points; it is now
the single point to the right of the opamp.

Open up a Blank Schematic


• Open LTspice, and from the menu, File → New Schematic.
• Save it immediately using menu, File → Save As. Give the schematic
a simple name with no spaces under “Name” (e.g., spice_ac). Save it in
your personal data directory for this course. 

Chapter 6: Spice 251


Add Opamp Integrated Circuit
• Integrated circuits are separated by folders. Choose the [Opamp] folder
and select the “UniversalOpamp2” component. Typing the first few
letters of the name will autoscroll to the right location. If you were
physically prototyping the circuit, you could achieve a more accurate
simulation by selecting an opamp part number rather than the generic
UniversalOpamp2 part. 

Add Voltage Sources


• Click the component icon . Find the “voltage” component—typing
the first few letters will scroll to it—double-click to select it, and place it
in your schematic by clicking once. You may want to flip its direction us-
ing Ctrl-R. Right-click the symbol, not the text, to set the opamp power
sources to 5V. You may need to zoom out with the tool to place all
of the sources. To indicate that the input on the left is the AC sinusoidal
source whose frequency will be swept during the analysis stage, leave
the DC value blank, choose “Advanced” and then in the “Small signal AC
analysis” panel enter “1” for AC Amplitude. 

Add Resistors, Capacitors, and Ground


• Click the resistor icon , place two resistors, right-click the component
symbol (not text), and give them values of 10 k. Spice understands “k”
and there is no need to add the Ω symbol. Do the same for the capaci-
tors using the symbol (you may want to rotate one using Ctrl-R
before placing). The ground is placed with the symbol. 

Wire It Up
• Use the tool to wire the circuit together. 

Run the AC Sweep Analysis


• Specify the type of analysis to run. From the menu, choose Simulate
→ Edit Simulation Cmd and choose the “AC Analysis” tab. AC Analysis
determines how the magnitude of the output voltage changes as a
designated input sinusoid varies in frequency. To analyze the circuit over

252 Programming for Electrical Engineers


a range of frequencies from 1Hz to 10 kHz, choose the “Decade” type of
sweep (this is the standard Bode-style range of logarithmic frequencies
earlier studied), 100 points per decade (higher is more accurate, lower is
faster), 1 as the start frequency, and 10k as the stop.
• Choose “OK” and place the “.ac dec 100 1 10k” text anywhere on a blank
area of the schematic.
• Select Simulate → Run from the window or choose the button. The
following split schematic/analysis window will appear:

•  osition the cursor over a schematic wire of whose voltage you want to
P
examine a Bode-style plot of the voltage versus frequency. The above
example highlights the cursor hovering over the wire that is exiting out
of the opamp. The cursor changes to resemble a red probe.
• Click on the probe to display the corresponding voltage.

Chapter 6: Spice 253


• T wo plots are automatically created; one shows the magnitude of the
signal in green, whose value is plotted relative to the axis on the left,
and the other plot shows the phase in red, whose value is plotted rela-
tive to the axis on the right. These are Bode plots. To remove the phase
trace, click on the right axis and choose “Don’t plot phase.” Notice how
the data show low frequency signals under about 100Hz are not attenu-
ated. Earlier chapters described how dB are calculated using a loga-
rithmic scale of 10dB⁄20, so 0 dB = 10d0/20 = 100 = 1 = 100% passed at low
frequencies. Higher-frequency signals are reduced; the approximately
−40dB of attenuation at 1 kHz corresponds to the circuit passing just
10−40⁄20 = 10−2 = 1% of the input signal.

PRACTICE PROBLEMS
9. M
 odify above walkthrough to use 20 k resistors, but the same
value of capacitors. Analyze the performance of the filter over
the same 1 Hz to 10 kHz range. Record a screen grab of the
analysis window using the Snip & Sketch Tool using Windows
or Command+Shift+4 on a Mac. Does the cutoff frequency
increase or decrease as resistor values are increased? 

254 Programming for Electrical Engineers


ADVANCED TIP: USING NETS

The opamp schematic is functional, but looks messy because of the 5V sources
providing power to the opamps. If we defined a symbol like +5V to be 5 V and
−5V
another to be –5 V, then we could significantly neaten the schematic while
making the intent clearer. These symbols are examples of nets, as illustrated in
the following schematic:

The circuit on the right is functionally the same as the previously analyzed circuit
on the left. The two voltage sources that are apparently unconnected define two
nets called +5 V and 5 V, which are used to power the opamp on the right. It also
uses multiple ground net symbols to simplify the schematic further. Practicing
engineers much prefer this to the schematic on the left.

LTspice permits the definition of nets using the tool. As an example of using it
to simplify the previous schematic, first create the following schematic capture:

Chapter 6: Spice 255


Then click the tool and create the net name +5 V, of Port Type “none,” and
place as shown below. Similarly, create a –5 V net name and place as shown in
the figure below:

Wire them up as shown below. Now every time a +5 V net symbol is used, it is
functionally identical to being wired to a +5 V voltage source whose more nega-
tive end is wired to ground. This is perhaps only marginally neater in this sin-
gle-opamp example, but becomes far neater in more complex circuits that use
multiple opamps.

256 Programming for Electrical Engineers


PRO TIP: LIFELONG LEARNING

In 1962, economist Fritz Machlup coined the phrase “Half-life


of knowledge” to quantify how quickly knowledge becomes
obsolete. The outlook is not sanguine for electrical engineers;
about a century ago, it was estimated to be 35 years, while a
half-century ago, this dropped to a decade, and in 2002, the
president of the National Academy of Engineering stated it
was between 2.5 and 7 years, depending on the subfield. Entire
career fields are similarly mobile; a generation ago, an engineer
could expect to carve out a niche in one well-defined area for
one company—missile guidance systems by Lockheed, for
example—and remain there for a career. No longer.

What can electrical students do to safeguard hard-won


technology skills?
1. Accept that the skills learned as an undergraduate can be
generalized and are designed to be transferable. matlab
and Spice have existed for a long time (since 1984 and
1973 respectively), but both may be superseded by new
technologies in a career lifetime. It is unlikely, however,
that the underlying programming and circuit analysis
skills gained by learning them will be similarly replaced.
It is much, much easier to learn a second programming
language or circuit analysis system after the first.
2. Continue to learn and retrain throughout one’s ca-
reer. Use IEEE membership to keep abreast of new
software and hardware developments through

Chapter 6: Spice 257


section meetings, and read publications like the
monthly IEEE Spectrum that comes with IEEE mem-
bership. Many companies offer in-house training
programs and reimburse educational expenses from
weekend seminars to full university degrees. Most
employers reimburse continued education training
expenses required to maintain PE licenses. Electrical
engineering also has a large presence in the rela-
tively recent introduction of Massive Open Online
Courses (MOOCS); some excellent ones are offered at
http://courses.edx.org and through the IEEE.

Ultimately, it is the same love of learning that drives people to


become engineers that keeps them current throughout their
careers. Although the profession is changing more rapidly
now than ever before, engineering culture is equally quickly
adapting to the reality that education is not a college degree
but a lifetime process.

258 Programming for Electrical Engineers


COMMAND REVIEW

Schematic Capture Commands


File → New Schematic Begin a new schematic diagram.
Place a component
Voltage Place a voltage source (after selecting, )
Place a resistor
Place a capacitor
Place an inductor
Place a wire

Place ground
 Zoom Tools
Zoom in, pan, zoom out, and zoom to full circuit
 Schematic Editing Commands
Delete tool
Move tool
Undo tool
 Analysis Commands
Simulation → Edit Simulation Choose the simulation type
• DC op pnt Voltages unchanging
(after selecting Simulation → Edit Simulation)
• Transient Voltages change with time
(after selecting Simulation → Edit)
• AC Sweep Changes input sinusoidal frequency
(after selecting Simulation → Edit)
      Run the simulation
 View Results
DC Hover mouse over schematic for voltage, current, power
Transient Click wire to add to oscilloscope display
AC Sweep Click wire to add to Bode plot

Chapter 6: Spice 259


LAB PROBLEMS

1. U
 se LTspice to find the voltage across the 10 Ω resistor in the following
circuit. (Hint: do not forget to assign a ground node in LTspice!)

2. T he circuit above is powered by 2 AA batteries. How long will the circuit last
if a single AA battery holds 10 kJ of energy?
3. Find the voltage across the current source in the circuit shown below. The
current source is called “Current” and is found in the same library that holds
the “Voltage” source. Print the LTspice schematic showing the voltage at the
top of the current source.

4. F ind the current through the voltage source of the three-dimensional cube
of 1kΩ resistors shown below. Print the LTspice schematic showing the
current through the voltage source. Some versions of LTspice show current
in wire after simulation by hovering over it; some only show the currents
in the postsimulation screen. Take a screenshot of the current through the
voltage source. Do not be concerned if the current is positive or negative;
the sign indicates only the direction of flow.

5. T he duty cycle of a square wave is the ratio of the time the cycle is spent
“on” divided by the total length of time of each period. For instance, if
the “on” time is 1 second, and the “off” time is 3 seconds, then the total

260 Programming for Electrical Engineers


period is 4 seconds, the duty cycle is 1/4 = 25%, and the frequency is
1/period = 1/4 Hz. Find the resistors needed to build the 555 circuit
discussed in the Tech Tip that oscillates at 1 kHz at a 33.3% duty cycle,
then analyze it using LTspice and print out 4 ms of the waveform showing
the current through the LED. Use a 1 μF capacitor.
6. Repeat Problem 5 for a circuit that oscillates at 100 Hz at a 10% duty cycle.
Use a 1 μF capacitor. Print the LTspice schematic and a plot of the first 50 ms
of current through the LED.
7. Design a second-order Butterworth low pass filter like Practice Problem 9
with a cutoff frequency of 60 Hz using 100 k resistors. Analyze it using an AC
sweep analysis from 10 Hz to 1 kHz. Print both the LTspice schematic and the
plot of just the output magnitude, not phase, using the Snip & Sketch Tool
on Windows or Command+Shift+4 on a Mac. Use the net method discussed
on page 255 to avoid crossed wires. Hint: if LTspice returns an “unknown
subcircuit” error, check that “Universal Opamp2” was used and not “opamp2.”
8. Calculate the Bode plot for the high pass filter shown below as the input
frequency varies from 1 Hz to 10 kHz. Print both the LTspice schematic and the
plot of just the output magnitude, not phase, using the Snip & Sketch Tool on
Windows or Command+Shift+4 on Mac. Use the net method discussed on
page 255 to avoid crossed wires. Hint: If LTspice returns an “unknown subcircuit”
error, check that “Universal Opamp2” was used and not “opamp2.”

9. You are an Electrical Engineer working for a company that designs natural
gas powered electrical power plants. One of the newly hired members on
your team is upset that the company is not spending more time examining
the profitability of generators powered by renewable energy sources, such as
wind and solar. The issue was already examined in a lengthy and expensive

Chapter 6: Spice 261


study a decade earlier, and it was found then that renewable energy sources
would not be as profitable for the company in the foreseeable future. The
employee argues that the study’s goal was fundamentally flawed: that the
decision should not solely rest on profitability, but that ethical responsibility
to reduce carbon emissions should also play a role. Use the five-step method
of David Jonassen with the NSPE Code of Ethics to analyze the above
situation from the viewpoint of the new hire and from the viewpoint of the
company’s board of directors. Which viewpoint do you find more compelling?
10. Use the five-step method of David Jonassen with the NSPE Code of Ethics
to analyze the following, unfortunately realistic, situation an engineer may
encounter:
You are an electrical engineer working for a defense contractor. Your
team is completing work on the guidance control system for an anti-
aircraft missile defense system. Early testing showed that under certain
situations the guidance control could malfunction, resulting in unstable
missile flight over friendly airspace. The guidance control system was
modified to maintain controlled flight in that particular situation.
Although the system now passes all tests, you believe the earlier failures
may point to a deeper problem with the guidance system, that given the
right test conditions could again lead to loss of missile flight control. How-
ever, you cannot be sure of this; all you know is that the system was rede-
signed to successfully pass the limited number of flight scenarios proposed
at the project outset. When you present your concerns to the company
management, they assure you that all tests show that the missile is safe
and that further testing would not only be unnecessary but would lead to
extremely costly penalties for failing to produce the device on the contract
deadline, and may jeopardize the division’s (and therefore your job’s) exis-
tence. They hint that if you fail to approve the system, you may be replaced
with a coworker who would be more willing to approve the project.

You feel torn between your duties to your coworkers, your employer, your
family, and the military personnel who will be relying on this technology.
You do not know if your concerns are valid without months of additional
simulations. What do you do? 

262 Programming for Electrical Engineers


INDEX

A C
abs 51 C xii
acos 17 C# xiii
acosd 18 C++ xiii
AC sweep analysis  238, 251 calculator  3, 62
addition ceil 69
matrix 64 charge  5, 11
scalars 3 Circuits course  37, 92
vector 53 clear 136
all 152 colon 40
alpha 113 color code  163
AND gate  150, 200 comments 141
angle 51 Communications course  205
any 152 compander 205
arguments 136 complex exponential  50, 52
asin 17 complex numbers  49
asind 18 conditional branching  154
astable multivibrator  245 cos 17
atan 17 cosd 18
atand 18 current  5, 11
AutoCAD xiv
AWG 160 D
axis 87 DC operating point analysis 
axis limits  86 237, 238
B dec2bin 201
delta 113
bar plot  104 design 228
beta 113 digital logic  150
bin2dec 201 disp 178
binary math  200 division
bit 30 matrix 64
Bode plot  90, 145 scalars 3
Boolean math  200 vector 53
break 195 DMM  19, 42
byte 30 buying 48

263
doc 24 I
doctoral degree  147
i  14, 49
E IEEE 7
Code of Ethics  118
EE careers  26 if 154
else 156 imag 51
elseif 157 imaginary. See imag
embedded m-files  196 implied multiplication  10
end  45, 154 indexing  45, 60
energy 242 industry 165
engineering notation  162 Inventor xiv
eta 113 isequal 149
ethics  118, 243
Euler 49 J
exp  16, 53
exponentials 16 j  14, 49
Java xiii
F JavaScript xiii
FE. See Fundamentals of Engineering K
fellowship 148
floor 38 kilo 162
flowchart 154 L
for 178
format  14, 114 lambda 113
Fourier series  224 legend 96
fprintf 159 length 44
function 131 license 99
Fundamentals of Engineering  202 lifelong learning  257
line plot  81
G linspace 40
gamma 113 load 25
gca 110 log 16
gcf 110 log10, 16
get 110 logarithmic axis  89
Giga 162 logarithms 16
graduate school  147, 165 logical expression  149
Greek symbols  113 logical math  200
grid 88 logical operator  150, 151
ground 230 loglog  89, 119
logspace 40
H low pass filter  92, 144, 250
LTspice 228
handle graphics  109
help  23, 142 M
histogram 185
history 25 magnitude 51
hold 102 masters degree  147

264
MathCAD xiv oscillator 245
MATLAB xii oscilloscope 88
command window  2
P
directory control  2, 129
layout control  2 P.E. See Professional Engineer
tab control  2 parentheses 10
workspace window  9 phi 113
matrix 57 pi  14, 113
build from vectors  59 calculate 224
dimensions 57 pico 162
explicitly define  58 plot 81
fill with duplicate values  58 labels 85
indexing 60 line colors  82
removing elements  61 line styles  83
size 63 line widths  83
transpose 63 titles 85
Mega 162 plot editor  108
memory pre-allocation  198 polar 50
mesh analysis  65 post-graduation careers  147
meshgrid 115 power  16, 242
micro  113, 162 pre-allocation 198
milli 162 prime search  195
Monte Carlo  184 Professional Engineer  99
mu 113 program comments  141
multiple line plots  94 Pythagorean triples  189
multiplication Python xiii
implied 10
matrix 64 R
scalars 3 rand  20, 41, 59
vector 53 random. See rand
Multisim xiv real 51
N rectangular 50
reference designator  232
nano 162 relational expression  149
nested loops  187 resistance  11, 42
nets 255 resistor  12, 43, 235
nodal analysis  65 color code  163
NOT gate  150, 200 in series and parallel  56
NSPE Code of Ethics  244 standard values  43
O round 38
S
Ohm’s Law  13
omega 113 save 24
ones  39, 58 scatter plot  97
operational amplifier  236, 249 schematic capture  232
OrCAD 228 schematic editor  232
OR gate  150, 200 scientific notation  15

265
script  100, 129 title 85
semicolon 21 toc 193
semilogx  89, 119 transfer function  92
semilogy  89, 119 transpose 63
set 111 trigonometric functions  17, 53
shading 116
V
shortcuts 25
sigma 113 validation 228
Signals and Systems course  37, 120 variables 7
simultaneous equations  66 vector 38
sin 17 define explicitly  39
sinc 155 end 45
sind 18 fill with duplicate values  39
size 63 fill with exponentially-spaced values  40
Solidworks xiv fill with linearly-spaced values  40
sort 146 fill with random values  41
Spice xii  227 indexing 45
sprintf 158 inserting elements  47
sqrt  16, 53 length 44
str2num 55 logspace 40
strings  54, 158 removing elements  46
subplot 106 Verilog xiv
subscripts 114 VHDL xiii
subtraction voltage 11
matrix 64 voltage divider  67
scalars 3
vector 53 W
superscripts 114 while loop  197
surf 116 wire sizing  160
T work 242

tan 17 X
tand 18 xi 113
tau 113 xlabel 85
Tera 162
text 112 Y
text on plots  112
theta 113 ylabel 85
three-dimensional plots  115 Z
tic 193
timing 193 zeros  39, 58

266

You might also like