Top Banner
1 MatLab Help Notes MatLab is a powerful computer language for specialized calculations in engineering and other technical areas. MatLab is similar in structure to other programming languages and is most closely related in syntax to the c language. Its great strength is that it is easily extended so that a user can purchase or create library functions to tailor the language to a particular discipline. MatLab is available in two forms. The student edition (currently V 6.5, Release 13) comes with the Symbolic Math Toolbox and Simulink. (Toolbox is MatLab's name for library). The professional edition is available on the computer network in the labs and it includes the professional edition of the signal processing toolbox, the controls toolbox, and the symbolic math processor. The student version cost about $100 dollars but it is not a stripped down version. It can do everything the professional version can do. What's missing from the student version is the wide array of toolboxes. Additional toolboxes can be purchased for about $30 dollars each and include such things as the Signal Processing Toolbox and the Controls Toolbox which are useful in such courses as EE 310, 311, and 360. MatLab opens with a screen similar to that shown in Figure 1 below. The three windows are called the Launch Pad, Command History, and the Command Window. Figure 1 MatLab's command window and opening screen. The Launch Pad provides access to certain tools and documentation. The Command History window has a complete history of all of the commands that are typed into the command window including a date and time stamp (in green). You can page back through the history and copy commands or double click on any command in the history window to run it again. The Command Window is the main operating window. You use it by typing in commands which Matlab executes when you push Enter.
45

MatLab Help Notes - CSSERVER

Sep 12, 2021

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: MatLab Help Notes - CSSERVER

1

MatLab Help Notes

MatLab is a powerful computer language for specialized calculations in engineering and

other technical areas. MatLab is similar in structure to other programming languages and

is most closely related in syntax to the c language. Its great strength is that it is easily

extended so that a user can purchase or create library functions to tailor the language to a

particular discipline. MatLab is available in two forms. The student edition (currently V

6.5, Release 13) comes with the Symbolic Math Toolbox and Simulink. (Toolbox is

MatLab's name for library). The professional edition is available on the computer

network in the labs and it includes the professional edition of the signal processing

toolbox, the controls toolbox, and the symbolic math processor. The student version cost

about $100 dollars but it is not a stripped down version. It can do everything the

professional version can do. What's missing from the student version is the wide array of

toolboxes. Additional toolboxes can be purchased for about $30 dollars each and include

such things as the Signal Processing Toolbox and the Controls Toolbox which are useful

in such courses as EE 310, 311, and 360.

MatLab opens with a screen similar to that shown in Figure 1 below. The three windows

are called the Launch Pad, Command History, and the Command Window.

Figure 1

MatLab's command window and opening screen.

The Launch Pad provides access to certain tools and documentation. The Command

History window has a complete history of all of the commands that are typed into the

command window including a date and time stamp (in green). You can page back

through the history and copy commands or double click on any command in the history

window to run it again. The Command Window is the main operating window. You use

it by typing in commands which Matlab executes when you push Enter.

Page 2: MatLab Help Notes - CSSERVER

2

The command window is very much like a sophisticated calculator. You may enter

equations and assign values to variables. These are remembered as you proceed down the

sheet. All commands terminate with either a semicolon or the enter key. If you omit the

semicolon, MatLab automatically prints the result of that command to the screen. Thus,

entering 5 + 6; does nothing. But entering 5 + 6 produces the answer 11.

But Matlab is much more than a calculator. It also provides a sophisticated programming

language that lets you enter, edit, and run full programs. These are done in m-files. An

m-file is just a text file that contains a list of instructions similar to what you might type

into the command window. The instructions can have loops, if statements, and functions

and the syntax is very similar to that of a programmable calculator.

For simple calculator-like use you can open Matlab and type in the equations. For

example, if I want to find the arc tangent of 0.5 in degrees, I would enter the following: >> atan(.5)*180/pi

ans =

26.5651

Since all angles are in radians, I multiply by 180o per Pi radians to convert to degrees.

Matlab provides an answer to four decimal places. To get more accuracy in my result I

change the format with a format statement like this: >> format long

>> atan(.5)*180/pi

ans =

26.56505117707799

To write a program as an m-file, I first need to tell Matlab where to store the program. If

you don't do this Matlab stores the program in a default directory. You can change your

default directory in several ways. The quickest way is to just enter the new path as a

change directory command in the command window as you would if you were using

DOS. For example, >> cd c:\courses\ee210

changes the default directory to ee210 under courses on my c: drive. (Other DOS

commands work in the command window as well.) If you don't remember DOS

commands, you can change the current directory with a mouse by clicking on the Browse

button on the current directory list at the top center of the screen. You can also change

the directory by selecting the current directory tab in the Command History window and

browse for a directory there.

After you have a directory established you can create a new m-file by selecting

FileNewM-File from the file menu. Matlab then opens an editor and you are ready

to enter your program. The editor window looks like that shown in Figure 2.

Page 3: MatLab Help Notes - CSSERVER

3

Figure 2

The editor window. To open the editor select FileNewM-File from the file menu.

Note that we have not yet named our M-File or saved it. For a simple example enter the

following five lines into your open edit window. %Test.m

x = 3;

y = 92;

z = x^4 - y^2 + 12;

disp(z);

The first line begins with a % sign so it is a comment and is otherwise ignored by the

program. The next three lines create three new variables and assign them values. The

last line displays the value of z. Note that we could have displayed the value of z simply

by omitting the semicolon at the end of the equation for z.

Save your m-file as Test.m and return to the Command Window by selecting it at the

bottom of the screen. In the command window type test to get the result shown below. >> test

-8371

Page 4: MatLab Help Notes - CSSERVER

4

Since Test is the name of an m-file in your directory it becomes the name of a command

which can be executed from the command window. Typing the word test causes Matlab

to execute the commands saved in the m-file.

Learning Matlab is a matter of learning the syntax of the language. The language itself is

all command line driven but with a few hours of practice on some examples you can

become relatively proficient. What follows is a list of the more common commands and

some examples of how they might be used in a circuits class.

Getting Help Matlab's help can be frustrating until you learn a few basic commands. But Matlab

provides detailed help on every function and in many cases provides an example of how

the function is used. For example, if I want to know how the roots function is used I enter

the following: >> help roots

Matlab produces the following lines. ROOTS Find polynomial roots.

ROOTS(C) computes the roots of the polynomial whose coefficients

are the elements of the vector C. If C has N+1 components,

the polynomial is C(1)*X^N + ... + C(N)*X + C(N+1).

See also POLY, RESIDUE, FZERO.

The difficulty is that many times you think there ought to be a function but you don't

know its name so you don't know what to ask for help about. When this happens enter

helpwin. The helpwin command provides a hypertext linked help document that allows

you to see all of the functions by category. Enter helpwin into the command window to

get the screen shown in Figure 3.

Figure 3

Enter helpwin to get this screen. Click on any topic in blue for additional information on

that topic. For example click on Elfun to get a list of all of Matlab's elementary math

functions.

Page 5: MatLab Help Notes - CSSERVER

5

One other command is useful when you need help. That's the lookfor command. This

command searches through all of the m-files and functions looking for a keyword. For

example lookfor roots produces the following display.

>> lookfor roots

POLY Convert roots to polynomial.

ROOTS Find polynomial roots.

GFROOTS Find roots of a polynomial over a prime Galois field.

RLOCFIND Find root locus gains for a given set of roots.

MROOTS Polynomial roots with multiplicity estimate

vroots.m: % function out = vroots(mat)

FILTCON Returns roots for DFILDEMO.

FILTFUN Returns frequency response and roots for DFILDEMO.

FILTFUN2 Return frequency response norm and roots for DFILDEMO.

POLYSCALE Scale roots of polynomial.

RLOCFIND Find root locus gains for a given set of roots.

RLOCFIND Find root locus gains for a given set of roots.

You can then follow this up with a help on one of the listed commands for more detailed

help. The lookfor command is somewhat of a last resort since it searches all of the m-

files and takes several minutes (or longer) to complete. You can cancel it in mid-flight by

entering Control-C.

Editing and Screen Ops: Here is a list of the more common editing and screen operators and a brief description

of what they do.

quit - exits MatLab. You can also exit from the file menu. exit works as well.

variable names - Variables start with a letter and may be up to 19 characters long.

After the first letter you can use letters, numbers, and underscore. MatLab is

CASE sensitive - nt is a different variable than nT. Note that m-file names are

NOT case sensitive so Test is the same as test.

clear - clear by itself clears ALL variables (without asking). clear x clears only the

value of x.

comments - All text after a % sign is a comment.

; - A semicolon at the end of a line suppresses printing of the results of that line. If

you forget the semicolon your screen rapidly fills up with results you don‟t want.

Multiple commands can be placed on one line if they are separated by a

semicolon.

: - A colon is used to create arrays, address a matrix, or specify iterations. Here are

some examples:

j:k is the same as [j, j+1, ..., k]

j:i:k is the same as [j, j+i, ..., k]

A(:,j) is the jth column of A (read this as all rows in column j)

A(i,:) is the ith row of A (read this as all columns of row i)

A(j:k) is A(j), A(j+1), ... , A(k)

... - Exactly three dots at the end of a line allows you to continue on the next line.

Page 6: MatLab Help Notes - CSSERVER

6

who - This command produces a list of variable names that you have used in the

current session. Type the name of the variable to get its value. You can also type

whos to get the variables listed in a long form with more information.

editing -Use the cursor keys (, , , and ) for editing. Push once to see the

previous command or gets the next command (if there was one). Once you have

a command listed you can edit it using and plus the backspace and delete

key. Push enter to re-evaluate the command. You can likewise use the mouse to

scroll backward through the window to view commands that have rolled off the

screen.

save filename - This command saves the current workspace. You should normally

use the .mat extension as in Myfile.mat.

load filename - This command loads a file saved with the save command to restore a

previously saved workspace.

what - Produces a listing of m files, mat files, and mex files in the current directory.

lookfor- searches through help files for a keyword. This is more useful than help

topic since you don‟t have to know the topic name that MatLab uses. The syntax

is: lookfor keyword

For example, lookfor filter, produces 21 entries from which you can ask for syntax

help.

format - using the format command sets the format of the numbers and results

MatLab displays. (The internal representation remains unchanged). The

following are the most useful format commands:

format compact Reduces line spacing in the command window format long 16 digits format short 6 digits (the default) format short e 6 digits with exponent format hex hexadecimal

M Files The real power of MatLab comes from the ability to create programs which can be

saved and executed from the command window. MatLab programs are called m-files.

To write an m-file you should first change MatLab's directory to the disk location

where you want to store the m-file. Use the cd command to change the directory from

the command window. If you want to know what directory you are in use the pwd

command.

M files are also referred to as “script files”. An m-file is a text file that contains

statements executable by MatLab. M-files are stored on your computers disk and

have a name of the form “filename.m”. They are executed in MatLab by typing the

filename (without the extension) at the MatLab prompt in the command window.

Execution of an m-file produces the same results as if you had typed the information

in one line at a time. M-files represent a very powerful way to extend the MatLab

command language.

Page 7: MatLab Help Notes - CSSERVER

7

M File Manipulation:

dir - This is the same as the DOS command for directory. ls works as well.

cd - This is the same as the DOS command for change directory.

type filename - looks for the file called filename.m in the current directory and

displays it in the command window.

delete filename - deletes filename.m in the current directory.

pwd - same as the UNIX command for print working directory. Typing cd alone

(without a path) produces the same result in MatLab.

which filename - displays the path to filename.m

Creating M Files:

You can create an m-file using any word processor or editor that will create a text

(ascii) file with a .m extension. In DOS it is convenient to use EDIT but a full

word processor offers more text manipulation options. MatLab has it‟s own built

in editor which you can invoke from the file menu in the command window.

From the File menu in the command window select new m-file. You will see the

following screen shown in Figure 2. This is MatLab's m-file editor.

Here is an example of an m-file named Sineplot which produces a plot of sin(x)

and cos(x) using the plot function. Because MatLab is somewhat arcane in its

syntax, m-files should be fully commented.

% TITLE: Sineplot.m

%

% This m file creates a plot of sin(x) and cos(x) using

% the plot function.

%

x = (-4*pi:pi/100:4*pi); % x goes from -4Pi to 4Pi

y1 = sin(x); % y1 is the sin(x)

y2 = cos(x); % y2 is the cos(x)

figure(1); % Select figure 1

clf; % Clear the figure

plot(x,y1,'blue'); % Plot sin(x) in blue

hold on; % keep it from being erased

plot(x,y2,'red'); % Plot cos(x) in red

Figure 4 An example MatLab m-file which creates a plot of sin(x) and cos(x) for x going

from -4 to +4

You may type in the program in Figure 4 using MatLab's editor. Save the file

under the name sineplot.m. Return to the command window and run the

program by typing sineplot. If all goes well you should get the results shown

in Figure 5 below.

Page 8: MatLab Help Notes - CSSERVER

8

Figure 5 The results of running the program called sineplot shown in Figure 4.

Matrix (Array) Ops and Definition Array - MatLab commonly uses the word Array to mean a one dimensional matrix.

When an array has more than one dimension it is referred to as a matrix.

Addressing an array -

x(3) is the third element of x.

x(1:3) is elements 1, 2, and 3 of array x.

x(1:2:4) is elements 1 and 3. In this notation 1 is the starting value, 2 is the step

size, and 4 is the last value - x(Start:Step:End).

Creating an array - MatLab does not contain a dimension statement or any other

explicit way to declare a variable and its size. Variables are dimensioned as

needed. This sometimes causes problems when a matrix used in one part of a

program needs to be made larger in a second part. You can get around this by

creating and sizing a vector at the outset by using the zeros command.

zeros - This command produces zeros an assigns them to a variable or an array.

The syntax is x = zeros(size);

where size is the dimensions of x. For example x = zeros(3,5); creates x

as having 3 rows and 5 columns and initializes them to zero.

ones - This command is the same as the zeros command except that it produces

arrays of ones.

Array Creation Examples

Create an array, x, with four elements. Note the use of the square bracket [ ]. x = [1 2 3 4];

x is a 1 x 4 row matrix. To create a column matrix write:

Page 9: MatLab Help Notes - CSSERVER

9

x = [1;2;3;4]; or x = (1;2;3;4);

or, use the transpose operator (see below).

Create a second array, y, where each element is the square root of the elements

in x array. y = sqrt(x);

Create a third array, z, where each element is 2 times the element in x. z = 2*x;

Create an array using colon notation. In this example x is an array having

elements 0, 2, 4, 6, 8, and 10. The format is x(Start, Step, End). If

you leave out the step value, it defaults to 1. x = [0:2:10];

Create an array by combining two other arrays. In this example A has three

elements and B has 4 elements. A new array, C, is made by combining A

and B. In combining two arrays you use [ ]. A = (1:3); B = (4:7);

C = [A B];

C will consist of elements 1 2 3 4 5 6 7

Create an array using the linspace or logspace commands. These operators

creates a linear or log space between two specified end points. The syntax

is: x = linspace(start, last, number);

x = logspace(start, last, number);

Matrix Arithmetic

Addition, subtraction, multiplication, and division are defined in two ways for

arrays and matrices. The operators normally used (+, -, *, and /) are defined as

they usually are for matrices (division of two matrices is defined as

multiplication by the inverse). The operators of multiplication and division

are also defined using the dot notation (.*, and ./) to mean that the operations

are to be performed on an element by element basis.

Operations between a scalar and an array are done to every element in the array.

For example C = A - 2; will subtract 2 from every element in A and make

the new matrix C.

Transpose - use the .' operator. For example if B is a row matrix (say 1 x 5) then

writing C = B.' would make C a column matrix (5 x 1). The dot apostrophe

is necessary for a transpose. Using the apostrophe alone does a complex

conjugate transpose.

Solving Simultaneous Equations MatLab makes solving simultaneous linear equations very easy since it is very good at

manipulating matrix equations. Consider the set of equations given below.

1254

1362

733

32

31

321

xx

xx

xxx

In these three equations, x1, x2, and x3 are unknown. We can rewrite these equations

in matrix form as bxA

Page 10: MatLab Help Notes - CSSERVER

10

where the three matrices A, x, and b are given by

540

602

331

A

12

13

7

b

3

2

1

x

x

x

x

Since Matrix division is not defined we solve the matrix equation for x as

bAx 1

where the term 1A is defined as the matrix inverse of A.

Thus, to solve these three equations, we need only find the inverse of the A matrix

and multiply it times the b matrix. In MatLab we write the following three lines. A = [1,3,3;2,0,-6;0,4,5];

b = [7;-13;12];

x = A^(-1)*b

Leaving the semicolon off of the last line causes MatLab to print the value of x as x =

-0.5000

0.5000

2.0000

Output and Input Printed output:

To print the value of any variable in the workspace. simply type the variable name

followed by the enter key. You can use format compact to get a neater

display. The result of any equation in the workspace or in an m-file will be

printed to the screen if you leave off the semicolon at the end of the line.

disp – display. This is the same as leaving the semicolon off of an expression. It

allows a little more clarity in programs.

fprintf - prints formatted data to a file or to the screen. The syntax is fprintf(fid, 'format string', arg1, arg2, ... );

The format string contains conversion characters that determine how the output is

printed. Each conversion character must be preceded by a percent sign (%).

Adding a \n to the format string produces a new line. The common conversion

characters are: c single character d signed integer e floating point with an exponent f floating point without an exponent g general format. Uses e or f as needed. i signed integer o octal integer s string u unsigned integer x hexadecimal integer

Page 11: MatLab Help Notes - CSSERVER

11

The term fid is a file identifier. If fid = 1 the output is sent to the screen.

This is similar to the command for formatted output in C (printf). Here are

few examples. i = 13; j = -45; r = 39.567; s = 5.4136789;

Print Command fprintf(...) Printed output (1, '%6.3f\n', r, s); 39.567

5.414

(1, 'r =%2.8f s = %3.4f\n', r, s); r =39.56700000 s = 5.4137

(1, 'r = %g s = %g\n', r, s); r = 39.567 s = 5.41368

(1, 'i = %i j = %i\n', i, j); i = 13 j = -45

(1, 'i = %5i j = %5i\n', i, j); i = 13 j = -45

(1, 'i = %x\n', i); i = d

(1, 'Hello Mom!\n'); Hello Mom!

File Output:

Sending data to a file is the same as sending it to the monitor except that the fid

is changed to match the file instead of the screen. If fid = 1 the fprintf

command sends data to the screen. To find the fid for a file use fid = fopen('filename');

save - The save command saves the workspace variables to a file. If no variables

and no file name is specified in the command the entire workspace is saved to

a default file named matlab.mat. All data is saved in a binary format. You

can use a -ascii option to save data in an ascii format. Here is an example. save 'c:\dsp97\myfile.txt' r s -ascii -double

This command saves the variables r and s in double precision ascii format in a

file called myfile.txt The variables can be restored with the load command.

Keyboard Input:

input - allows input from the keyboard. You can enter a single value or a matrix

of values which are assigned to a single variable. All variables come in as

numeric data unless a string argument is given in which case the data comes in

as a string. For example x = input('Enter a value for x ');

will produce a prompt for x. You may then enter a single number or a vector

such as [2 3 4 5] which will be assigned to x.

To get x in as a string of characters write input like this. x = input('Do you like jello? ', 's');

In this case the user would type a response such as yes or no and x would

become a string corresponding to the answer.

ginput - allows input from the mouse or trackball. The format is [x y]=ginput(n);

The vector [x y] is returned as the coordinates of the point where the mouse

was clicked. The variable n is the number of points that will be accepted.

Thus [x y] = ginput(1); returns a single point.

Page 12: MatLab Help Notes - CSSERVER

12

File Input:

fread - reads binary data from a file. The format is D = fread(fid);

In this case D is a matrix where the data from the file is stored. The file is the

file which has the file identifier given by fid. To find the fid for a specific file

use fid = fopen('myfile.mat'); where myfile.mat is the file name of a

file holding binary data (possibly created using the save command.

load - the load command is the counterpart to the save command. If the load

command is used alone it loads all of the variables in the file called

matlab.mat into the current workspace. You can also use load filename.ext.

For example, if myfile.txt has data previously saved by the save command

you would type load 'myfile.txt';

Graphs:

plot - creates a 2-D graph. The normal syntax for this command is plot(x,y);

where x and y may be matrices or functions. If x and y are both matrices then

it takes corresponding elements as the ordered pairs to make the plot. for

example: x = (0: pi/100: 4*pi);

y = sin(x);

plot (x,y);

produces a plot of sin(x) for x going from 0 to 4 in increments of /100.

If you use plot(x) alone you get a plot of the values of x versus the array

element number. If x is complex it plots the real part against the imaginary

part. Plot has a number of options to modify the color and line style. See

"Plot Options".

semilogx, semilogy, and loglog - These are the same as the plot command with

the same syntax. They produce log (base 10) plots on either the x, y, or both

axes.

stem - creates a stem plot. This is supposed to be a plot of discrete data with the

options of the plot function (above). The syntax is: stem(x,y);

where x and y are matrix functions. A stem plot is a sequence of lines from

the y value to the x axis. The color and line style are the same for stem as they

are for plot (see "Plot Options"). You can get multiple plots on the same axis

by using the hold function (see hold on). If there are too many points, the

graph has an awkward appearance. You can create your own stem plot using

the line function. An example of a stem plot using the line command is

given under the discussion on m files.

freqs - plots a transfer function in the S domain. The syntax is

Page 13: MatLab Help Notes - CSSERVER

13

freqs(num,den);

or h = freqs(num,den, w);

where num and den are the numerator and denominator vectors for a transfer

function in s. For example, if the transfer function is given by

H ss s

s s s( )

.

.

4 2 5

5 3 5 1

2

3 2

we could obtain a plot of the magnitude versus frequency using the following

commands: num =[4 2 .5]; den = [.5 3 5 1];

f = linspace(0, 1000);

w = w*pi*f; % w is in radians.

H = freqs(num, den, w); % H is a complex frequency vector.

plot(f, abs(H), 'k');

axis([0 1000 0 1.5]);

impulse - This function is in the control systems toolbox and finds the impulse

response for either a discrete time system or a continuous time system. The

syntax is: sys = tf(num, den, T);

impulse(sys, Ti:T:Tf);

or, sys = tf(num, den, T);

[h nT] = impulse(sys, Ti:T:Tf);

where num and den are the numerator and denominator polynomials in z, T is

the sample time in seconds, Ti is the starting time for the plot, Tf is the ending

time for the plot, h is the impulse response vector, and nT is the time vector.

The tf() function creates a system vector from num, den, and T. Since a

sample period is specified, the system created is discrete. If this function is

omitted, the impulse function assumes the system is in the s domain.

step - This function is in the control systems toolbox and finds the step response

for either a discrete time system or a continuous time system. (This function

replaces the function dstep which is no longer supported.) The syntax is: sys = tf(num, den, T);

step(sys, Ti:T:Tf);

or, sys = tf(num, den, Ti:T:Tf);

[s nT] = step(sys, T);

where num and den are the numerator and denominator polynomials in z, T is

the sample time in seconds, Ti is the starting time for the plot, Tf is the ending

time for the plot, s is the step response vector, and nT is the time vector. The

tf() function creates a system vector from num, den, and T. Since a sample

period is specified, the system created is discrete. If this function is omitted,

the step function assumes the system is in the s domain.

Multiple plots - To get more than one plot on an axis you can string vectors

together inside the plot argument. For example x = (0 : pi/100 : 4*pi);

Page 14: MatLab Help Notes - CSSERVER

14

plot(x, sin(x), x, cos(x));

produces a plot of x vs sin(x) and x vs cos(x) in two different colors for x

from 0 to 4 in steps of /100.

hold - holds the current plot so that the next plot function is plotted without

erasing the first plot. You can use hold alone to toggle the hold function

or you can use hold on or hold off.

Plot Options -

color and form - You can get various line types and colors by adding a string

option to the plot arguments. The syntax is plot (x, y, S);

where S is a string (1, 2, or 3 characters long) created with single quotes as

in Basic. Here is a table of the options.

Color Form b –blue . point

c – cyan o circle

g - green x

k - black +

m - magenta - solid

r – red *

w- white : dotted

y - yellow -. dash dot

_ dash

For example plot(x, sin(x), ‘k.’);

produces a plot of x vs sin(x) in black made out of dots. You may also

spell out the color name for clarity, e.g. 'black' or 'blue'.

whitebg - this function changes the figure background color (not

necessarily to white. The syntax is:

whitebg; - the name alone toggles the background color between

white and black.

whitebg(c) - sets the background to a specific color where c is a letter

form the table above as a string. For example to get a blue background

you would type: whitebg('b');

grid - adds grid lines to an existing plot. If they are already on the plot

then grid toggles them off.

axis - This command lets you scale the x and y axis after the plot has been

completed. The syntax is: axis([Xmin Xmax Ymin Ymax]);

Page 15: MatLab Help Notes - CSSERVER

15

Notice the confusing requirement for both parentheses and brackets in

this command.

title - adds a title to the existing graph. The format is: title('THIS IS A TITLE');

The title gets printed centered at the top of your graph.

xlabel and ylabel - add labels to the x and y axis. The format is similar to

title.

text - allows the user to add text information to a figure at a specified

coordinate. The syntax is: text(x, y, ‘text’);

where (x, y) is the lower left corner of the text block and „text‟ is the

text added.

clf - clears the current figure.

print - sends the current figure to the default printer. This command has

numerous options that allow you to change the printer or print to the

Windows clipboard. See orient to change the paper orientation.

orient - allows you to change the orientation of the paper from portrait to

landscape for printed output. The syntax is: orient portrait;

or orient landscape;

orient by itself returns the current orientation.

subplot (m, n, p) - divides the figure into m rows and n columns for

subplots. p is the number of the subplot that is current. For example, subplot(2,2,1)

creates two rows and two columns for four subplots. It makes the top

left current. The following creates two graphs with y = sin(x) on the

top half and z = cos(x) on the bottom half.

clear

subplot(2,1,1); % 2 rows - 1 column

x=(0:pi/100:4*pi); % x goes from 0 to 4 in steps of

/100 y=sin(x);

plot(x,y); % plots sin(x) in top subplot

subplot(2,1,2); % makes the bottom subplot current

z=cos(2*x);

plot(x,z); % plots cos(2x) in the bottom subplot

Page 16: MatLab Help Notes - CSSERVER

16

Special Functions: fourier - operates on symbolic data and completes the Fourier transform which is

defined as:

F f t dtj te( ) ( )

The syntax for the Fourier transform is: y = 'exp(-t)*sin(t)' %y must be given as a symbolic function.

F = fourier(y); %assumes that y is a function of t and makes F

% a function of w.

or, F = fourier(y, ‘v’, ‘x’) % Takes y to be a function of x instead

% of t and makes F a function of v

% instead of w.

You can also use the int function to directly evaluate the symbolic form of the

Fourier integral.

invfourier - operates on symbolic data to complete the inverse Fourier transform

which is defined as:

f t F dj te( ) ( )

1

2

The syntax for the inverse Fourier transform is: F = '1/(j*w + 2)'; % F must be in symbolic form.

f = invfourier(F) % assumes F is a function of w and makes f a

% a function of t.

or, f = invfourier(F, ‘x’, ‘v’) % Takes F to be a function of v and

% makes f a function of x.

laplace- operates on symbolic data and completes the LaPlace transform which is

defined as:

F s f t dtste( ) ( )

0

Page 17: MatLab Help Notes - CSSERVER

17

The syntax for the LaPlace transform is: y = 'exp(-t)*sin(t)' %y must be given as a symbolic function.

F = laplace(y); %assumes that y is a function of t and makes F

% a function of s.

or, F = laplace(y, ‘v’, ‘x’) % Takes y to be a function of x instead

% of t and makes F a function of v

% instead of s.

You can also use the int function to directly evaluate the symbolic form of the

LaPlace integral.

invlaplace - operates on symbolic data to complete the inverse LaPlace transform

which is defined as:

f tj

F s dsst

c j

c j

e( ) ( )

1

2

The syntax for the inverse LaPlace transform is: F = '2/(s^2+4)'; % F must be in symbolic form.

f = invlaplace(F) % assumes F is a function of s and makes f a

% a function of t.

or, f = invlaplace(F, ‘x’, ‘v’) % Takes F to be a function of v and

% makes f a function of x.

fft - Completes the discrete Fourier transform (DFT) on numeric data. The DFT is

defined as:

F k f nj

kn

N

n

N

e( ) ( )

2

0

1

The syntax for the FFT is: x = [1 1 1 1 0 0 0 0];

F = fft(x)

or, F = fft(x, N) %In this case an N point DFT is done. If x has

% fewer than N elements it is padded with zeros.

% If it has less than N elements it is truncated to

% N elements.

Note that if x has N elements where N is a power of 2 the fft computes the DFT

using the algorithm for the fast Fourier transform. If N is not a power of 2 then a

slower non-power-of-two algorithm is used.

ifft -- Completes the inverse discrete Fourier transform (IDFT) on numeric data. The

IDFT is defined as:

F kN

f nj

kn

N

k

N

e( ) ( )

1 2

0

1

The syntax for the IFFT is: F = [1 1 1 1 0 0 0 0];

x = ifft(F);

or, x = ifft(F, N) %In this case an N point DFT is done. If x has

% fewer than N elements it is padded with zeros.

Page 18: MatLab Help Notes - CSSERVER

18

%If it has less than N elements it is truncated to

% N elements.

Note that if F has N elements where N is a power of 2 the ifft computes the IDFT

using the algorithm for the inverse fast Fourier transform. If N is not a power of 2

then a slower non-power-of-two algorithm is used.

int - completes a definite or indefinite integral on symbolic data. The syntax for the

integrate function is:

a = int(s) % symbolic indefinite integral of s with respect to

% its symbolic variable.

or, a = int(s, ‘v’) % symbolic indefinite integral of s with respect

% to v.

or, a = int(s, b, c) % definite integral from limits b to c.

or, a = int(s, ‘v’, b, c) % definite integral from b to c with

%respect to variable v.

diff - this function calculates either the derivative (if the argument is symbolic) or

it calculates successive differences (if the argument is a numeric array).

For differentiation of a symbolic argument there are four forms: diff(s); %symbolic derivative with respect to x.

or

diff(s, ‘v’); % symbolic derivative with respect to v.

or

diff(s, 2); % second derivative

or

diff(s, ‘v’, 2); % second derivative with respect to v.

In all of the above forms s MUST be symbolic.

If the argument is an array then diff calculates the difference between

successive elements of the array. For example:

x = [1 2 4 7];

a = diff(x);

produces a = [1 2 3]

conv - performs the convolution summation on two arguments which are arrays.

For example if a, b, and c are arrays then: c = conv(a, b);

evaluates c according to c k a j b k jj

N

( ) ( ) ( )

11

This is numerically equivalent to multiplying two polynomials whose

coefficients are in a and b.

Page 19: MatLab Help Notes - CSSERVER

19

deconv - this is the deconvolution operation which deconvolves the vector b out of

vector a. The syntax is: [Q R] = deconv(a, b);

In this case a = conv(b,Q) and R is a remainder. This is numerically equivalent

to division if a and b are vectors of polynomial coefficients.

rand - This function produces a set of uniformly distributed random numbers over

the interval 0 to 1. There are numerous options. The most useful are:

rand; - produces a single number on the interval 0 to 1

rand(m,n); - produces a m x n array of numbers.

rand(‘seed’,n); - sets the seed for the random number generator to n.

randn - This function is the same as rand except that the numbers generated

follow a normal distribution.

residue - This function finds the residues, poles, and the direct term for a partial

fraction expansion. The syntax is: [r p k] = residue(num, den);

or, [num den] = residue(r,p,k);

where r is a vector of the residues, p is a pole vector, and k contains the direct

term. Thus, for an nth order polynomial in s that has no repeated roots, we can

write

Note that r and p are column vectors and k is a row vector.

In the case where the polynomial has a repeated root, p(j) the expansion into

partial fractions contains a term of the following form:

where m is the number of times the root is repeated.

The syntax [num den] = residue(r,p,k); reverses the residue operation to

reform polynomials.

roots - This function finds the roots of a polynomial. The syntax is: r = roots(p);

where p is an array containing the coefficients of the polynomial in

descending order. For example, the polynomial k x k x k x k1

3

2

2

3 4 0

could be represented as p = [k1 k2 k3 k4]. In this case, since p is a row

vector r will be a column vector. If p is a column vector, r will be a row

vector.

Programming like functions:

)()(

)(

)2(

)2(

)1(

)1(

)(

)(sk

nps

nr

ps

r

ps

r

sden

snum

mjps

mjr

jps

jr

jps

jr

))((

)1(

))((

)1(

)(

)(2

Page 20: MatLab Help Notes - CSSERVER

20

LOOPS:

FOR - This is similar to the FOR/NEXT loop in Basic except for slight deviations

in the syntax. The general syntax is: for i=start:step:last

loop body

end

If the step value is omitted it is assumed to be 1. For loops may be nested as

needed.

WHILE - The general syntax for the WHILE loop is:

Initialize expression variable while expression

loop body

end

As in Basic the loop body MUST modify the value of the expression variable

or the loop runs forever.

IF Statements:

The IF statement is the same as in Basic except the word “then” is not used and it

is terminated with end instead of endif. There are several forms for the IF.

if expression

statements executed if TRUE

end

if expression

statements executed if TRUE

else

statements executed if FALSE

end

if expr1

statements executed if expr1 TRUE

elseif expr2

statements executed if expr1 is FALSE AND expr2 is TRUE

elseif expr3

statements executed if expr2 is FALSE AND expr3 is TRUE

elseif ...

...

end

Conditional Operations or IF:

The conditional ops for the if statement are: == Equal to < Less than > Greater than

<= Less than or equal >= Greater than or equal ~= Not equal

Page 21: MatLab Help Notes - CSSERVER

21

Note that for those unfamiliar with the conditional operations in C and C++

the logical equals in MatLab (==) is a source of hard to find errors in

programs.

Here is an example of an IF nested inside a FOR. This example creates an

array x(100) where the first 10 values are 1 and the last 90 are 0. for k = 1:100

if k < 11

x(k) = 1;

else

x(k) = 0;

end

end

Page 22: MatLab Help Notes - CSSERVER

22

Example 1 – Nodal Analysis1

Use nodal analysis and Matlab to determine the node voltages in the following circuit.

Figure E1-1

Find the node voltages V1 and V2.

At node 1 we get

24

5 121321

vvvoriii

This equation can be written as 203 21 vv

Similarly at note 2 we get

6

5104

2215142

vvvoriiii

This equation can be written as 6053 21 vv

Thus we have two equations and two unknows. Putting these two in matrix form we can

write

60

20

53

13

2

1

v

v

This matrix equation is in the form of bxA where

53

13A ,

2

1

v

vx , and

60

20b

The solution to this matrix equation is bAx 1

where 1

A designates the inverse A

matrix.

In Matlab, the A matrix would be entered in the following form: A = [3 -1; -3 5];

In Matlab matrices are entered by rows with semicolons to indicate the next row break.

The following m-file produces the answer.

1This example is taken from Fundamentals of Electric Circuits, 2

nd edition by Alexander and Sadiku, p. 80.

Page 23: MatLab Help Notes - CSSERVER

23

%Example1.m

A = [3 -1;-3 5];

b = [20 ; 60];

x = A^-1*b;

disp(x);

Figure E1-2 An m-file named Example1.m which diplays the result for this example.

The m-file is saved as Example1.m. From the command window we run the m-file to get

the following result.

>> example1

13.3333

20.0000

Page 24: MatLab Help Notes - CSSERVER

24

Example 2 – RC Transient Plot Use Matlab to plot the capacitor voltage and current for the circuit shown in Figure E2-1

below.

Figure E2-1

An RC circuit with a step input.

We assume that the capacitor is completely discharged for t < 0. When the switch closes,

the voltage across the capacitor is given by )1(12 )/(RCt

c ev . Likewise, the capacitor

current is given by )/()/12( RCtcc eR

dt

dvCi .

Solution using loops

To create a plot in Matlab we evaluate these two equations in an m-file for a range of

values of time and plot the result. Matlab provides for several plot options and there are

several ways to arrange the program itself. Since you are familiar with the C

programming language the most obvious solution would be to write a simple for loop to

evaluate the equations. Figure E2-2 shows an m-file which does this. %Example2.m

R = 1000; %set the value of R and C as 1k and 1uf

C = 1e-6;

t = 0:.0001:.01; %t is a vector from 0 to .01 in steps of .0001

%Use a loop to evaluate the voltage and current equations

for i=1:length(t);

vc(i) = 12*(1-exp(-t(i)/(R*C)));

ic(i) = 12*exp(-t(i)/(R*C));

end

figure(1);clf; %Assign a figure number and clear figure

plot(t, vc); %plot time vs capacitor voltage

title('Capacitor voltage'); %Create a title for this graph

xlabel('Time'); %label the x axis

ylabel('Volts'); %label the y axis

figure(2);clf; %A second figure for the current

plot(t, ic); %plot time vs capacitor current on fig 2

title('Capacitor current'); %add titles and axis labels.

xlabel('Time');

ylabel('milliamps');

Figure E2-2 An m-file named Example2.m which uses a for loop to evaluate and plot the capacitor

voltage and current against time in two different figures.

Page 25: MatLab Help Notes - CSSERVER

25

Note that the line t = 0:.0001:.01; creates an array named t which has 101 values

ranging from 0 to .0001 in steps of .01. Also note that in Matlab no variables need to be

declared before they are used. Even arrays can be used without declaring them or

assigning them a dimension. On occasion it is necessary to declare an array and give it a

size and you can use the zeros functions to do this, but for the most part, Matlab is able to

figure out the variable type and array size from the context in which the variable is used.

The loop given by for i=1:length(t);

vc(i) = 12*(1-exp(-t(i)/(R*C)));

ic(i) = 12*exp(-t(i)/(R*C));

end

is a standard for loop structure which creates two new arrays called vc and ic. It fills

these arrays with the values of the capacitor voltage and the capacitor current from the

equations which it evaluates.

Since t and vc are both arrays of the same size they can be plotted against one another

with the simple statement plot(t, vc); The program also adds titles and labels to the

plots. The result of the program is two new figures called figure(1) and figure(2) which

are shown below in Figure E2-3.

0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.010

2

4

6

8

10

12Capacitor voltage

Time

Volts

0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.010

2

4

6

8

10

12Capacitor current

Time

milliam

ps

Figure E2-3

The voltage (top) and the current (bottom) for the capacitor in this example. These two

figures were produced by Matlab running the m-file shown in Figure E2-2.

Page 26: MatLab Help Notes - CSSERVER

26

Solution using vectors

For those who are accustomed to other programming languages the looping structure used

in this example is a natural way to create the solution. But Matlab executes loops rather

slowly and it provides a much cleaner way of solving this problem. In Matlab it's

possible to write a single equation that operates on a vector or a matrix instead of having

to put the vector in a loop and operating on its elements piecemeal. Thus in Matlab we

can write t = 0:.0001:.01; %t is a vector from 0 to .01 in steps of .0001

vc = 12*(1-exp(-t/(R*C)));

ic = 12*exp(-t/(R*C));

No loop is necessary. Since t is a vector, Matlab will make vc and ic vectors and evaluate

the equation for each element of t and store the results in vc and ic. Matlab is much more

efficient at evaluating vectors than it is at doing loops. It's not always possible to avoid a

loop and make use of vectors but you should do so when you can. Figure E2-4 shows the

m-file using the vector operations. It produces the same results as before. %Example2.m

R = 1000; %set the value of R and C as 1k and 1uf

C = 1e-6;

t = 0:.0001:.01; %t is a vector from 0 to .01 in steps of .0001

%use vector operations to find vc and ic.

vc = 12*(1-exp(-t/(R*C)));

ic = 12*exp(-t/(R*C));

figure(1);clf; %Assign a figure number and clear the figure

plot(t, vc); %plot time vs capacitor voltage

title('Capacitor voltage'); %Create a title for this graph

xlabel('Time'); %label the x axis

ylabel('Volts'); %label the y axis

figure(2);clf; %A second figure for the current

plot(t, ic); %plot time vs capacitor current on figure 2

title('Capacitor current'); %add titles and axis labels.

xlabel('Time');

ylabel('milliamps');

Figure E2-4 An m-file which evaluates the equations for the capacitor voltage and current as vector

equations instead of loops.

Other plot options - Subplots

Matlab provides subplots and other options that allow a user to put more than one plot on

a figure. The subplot function takes three arguments that specify the number of rows and

columns of subplots to be shown and the number of the currently selected subplot. For

example subplot(3,2,1) specifies that the current figure should have 3 rows by 2

columns of subplots and that we have currently selected the first subplot. The subplots

are numbered from left to right and top to bottom beginning with 1.

For this example we have just 2 plots so we can specify 2 rows and 1 column of subplots

for our figure. The new m-file to use subplots and the results are shown below.

Page 27: MatLab Help Notes - CSSERVER

27

%Example2.m

R = 1000; %set the value of R and C as 1k and 1uf

C = 1e-6;

t = 0:.0001:.01; %t is a vector from 0 to .01 in steps of .0001

vc = 12*(1-exp(-t/(R*C)));

ic = 12*exp(-t/(R*C));

figure(1);clf; %Assign a figure number and clear the figure

subplot(2, 1, 1); %specify subplots and choose the first

plot(t, vc); %plot time vs capacitor voltage

title('Capacitor voltage'); %Create a title for this graph

xlabel('Time'); %label the x axis

ylabel('Volts'); %label the y axis

subplot(2, 1, 2); %choose the second subplot in figure 1

plot(t, ic); %plot time vs capacitor current on

figure

title('Capacitor current'); %add titles and axis labels.

xlabel('Time');

ylabel('milliamps');

Figure E2-5 This version of the solution plots the results in subplots as shown in Figure E2-6.

0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.010

5

10

15Capacitor voltage

Time

Volts

0 0.001 0.002 0.003 0.004 0.005 0.006 0.007 0.008 0.009 0.010

5

10

15Capacitor current

Time

milliam

ps

Figure E2-6

This is all one figure in Matlab but the figure has 2 rows and 1 column of subplots. The

top subplot shows the capacitor voltage vs time while the bottom subplot shows the

capacitor current vs. time.

Page 28: MatLab Help Notes - CSSERVER

28

Example 3 – Complex Impedances Use Matlab to evaluate the complex impedance between terminals A and B in the circuit

of Figure E3-1.

Figure E3-1

Find the equivalent complex impedance between terminals A and B.

In Matlab any variable can be real, imaginary, or complex and it can be a simple variable

or it can be a matrix. There is no special designation for these different form of variables

and they need not be explicitly declared.

For this example we will call the impedance of L1 by the variable name Z1. In Matlab

we write Z1 = j*5;

Matlab recognizes j as 1 but the multiplication sign must be added in explicitly. You

can also use i as 1 as is done in physics and mathematics. In electrical engineering i

usually stands for current and j is taken as the imaginary number 1 . Note that if, in

your program you define either i or j to be something else, such as by using i as a loop

counter in a for loop, you can no longer use it as 1 .

The series combination of R1 and L2 will be called Z2. In Matlab this is written as Z2 = 5 + j*8.66;

The parallel combination of R2 and C1 will be called Z3. In Matlab we can write this as Z3 = (15*(-j*10))/(15-j*10);

The equivalent impedance at terminals A and B is then the parallel combination of Z1,

Z2, and Z3. In Matlab we write Zab = (Z1*Z2*Z3)/(Z1*Z2+Z1*Z3+Z2*Z3);

An m-file called Example3.m is shown in Figure E3-2 which implements these equations

and displays the results. The m-file also shows how to use the abs, angle, real, and imag

functions.

Page 29: MatLab Help Notes - CSSERVER

29

%Example3.m

Z1 = j*5;

Z2 = 5 + j*8.66;

Z3 = (15*(-j*10))/(15-j*10);

Zab = (Z1*Z2*Z3)/(Z1*Z2+Z1*Z3+Z2*Z3);

rab = abs(Zab); %Value of r

thetaab = angle(Zab)*180/pi; %Value of theta in degrees

realZab = real(Zab); %Real part

imagZab = imag(Zab); %Imaginary part

%Use the disp function to show the results

disp('The value of Zab is ');

disp(Zab);

disp('The magnitude of Zab is ');

disp(rab);

disp('The angle of Zab in degrees is ');

disp(thetaab);

disp('The real part of Zab is ');

disp(realZab);

disp('The imaginary part of Zab is ');

disp(imagZab);

Figure E3-2 An m-file to calculate the complex impedance for the circuit of Figure E3-1.

Page 30: MatLab Help Notes - CSSERVER

30

Example 4 – Printing and Plotting Matlab provides numerous print and plot options. This example illustrates the basics and

provides enough detail that you can use it for typical classroom work and assignments.

Printing Figures

Using the command print by itself either from the command line or in an m-file causes

the current figure to be sent to the printer. If there are multiple figures, you can designate

a figure number in an argument. For example print(2); will print figure 2 even if

figure 1 is the current figure. There are numerous formatting options including options

that allow you to print a figure to a file as a jpg image. See help print for details. For

classroom purposes, what is generally needed is a way to put a figure into a document.

You can do this easily by choosing EditCopy Figure from the menu on the current

figure. This option copies the current figure to the clipboard. You can then open Word

and use EditPaste to past the figure into the Word document. Word has easy to use

commands to let you resize and center the figure on your page. All of the figures in the

help files were pasted in from Matlab using this technique.

One other alternative is to push the Print Screen button on the keyboard when you have a

Matlab figure on the screen. This command copies the entire screen to the clipboard.

You can then use Paint (from the accessories menu in Windows) and past the screen

image into Paint. Paint has many options to allow you to clip out portions of an image or

to add in other images or text. Once the figure is in paint it is easy to select the figure or a

part of it and copy it to Word for further text documentation.

Printing Results

One of the frustrating things about Matlab is getting it to print your results to the screen in

some specified format. Matlab uses the old c-style print commands and the formatting

options are hard to remember if you don‟t use them often.

Any expression in Matlab which does not end in a semicolon will print results to the

screen. Thus if I enter y = 5 + 7 in an m-file or the command line I get the following: >> y = 5 + 7

y =

12

whereas if I terminate the expression with a semicolon, the printed output is suppressed.

Matlab also has a display function called disp. The disp function is similar to omitting

the semicolon but printing is a bit more explicit and Matlab produces fewer blank lines in

the output. For example, here's how to print the value of y in the problem above using

disp. >> y = 5 + 7;

>> disp(y);

12

Page 31: MatLab Help Notes - CSSERVER

31

While the disp function does a little better job than just omitting a semicolon, the output

is not formatted and you can not display multiple items on one line. To do that you have

to use the fprintf function.

The fprintf function has the following format. fprintf(fid, format string, variable, variable, ... );

In this format, fid is file ID field. For the screen, set fid to 1 or omit it completely. The

format string is a Matlab string enclosed in single quotes that specifies the format of the

output. The variables may be in a matrix or they may be single variables separated by

commas. If the variables are in a matrix they are printed by rows.

The format string contains conversion characters that determine how the output is printed.

Each conversion character must be preceded by a percent sign (%). Adding a \n to the

format string produces a new line. The common conversion characters are:

c single character d signed integer e floating point with an exponent f floating point without an exponent g general format. Uses e or f as needed. i signed integer o octal integer s string u unsigned integer x hexadecimal integer

Figure E4-1 Format characters for the fprintf command in Matlab.

This is similar to the command for formatted output in C (printf) and you can look up

more details about the print format in a C manual. Here are few examples. i = 13; j = -45; r = 39.567; s = 5.4136789;

Print Command fprintf(...) Printed output fprintf(1, '%6.3f\n', r, s); 39.567

5.414

fprintf(1, 'r =%2.8f s = %3.4f\n', r, s); r =39.56700000 s = 5.4137

fprintf(1, 'r = %g s = %g\n', r, s); r = 39.567 s = 5.41368

fprintf(1, 'i = %i j = %i\n', i, j); i = 13 j = -45

fprintf(1, 'i = %5i j = %5i\n', i, j); i = 13 j = -45

fprintf(1, 'i = %x\n', i); i = d

fprintf(1, 'Hello Mom!\n'); Hello Mom!

Figure E4-2 Examples of format strings and the output that they produce using fprintf.

The most commonly used format strings are f, i, and e. For the f (floating point) and e

(exponential) format strings the form of the string is '%w.d' where w is the minimum field

width and d is the number of digits after the decimal point. Note the w is the minimum

field width and the width may be longer if necessary to take care of the precision. For the

Page 32: MatLab Help Notes - CSSERVER

32

i (signed integer) format the general form of the format string is '%wi' where w is the field

width. The f, i, and e format specifiers are right justified.

If you are completely uncertain about the size of a number you want to output you can use

the g (general) format string which uses either f or e as needed.

You can also use fprintf to print to a file. In this case, you need an fid number which you

can get by using the command fid = fopen('filename');

Plotting Data

Matlab supports a large number of plot options including plots for 2-D and 3-D graphs.

For class work we will look at the plot and stem functions and their options.

Plot Function

The plot function creates a 2-D graph. The normal syntax for this command is plot(x,y);

where x and y may be matrices or functions. If x and y are both matrices then it takes

corresponding elements as the ordered pairs to make the plot. For example: x = (0: pi/100: 4*pi);

y = sin(x);

plot (x,y);

produces a plot of sin(x) for x going from 0 to 4 in increments of /100 as shown in

Figure E4-3.

Figure E4-3

A plot of sin(x) from 0 to 4.

If you use plot(x) alone you get a plot of the values of x versus the array element

number. If x is complex it plots the real part against the imaginary part. If you use the

form plot(x, y) and x and y are complex, the real part is plotted and the imaginary part is

ignored.

Plot has a number of options to modify the color and line style.

Page 33: MatLab Help Notes - CSSERVER

33

Plot Options

Color and Form

You can get various line types and colors by adding a string option to the plot

arguments. The syntax is plot (x, y, S);

where S is a string (1, 2, or 3 characters long) created with single quotes as in Basic.

Here is a table of the options.

Color Form

b –blue . point

c – cyan o circle

g – green x

k – black +

m – magenta - solid

r – red *

w- white : dotted

y – yellow -. dash dot

_ dash

Figure E4-4 Color and form characters for use in plot options

For example plot(x, sin(x), ‘k.’);

produces a plot of x vs sin(x) in black made out of dots. You may also spell out the

color name for clarity, e.g. 'black' or 'blue'.

Background Color

The whitebg function changes the figure background color (not necessarily to white.

The syntax is: whitebg;

The name alone toggles the background color between white and black.

whitebg(c) - sets the background to a specific color where c is a letter form the

table above as a string. For example to get a blue background you would type: whitebg('b');

Grid Lines

The grid function adds grid lines to an existing plot. If they are already on the plot

then grid toggles them off.

Axis

The axis function lets you scale the x and y axis after the plot has been completed.

The syntax is: axis([Xmin Xmax Ymin Ymax]);

Notice the confusing requirement for both parentheses and brackets in this command.

Title

The title function adds a title to the existing graph. The format is: title('THIS IS A TITLE');

Page 34: MatLab Help Notes - CSSERVER

34

The title gets printed centered at the top of your graph.

Axis Labels

To add a label to the axis of a graph you use the xlabel and ylabel commands. The

format is similar to title.

Adding Text to a Graph

The text function allows the user to add text information to a figure at a specified

coordinate. The syntax is: text(x, y, ‘text’);

where (x, y) is the lower left corner of the text block and „text‟ is the text added. You

can experiment to get the correct coordinates.

Subplots

The subplot (m, n, p) function divides the figure into m rows and n columns for

subplots. p is the number of the subplot that is current. For example, subplot(2,2,1)

creates two rows and two columns for four subplots. It makes the top left current.

The following creates two graphs with y = sin(x) on the top half and z = cos(x) on the

bottom half. clear

subplot(2,1,1); % 2 rows - 1 column

x=(0:pi/100:4*pi); % x goes from 0 to 4 in steps of /100 y=sin(x);

plot(x,y); % plots sin(x) in top subplot

subplot(2,1,2); % makes the bottom subplot current

z=cos(2*x);

plot(x,z); % plots cos(2x) in the bottom subplot

Figure E4-5 This set of commands creates two subplots on one figure as seen in Figure E4-6.

Figure E4-6

The top subplot is number 1 and has the sin function. The bottom subplot is number 2

and has the cosine function.

Page 35: MatLab Help Notes - CSSERVER

35

Stem Function

The stem function creates a stem plot. This is supposed to be a plot of discrete data with

the options of the plot function (above). The syntax is: stem(x,y);

where x and y are matrix functions. A stem plot is a sequence of lines from the y value to

the x axis. The color and line style are the same for stem as they are for plot. For

example, the following commands produce the two stem plots in Figure E4-7. x = -2*pi:pi/10:2*pi;

y = sin(x);

figure(1);clf;

stem(x, y);

figure(2);clf;

stem(x, y, '.');

Figure E4-7 Two stem plots.

Other Useful Plot Options

semilogx, semilogy, and loglog - These are the same as the plot command with the

same syntax. They produce log (base 10) plots on either the x, y, or both axes.

Multiple plots - To get more than one plot on an axis you can string vectors together

inside the plot argument. For example x = (0 : pi/100 : 4*pi);

plot(x, sin(x), x, cos(x));

produces a plot of x vs sin(x) and x vs cos(x) in two different colors for x from 0 to

4 in steps of /100.

hold - holds the current plot so that the next plot function is plotted without erasing

the first plot. You can use hold alone to toggle the hold function or you can use hold

on or hold off for clarity.

Page 36: MatLab Help Notes - CSSERVER

36

Example 5 – Step Response of RLC Network In this example we will plot the step response of the series RLC network shown in Figure

E5-1.

Figure E5-1

A series RLC network in which the capacitor voltage is taken as the output.

Taking vc as the output and Vs as the input we can write the transfer function as

)/(1)/(

)/(12 LCsLRs

LC

Vs

vc

There are two roots of the characteristic equation which are

LCL

R

L

Rs

1

22

2

2,1

There are three ways to write the solution to this problem depending on whether the

discriminant is greater than zero, equal to zero, or less than zero. These three cases are

classified as overdamped, critically damped, and underdamped respectively. Using the

solution forms given in the text2 the three solutions are

Overdamped tsts

c eAeAVstv 21

21)(

Critically damped t

c etAAVstv )()( 21

Underdamped t

c etAtAVstv )sincos()( 21

where )2/( Lr and LC/1

The values of A1 and A2 are constants determined from the initial conditions. For this

example we are doing the step response with vc(0) = 0 and dvc(0)/dt = 0.

For component values we will take Vs = 1 volt, C = 1μf, and L = 10mh. For critical

damping we want the discriminant to be equal to zero. Solving )/(1))2/(( 2 LCLR for

R gives Rc = 200Ω. For the overdamped case we will take Ro = 5Rc = 1KΩ. For the

underdamped case we take Ru = Rc/5 = 40Ω.

2 Fundamentals of Electric Circuits 2

nd ed., Alexander and Sadiku, McGraw-Hill, 2004, p 329.

Page 37: MatLab Help Notes - CSSERVER

37

Overdamped case

Taking Ro = 1K, L = 10mh, and C = 1μf. This gives roots of s1 = -1010.2 and

s2 = -98990. The overdamped solution is tt

c eAeAtv 98990

2

2.1010

11)(

Applying initial conditions we have at t = 0 0cv gives

121 AA

Setting the derivative to 0 at t = 0 gives

0989902.1010 21 AA

Solving these two equations gives A1 = -0.989898 and A2 = -0.010102. Our solution for

the overdamped case is tt

c eetv 989902.1010 010102.0989898.01)(

Critically damped

Taking Ro = 200Ω, L = 10mh, and C = 1μf. This gives roots of s1 = s2 = -R/(2L)

= -10000. The critically damped solution is t

c etAAtv 10000

21 )(1)(

Applying initial conditions we have at t = 0 0cv gives

11 A

Setting the derivative to 0 at t = 0 gives

10000010000 221 AorAA

The solution for the critically damped case is t

c ettv 10000)100001(1)(

Underdamped

Taking Ro = 40Ω, L = 10mh, and C = 1μf. This gives roots of α ± jω where α = R/(2L) =

2000 and ω = LC/1 = 10000. The underdamped solution is t

c etAtAVstv )sincos()( 21

Applying initial conditions at t = 0 gives

11 A

Setting the derivative to 0 at t = 0 gives

2.00100002000 221 AorAA

The solution for the underdamped case is t

c etttv 200044 )10sin2.010(cos1)(

Figure E5-1 shows an m-file listing which plots all three cases on a single figure. Figure

E5-2 is the result.

Page 38: MatLab Help Notes - CSSERVER

38

%Example5.m

t = 0:.00001:.005;

%Overdamped - R = 1K, L = 1mh, C = 1uf

vc = 1 - .989898*exp(-1010.2*t) - .010102*exp(-98990*t);

figure(1);clf;

plot(t, vc, 'k'); %plot the overdamped case in black

%Turn on hold so all plots go to figure 1

hold on;

%Critically damped - R = 200, l = 1mh, C = 1uf

vc = 1 - (1 + 10000*t).*exp(-10000*t);

plot(t, vc, 'r'); %plot the critically damped case in red

%Underdamped - R = 40, L = 1mh, C = 1uf

w = 10000;

vc = 1 - (cos(w*t) + .2*sin(w*t)).*exp(-2000*t);

plot(t, vc, 'blue'); %plot the underdamped case in blue

%Add title and x and y axis labels

title('RLC Step Response');

xlabel('Time in seconds');

ylabel('Voltage in volts');

%Add text to mark the cases and draw a line from the

% text to each graph

text(.001, 1.3, 'Underdamped case');

x = [.001 .00043]; y = [1.3 1.2];

line(x, y);

text(.001, .4, 'Overdamped case');

x = [.001 .0005]; y = [.4 .4];

line(x, y);

text(.0015, .6, 'Critically damped case');

x = [.0015 .00015]; y = [.6 .5];

line(x, y);

Figure E5-1 This m-file plots the three step response cases on a single figure and labels each.

Figure E5-2

The graph of the three step response cases for the series RLC circuit.

Page 39: MatLab Help Notes - CSSERVER

39

Notes about the m-file listing:

1. The variable t is a vector and the lines t = 0:.00001:.005;

%Overdamped - R = 1K, L = 1mh, C = 1uf

vc = 1 - .989898*exp(-1010.2*t) - .010102*exp(-98990*t);

make vc a vector of the same length as t. This kind of vector math is equivalent to the

following loop: for i = 1:length(t)

vc(i) = 1 - .989898*exp(-1010.2*t(i)) - .010102*exp(-98990*t(i));

end

In Matlab vector math is much faster than loops.

2. A similar kind of vector math is used for the critically damped and underdamped cases.

For the critically damped case the vector math is in the equation vc = 1 - (1 + 10000*t).*exp(-10000*t);

Note that the expression (1 + 10000*t) is a vector as is exp(-10000*t). The equation

for vc multiplies these two vectors together and Matlab uses the rules for matrix math

when multiplying vectors. So we use a special operator called dot-star (.*) which forces

Matlab to do a term by term multiplication instead of using matrix multiplication rules.

This wasn't necessary for the overdamped case since the vectors were added and the rules

for matrix addition do term by term addition. The equation for the underdamped case

also uses the .* operator.

3. The lines text(.001, 1.3, 'Underdamped case');

x = [.001 .00043]; y = [1.3 1.2];

line(x, y);

add the words "Underdamped case" to the graph at coordinates .001, 1.3. The next two

lines form a two points and draw a line between the points. This draws the line from the

text to the curve for the underdamped case. With a little trial and error you can easily

figure out what the coordinates are for your graph. In the case of the text and line

functions, the coordinates used are the current coordinates specified by your graphs axis.

Page 40: MatLab Help Notes - CSSERVER

40

Example 6 – Transfer Function Plots Matlab had a variety of functions to handle polynomials and transfer functions associated

with electronic and control systems and with digital signal processing. In this example

we will use Matlab to plot the characteristics of passive RLC filters.

Consider the circuit shown in Figure E6-1.

Figure E6-1

A third order passive Butterworth filter circuit.

If we replace that portion of the circuit to the left of A-B with its Thevenin equivalent

circuit and the portion to the right of A-B with its parallel equivalent impedance, we can

write the transfer function using the voltage divider law as

Pth

P

th ZZ

Z

V

V

2 . The circuit impedances are shown in Figure E6-2.

Figure E6-2

We have divided the circuit at A-B and replaced the left and right portions with their

equivalents.

The parallel impedance of R2 and C2 is given by1

1

/11

)/1(1

SS

SZP

Likewise, the value of Zth is seen to be the parallel combination of R1 and C1 in series

with L2. We can write 1

122

/11

)/1(12

2

S

SS

S

SSZth .

To find Vth we find the open circuit voltage at A-B. This allows us to ignore L2 since no

current is flowing through it if the circuit is open. Vth can be found by using the voltage

divider law as

1/11

/1 1

1

S

V

S

SVVth

Page 41: MatLab Help Notes - CSSERVER

41

Using the voltage divider law we write

222

1

1

1

1

122

)1/(1

)1/( 22

1

22

SS

SS

SS

S

SV

V

V

V

th

But the transfer function H(S) is the ratio of V2/V1. We can write H(S) as

122

5.0)(

23

SSSSH

To plot this function in Matlab we can use the m-file shown in Figure E6-3 which uses

the freqs function. The freqs function assumes that the numerator and denominator

polynomials are specified as coefficients of S. Thus, the numerator polynomial is simply

num = 0.5 but the denominator polynomial is den = [1 2 2 1];. The function freqs returns

a vector which has the complex evaluation of the transfer function stored in a vector

called H. The magnitude of H is given by abs(H) and gives us the magnitude of the gain

of the circuit as a function of frequency. The phase angle of H is given by angle(H) and

gives us the phase angle in radians as a function of frequency.

%Example6.m

w = 0:.01:10; %frequency vector in radians

num = 0.5;

den = [1 2 2 1];

H = freqs(num, den, w);

figure(1);clf

subplot(2, 1, 1);

plot(w, abs(H)); %plot the magnitude on the top part

title('Magnitude and Phase Plot');

ylabel('Gain');

xlabel('Radians');

subplot(2, 1, 2);

plot(w, angle(H)*180/pi); %plot the phase on the bottom part

ylabel('Degrees');

xlabel('Radians');

Figure E6-3

An m-file plot of the magnitude and phase of a transfer function given by 122

5.0)(

23

SSSSH

Figure E6-4

The magnitude and phase plot.

Page 42: MatLab Help Notes - CSSERVER

42

Example 7 – Plotting LtSpice Simulations in Matlab In LtSpice, after doing a simulation you can save the data which was used to generate the

simulation and import it into MATLAB for further manipulation. Matlab has a loadfile

command that allows such files (with minor modification) to be read into Matlab and

operated on using Matlab's functions.

There are two advantages to reading LtSpice files into Matlab. First Matlab creates

"prettier" reports and graphs that are easier to integrate into Word. Second Matlab can do

many functions that can't be done easily in LtSpice and this gives you an opportunity to

enrich you simulation.

In this example, we will do a simulation in LtSpice, save the file, modify it for reading

into Matlab, and finally read it into Matlab to make a plot.

We begin by constructing the circuit in Figure E7-1 using LtSpice. The simulation looks

at Vin and Vout

Figure E7-1

Circuit for simulation in Workbench.

After the simulation runs click once on the plot and select File → Export. This will bring

up a screen shown in Figure E7-2. Select a path and file name and click OK to save the

data as a text file. You can exit LtSpice

Page 43: MatLab Help Notes - CSSERVER

43

Figure E7-2 The File→Export menu from LtSpice

The saved file is a simple text file that you can open and examine using Notepad or

Word. The file consists of some header information followed by three columns of data

giving the time base and the corresponding voltage levels for the two nodes. Figure E7-3

shows the beginning and end of this file.

time V(n002) V(n003)

0.000000000000000e+000 0.000000e+000 0.000000e+000

1.896585271020485e-009 -1.779854e-006 2.383319e-005

3.793170542040970e-009 -7.007942e-006 4.766639e-005

5.689755813061455e-009 -1.568426e-005 7.149958e-005

7.586341084081940e-009 -2.780881e-005 9.533277e-005

9.482926355102426e-009 -4.338160e-005 1.191660e-004

1.137951162612291e-008 -6.240262e-005 1.429992e-004

1.327609689714339e-008 -8.487187e-005 1.668324e-004

2.556419391731497e-008 -3.034966e-004 3.212491e-004

4.418355913658504e-008 -8.520387e-004 5.552270e-004

1.998464199406124e-001 -7.143645e-001 -1.640545e+000

1.998609112380335e-001 -8.052113e-001 -1.529819e+000

1.998787348420469e-001 -9.070134e-001 -1.375973e+000

1.998980380558890e-001 -1.004364e+000 -1.190083e+000

1.999218366406368e-001 -1.103188e+000 -9.370503e-001

Page 44: MatLab Help Notes - CSSERVER

44

1.999502564861356e-001 -1.186708e+000 -6.086052e-001

1.999903189323086e-001 -1.250910e+000 -1.206329e-001

2.000000000000000e-001 -1.249292e+000 1.571833e-014

Figure E7-3 The exported data file opened using Notepad.

Matlab can read text files using the load 'filename' command. However, Matlab expects

these files to contain only the data and not any header information. If we try to read the

exported text file with Matlab's load command we will generate an error. To correct this

we modify the file by deleting all of the header information from the top of the file down

to the first line of data. The first line of the file should read

0.000000000000000e+000 0.000000e+000 0.000000e+000

Save this amended file with a new name such as Ex7.txt. Ex7.txt can now be read into

Matlab and stored as a vector having one row for each row in the file and three columns.

Figure E7-4 shows an m-file that reads Ex7.txt into a variable called "scope". We then

use the colon operator to separate the scope vector into two new vectors called ChA and

ChB. ChA contains the time base in column 1 and the channel A scope data in column 2.

ChB contains the time base in column 1 and the channel B scope data in column 2. Both

can then be plotted. Figure E7-4 shows the results of the plot.

%Example7.m

scope = load('Ex7.txt');

ChA = [scope(:,1),scope(:,2)];

ChB = [scope(:,1),scope(:,3)];

figure(1);clf;

subplot(2,1,1);

plot(ChA(:,1),ChA(:,2));

axis([0 .02 -1.2 1.2]);

subplot(2,1,2);

plot(ChB(:,1),ChB(:,2));

axis([0 .02 -2.2 2.2]);

Figure E7-3

This m-file loads a text file named 'Ex7.txt' into a variable called scope. The variable is

then separated into two variables called ChA and ChB and the data for each channel is

plotted. Figure E7-4 shows the results of the plot.

Page 45: MatLab Help Notes - CSSERVER

45

0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018 0.02

-1

-0.5

0

0.5

1

0 0.002 0.004 0.006 0.008 0.01 0.012 0.014 0.016 0.018 0.02

-2

-1

0

1

2

Figure E7-4

The Matlab plotted results from the LtSpice simulation.