Buscar

Getstart Matlab - Mathworks

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 214 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 214 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 214 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

MATLAB®
Primer
R2012b
How to Contact MathWorks
www.mathworks.com Web
comp.soft-sys.matlab Newsgroup
www.mathworks.com/contact_TS.html Technical Support
suggest@mathworks.com Product enhancement suggestions
bugs@mathworks.com Bug reports
doc@mathworks.com Documentation error reports
service@mathworks.com Order status, license renewals, passcodes
info@mathworks.com Sales, pricing, and general information
508-647-7000 (Phone)
508-647-7001 (Fax)
The MathWorks, Inc.
3 Apple Hill Drive
Natick, MA 01760-2098
For contact information about worldwide offices, see the MathWorks Web site.
MATLAB® Primer
© COPYRIGHT 1984–2012 by The MathWorks, Inc.
The software described in this document is furnished under a license agreement. The software may be used
or copied only under the terms of the license agreement. No part of this manual may be photocopied or
reproduced in any form without prior written consent from The MathWorks, Inc.
FEDERAL ACQUISITION: This provision applies to all acquisitions of the Program and Documentation
by, for, or through the federal government of the United States. By accepting delivery of the Program
or Documentation, the government hereby agrees that this software or documentation qualifies as
commercial computer software or commercial computer software documentation as such terms are used
or defined in FAR 12.212, DFARS Part 227.72, and DFARS 252.227-7014. Accordingly, the terms and
conditions of this Agreement and only those rights specified in this Agreement, shall pertain to and govern
the use, modification, reproduction, release, performance, display, and disclosure of the Program and
Documentation by the federal government (or other entity acquiring for or through the federal government)
and shall supersede any conflicting contractual terms or conditions. If this License fails to meet the
government’s needs or is inconsistent in any respect with federal procurement law, the government agrees
to return the Program and Documentation, unused, to The MathWorks, Inc.
Trademarks
MATLAB and Simulink are registered trademarks of The MathWorks, Inc. See
www.mathworks.com/trademarks for a list of additional trademarks. Other product or brand
names may be trademarks or registered trademarks of their respective holders.
Patents
MathWorks products are protected by one or more U.S. patents. Please see
www.mathworks.com/patents for more information.
Revision History
December 1996 First printing For MATLAB 5
May 1997 Second printing For MATLAB 5.1
September 1998 Third printing For MATLAB 5.3
September 2000 Fourth printing Revised for MATLAB 6 (Release 12)
June 2001 Online only Revised for MATLAB 6.1 (Release 12.1)
July 2002 Online only Revised for MATLAB 6.5 (Release 13)
August 2002 Fifth printing Revised for MATLAB 6.5
June 2004 Sixth printing Revised for MATLAB 7.0 (Release 14)
October 2004 Online only Revised for MATLAB 7.0.1 (Release 14SP1)
March 2005 Online only Revised for MATLAB 7.0.4 (Release 14SP2)
June 2005 Seventh printing Minor revision for MATLAB 7.0.4 (Release 14SP2)
September 2005 Online only Minor revision for MATLAB 7.1 (Release 14SP3)
March 2006 Online only Minor revision for MATLAB 7.2 (Release 2006a)
September 2006 Eighth printing Minor revision for MATLAB 7.3 (Release 2006b)
March 2007 Ninth printing Minor revision for MATLAB 7.4 (Release 2007a)
September 2007 Tenth printing Minor revision for MATLAB 7.5 (Release 2007b)
March 2008 Eleventh printing Minor revision for MATLAB 7.6 (Release 2008a)
October 2008 Twelfth printing Minor revision for MATLAB 7.7 (Release 2008b)
March 2009 Thirteenth printing Minor revision for MATLAB 7.8 (Release 2009a)
September 2009 Fourteenth printing Minor revision for MATLAB 7.9 (Release 2009b)
March 2010 Fifteenth printing Minor revision for MATLAB 7.10 (Release 2010a)
September 2010 Sixteenth printing Revised for MATLAB 7.11 (R2010b)
April 2011 Online only Revised for MATLAB 7.12 (R2011a)
September 2011 Seventeenth printing Revised for MATLAB 7.13 (R2011b)
March 2012 Eighteenth printing Revised for Version 7.14 (R2012a)(Renamed from
MATLAB Getting Started Guide)
September 2012 Nineteenth printing Revised for Version 8.0 (R2012b)
Contents
Quick Start
1
Product Description . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-2
Key Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-2
Desktop Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-3
Matrices and Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-6
Array Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-6
Matrix and Array Operations . . . . . . . . . . . . . . . . . . . . . . . . 1-7
Concatenation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-9
Complex Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-10
Array Indexing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-11
Workspace Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-13
Character Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-15
Calling Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-17
2-D and 3-D Plots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-18
Line Plots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-18
3-D Plots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-21
Subplots . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-22
Programming and Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . 1-24
Sample Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-24
Loops and Conditional Statements . . . . . . . . . . . . . . . . . . . 1-25
Script Locations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-27
Help and Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . 1-28
v
Language Fundamentals
2
Matrices and Magic Squares . . . . . . . . . . . . . . . . . . . . . . . . 2-2
About Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-2
Entering Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-4
sum, transpose, and diag . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-5
The magic Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-7
Generating Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-8
Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-10
Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-10
Numbers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-11
Matrix Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-12
Array Operators . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-13
Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-15
Examples of Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-16
Entering Commands . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-18
The format Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-18
Suppressing Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-19
Entering Long Statements . . . . . . . . . . . . . . . . . . . . . . . . . . 2-20
Command Line Editing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-20
Indexing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-21
Subscripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-21
The Colon Operator . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-22
Concatenation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. . 2-23
Deleting Rows and Columns . . . . . . . . . . . . . . . . . . . . . . . . . 2-24
Scalar Expansion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-25
Logical Subscripting . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-26
The find Function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-27
Types of Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-28
Multidimensional Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-28
Cell Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-30
Characters and Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-32
Structures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2-35
vi Contents
Mathematics
3
Linear Algebra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-2
Matrices in the MATLAB Environment . . . . . . . . . . . . . . . 3-2
Systems of Linear Equations . . . . . . . . . . . . . . . . . . . . . . . . 3-11
Inverses and Determinants . . . . . . . . . . . . . . . . . . . . . . . . . 3-22
Factorizations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-26
Powers and Exponentials . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-34
Eigenvalues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-37
Singular Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-40
Operations on Nonlinear Functions . . . . . . . . . . . . . . . . . 3-44
Function Handles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-44
Function Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-44
Multivariate Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-47
Data Analysis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-48
Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-48
Preprocessing Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-48
Summarizing Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-54
Visualizing Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-58
Modeling Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3-71
Graphics
4
Basic Plotting Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-2
Creating a Plot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-2
Plotting Multiple Data Sets in One Graph . . . . . . . . . . . . . 4-3
Specifying Line Styles and Colors . . . . . . . . . . . . . . . . . . . . 4-4
Plotting Lines and Markers . . . . . . . . . . . . . . . . . . . . . . . . . 4-5
Graphing Imaginary and Complex Data . . . . . . . . . . . . . . . 4-7
Adding Plots to an Existing Graph . . . . . . . . . . . . . . . . . . . 4-8
Figure Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-10
Displaying Multiple Plots in One Figure . . . . . . . . . . . . . . . 4-10
Controlling the Axes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-11
vii
Adding Axis Labels and Titles . . . . . . . . . . . . . . . . . . . . . . . 4-13
Saving Figures . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-14
Creating Mesh and Surface Plots . . . . . . . . . . . . . . . . . . . . 4-16
About Mesh and Surface Plots . . . . . . . . . . . . . . . . . . . . . . . 4-16
Visualizing Functions of Two Variables . . . . . . . . . . . . . . . 4-16
Plotting Image Data . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-23
About Plotting Image Data . . . . . . . . . . . . . . . . . . . . . . . . . . 4-23
Reading and Writing Images . . . . . . . . . . . . . . . . . . . . . . . . 4-24
Printing Graphics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-25
Overview of Printing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-25
Printing from the File Menu . . . . . . . . . . . . . . . . . . . . . . . . 4-25
Exporting the Figure to a Graphics File . . . . . . . . . . . . . . . 4-26
Using the Print Command . . . . . . . . . . . . . . . . . . . . . . . . . . 4-26
Working with Handle Graphics Objects . . . . . . . . . . . . . . 4-28
Graphics Objects . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-28
Setting Object Properties . . . . . . . . . . . . . . . . . . . . . . . . . . . 4-30
Functions for Working with Objects . . . . . . . . . . . . . . . . . . 4-33
Specifying Axes or Figures . . . . . . . . . . . . . . . . . . . . . . . . . . 4-34
Finding the Handles of Existing Objects . . . . . . . . . . . . . . . 4-36
Programming
5
Control Flow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-2
Conditional Control — if, else, switch . . . . . . . . . . . . . . . . . 5-2
Loop Control — for, while, continue, break . . . . . . . . . . . . . 5-5
Program Termination — return . . . . . . . . . . . . . . . . . . . . . . 5-7
Vectorization . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-8
Preallocation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-8
Scripts and Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-10
Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-10
Scripts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-11
Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-12
viii Contents
Types of Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-14
Global Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5-16
Command vs. Function Syntax . . . . . . . . . . . . . . . . . . . . . . 5-17
Index
ix
x Contents
1
Quick Start
• “Product Description” on page 1-2
• “Desktop Basics” on page 1-3
• “Matrices and Arrays” on page 1-6
• “Array Indexing” on page 1-11
• “Workspace Variables” on page 1-13
• “Character Strings” on page 1-15
• “Calling Functions” on page 1-17
• “2-D and 3-D Plots” on page 1-18
• “Programming and Scripts” on page 1-24
• “Help and Documentation” on page 1-28
1 Quick Start
Product Description
The Language of Technical Computing
MATLAB® is a high-level language and interactive environment for numerical
computation, visualization, and programming. Using MATLAB, you can
analyze data, develop algorithms, and create models and applications.
The language, tools, and built-in math functions enable you to explore
multiple approaches and reach a solution faster than with spreadsheets
or traditional programming languages, such as C/C++ or Java™. You can
use MATLAB for a range of applications, including signal processing and
communications, image and video processing, control systems, test and
measurement, computational finance, and computational biology. More than
a million engineers and scientists in industry and academia use MATLAB,
the language of technical computing.
Key Features
• High-level language for numerical computation, visualization, and
application development
• Interactive environment for iterative exploration, design, and problem
solving
• Mathematical functions for linear algebra, statistics, Fourier analysis,
filtering, optimization, numerical integration, and solving ordinary
differential equations
• Built-in graphics for visualizing data and tools for creating custom plots
• Development tools for improving code quality and maintainability and
maximizing performance
• Tools for building applications with custom graphical interfaces
• Functions for integrating MATLAB based algorithms with external
applications and languages such as C, Java, .NET, and Microsoft® Excel®
1-2
Desktop Basics
Desktop Basics
When you start MATLAB, the desktop appears in its default layout.
The desktop includes these panels:• Current Folder — Access your files.
• Command Window — Enter commands at the command line, indicated
by the prompt (>>).
• Workspace— Explore data that you create or import from files.
• Command History — View or rerun commands that you entered at the
command line.
As you work in MATLAB, you issue commands that create variables and call
functions. For example, create a variable named a by typing this statement
at the command line:
1-3
1 Quick Start
a = 1
MATLAB adds variable a to the workspace and displays the result in the
Command Window.
a =
1
Create a few more variables.
b = 2
b =
2
c = a + b
c =
3
d = cos(a)
d =
0.5403
When you do not specify an output variable, MATLAB uses the variable ans,
short for answer, to store the results of your calculation.
sin(a)
ans =
0.8415
If you end a statement with a semicolon, MATLAB performs the computation,
but suppresses the display of output in the Command Window.
e = a*b;
1-4
Desktop Basics
You can recall previous commands by pressing the up- and down-arrow keys,
↑ and ↓. Press the arrow keys either at an empty command line or after
you type the first few characters of a command. For example, to recall the
command b = 2, type b, and then press the up-arrow key.
1-5
1 Quick Start
Matrices and Arrays
In this section...
“Array Creation” on page 1-6
“Matrix and Array Operations” on page 1-7
“Concatenation” on page 1-9
“Complex Numbers” on page 1-10
MATLAB is an abbreviation for "matrix laboratory." While other programming
languages mostly work with numbers one at a time, MATLAB is designed to
operate primarily on whole matrices and arrays.
All MATLAB variables are multidimensional arrays, no matter what type of
data. A matrix is a two-dimensional array often used for linear algebra.
Array Creation
To create an array with four elements in a single row, separate the elements
with either a comma (,) or a space.
a = [1 2 3 4]
returns
a =
1 2 3 4
This type of array is a row vector.
To create a matrix that has multiple rows, separate the rows with semicolons.
a = [1 2 3; 4 5 6; 7 8 10]
a =
1 2 3
4 5 6
7 8 10
1-6
Matrices and Arrays
Another way to create a matrix is to use a function, such as ones, zeros, or
rand. For example, create a 5-by-1 column vector of zeros.
z = zeros(5,1)
z =
0
0
0
0
0
Matrix and Array Operations
MATLAB allows you to process all of the values in a matrix using a single
arithmetic operator or function.
a + 10
ans =
11 12 13
14 15 16
17 18 20
sin(a)
ans =
0.8415 0.9093 0.1411
-0.7568 -0.9589 -0.2794
0.6570 0.9894 -0.5440
To transpose a matrix, use a single quote ('):
a'
ans =
1 4 7
2 5 8
1-7
1 Quick Start
3 6 10
You can perform standard matrix multiplication, which computes the inner
products between rows and columns, using the * operator. For example,
confirm that a matrix times its inverse returns the identity matrix:
p = a*inv(a)
p =
1.0000 0 -0.0000
0 1.0000 0
0 0 1.0000
Notice that p is not a matrix of integer values. MATLAB stores numbers
as floating-point values, and arithmetic operations are sensitive to small
differences between the actual value and its floating-point representation.
You can display more decimal digits using the format command:
format long
p = a*inv(a)
p =
1.000000000000000 0 -0.000000000000000
0 1.000000000000000 0
0 0 0.999999999999998
Reset the display to the shorter format using
format short
format affects only the display of numbers, not the way MATLAB computes
or saves them.
To perform element-wise multiplication rather than matrix multiplication,
use the .* operator:
p = a.*a
p =
1-8
Matrices and Arrays
1 4 9
16 25 36
49 64 100
The matrix operators for multiplication, division, and power each have a
corresponding array operator that operates element-wise. For example, raise
each element of a to the third power:
a.^3
ans =
1 8 27
64 125 216
343 512 1000
Concatenation
Concatenation is the process of joining arrays to make larger ones. In fact,
you made your first array by concatenating its individual elements. The pair
of square brackets [] is the concatenation operator.
A = [a,a]
A =
1 2 3 1 2 3
4 5 6 4 5 6
7 8 10 7 8 10
Concatenating arrays next to one another using commas is called horizontal
concatenation. Each array must have the same number of rows. Similarly,
when the arrays have the same number of columns, you can concatenate
vertically using semicolons.
A = [a; a]
1-9
1 Quick Start
A =
1 2 3
4 5 6
7 8 10
1 2 3
4 5 6
7 8 10
Complex Numbers
Complex numbers have both real and imaginary parts, where the imaginary
unit is the square root of –1.
sqrt(-1)
ans =
0 + 1.0000i
To represent the imaginary part of complex numbers, use either i or j.
c = [3+4i, 4+3j, -i, 10j]
c =
3.0000 + 4.0000i 4.0000 + 3.0000i 0 - 1.0000i 0 +10.0000i
1-10
Array Indexing
Array Indexing
Every variable in MATLAB is an array that can hold many numbers. When
you want to access selected elements of an array, use indexing.
For example, consider the 4-by-4 magic square A:
A = magic(4)
A =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
There are two ways to refer to a particular element in an array. The most
common way is to specify row and column subscripts, such as
A(4,2)
ans =
14
Less common, but sometimes useful, is to use a single subscript that traverses
down each column in order:
A(8)
ans =
14
Using a single subscript to refer to a particular element in an array is called
linear indexing.
If you try to refer to elements outside an array on the right side of an
assignment statement, MATLAB throws an error.
test = A(4,5)
Attempted to access A(4,5); index out of bounds because size(A)=[4,4].
1-11
1 Quick Start
However, on the left side of an assignment statement, you can specify
elements outside the current dimensions. The size of the array increases to
accommodate the newcomers.
A(4,5) = 17
A =
16 2 3 13 0
5 11 10 8 0
9 7 6 12 0
4 14 15 1 17
To refer to multiple elements of an array, use the colon operator, which allows
you to specify a range of the form start:end. For example, list the elements
in the first three rows and the second column of A:
A(1:3,2)
ans =
2
11
7
The colon alone, without start or end values, specifies all of the elements in
that dimension. For example, select all the columns in the third row of A:
A(3,:)
ans =
9 7 6 12 0
The colon operator also allows you to create an equally spaced vector of values
using the more general form start:step:end.
B = 0:10:100
B =
0 10 20 30 40 50 60 70 80 90 100
If you omit the middle step, as in start:end, MATLAB uses the default
step value of 1.
1-12
Workspace Variables
Workspace Variables
The workspace contains variables that you create within or import into
MATLAB from data files or other programs. For example, these statements
create variables A and B in the workspace.
A = magic(4);
B = rand(3,5,2);
You can view the contents of the workspace using whos.
whos
Name Size Bytes Class Attributes
A 4x4 128 double
B 3x5x2 192 double
The variables also appear in the Workspace pane on the desktop.
Workspace variables do not persist after you exit MATLAB. Save your data
for later use with the save command,
save myfile.mat
Saving preserves the workspace in your current working folder in a
compressed file with a .mat extension, called a MAT-file.
To clear all the variables from the workspace, use the clear command.
Restore data from a MAT-file into the workspace using load.
1-13
1 Quick Start
load myfile.mat
1-14
Character Strings
Character Strings
A character string is a sequence of any number of characters enclosed in
single quotes. You can assign a string to a variable.
myText = 'Hello, world';
If the text includes a single quote, use two single quotes within the definition.
otherText = 'You''re right'
otherText =
You're right
myText and otherText are arrays, like all MATLAB variables. Their class
or data type is char, which is short for character.
whos myText
Name Size Bytes Class Attributes
myText 1x1224 char
You can concatenate strings with square brackets, just as you concatenate
numeric arrays.
longText = [myText,' - ',otherText]
longText =
Hello, world - You're right
To convert numeric values to strings, use functions, such as num2str or
int2str.
f = 71;
c = (f-32)/1.8;
tempText = ['Temperature is ',num2str(c),'C']
tempText =
1-15
1 Quick Start
Temperature is 21.6667C
1-16
Calling Functions
Calling Functions
MATLAB provides a large number of functions that perform computational
tasks. Functions are equivalent to subroutines or methods in other
programming languages.
Suppose that your workspace includes variables A and B, such as
A = [1 3 5];
B = [10 6 4];
To call a function, enclose its input arguments in parentheses:
max(A);
If there are multiple input arguments, separate them with commas:
max(A,B);
Return output from a function by assigning it to a variable:
maxA = max(A);
When there are multiple output arguments, enclose them in square brackets:
[maxA,location] = max(A);
Enclose any character string inputs in single quotes:
disp('hello world');
To call a function that does not require any inputs and does not return any
outputs, type only the function name:
clc
The clc function clears the Command Window.
1-17
1 Quick Start
2-D and 3-D Plots
In this section...
“Line Plots” on page 1-18
“3-D Plots” on page 1-21
“Subplots” on page 1-22
Line Plots
To create two-dimensional line plots, use the plot function. For example, plot
the value of the sine function from 0 to 2π:
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)
You can label the axes and add a title.
1-18
2-D and 3-D Plots
xlabel('x')
ylabel('sin(x)')
title('Plot of the Sine Function')
By adding a third input argument to the plot function, you can plot the same
variables using a red dashed line.
plot(x,y,'r--')
1-19
1 Quick Start
The 'r--' string is a line specification. Each specification can include
characters for the line color, style, and marker. A marker is a symbol that
appears at each plotted data point, such as a +, o, or *. For example, 'g:*'
requests a dotted green line with * markers.
Notice that the titles and labels that you defined for the first plot are no
longer in the current figure window. By default, MATLAB clears the figure
each time you call a plotting function, resetting the axes and other elements
to prepare the new plot.
To add plots to an existing figure, use hold.
x = 0:pi/100:2*pi;
y = sin(x);
plot(x,y)
hold on
y2 = cos(x);
plot(x,y2,'r:')
legend('sin','cos')
1-20
2-D and 3-D Plots
Until you use hold off or close the window, all plots appear in the current
figure window.
3-D Plots
Three-dimensional plots typically display a surface defined by a function
in two variables, z = f (x,y).
To evaluate z, first create a set of (x,y) points over the domain of the function
using meshgrid.
[X,Y] = meshgrid(-2:.2:2);
Z = X .* exp(-X.^2 - Y.^2);
Then, create a surface plot.
surf(X,Y,Z)
1-21
1 Quick Start
Both the surf function and its companion mesh display surfaces in three
dimensions. surf displays both the connecting lines and the faces of the
surface in color. mesh produces wireframe surfaces that color only the lines
connecting the defining points.
Subplots
You can display multiple plots in different subregions of the same window
using the subplot function.
For example, create four plots in a 2-by-2 grid within a figure window.
t = 0:pi/10:2*pi;
[X,Y,Z] = cylinder(4*cos(t));
subplot(2,2,1); mesh(X); title('X');
subplot(2,2,2); mesh(Y); title('Y');
subplot(2,2,3); mesh(Z); title('Z');
subplot(2,2,4); mesh(X,Y,Z); title('X,Y,Z');
1-22
2-D and 3-D Plots
The first two inputs to the subplot function indicate the number of plots in
each row and column. The third input specifies which plot is active.
1-23
1 Quick Start
Programming and Scripts
In this section...
“Sample Script” on page 1-24
“Loops and Conditional Statements” on page 1-25
“Script Locations” on page 1-27
The simplest type of MATLAB program is called a script. A script is a file
with a .m extension that contains multiple sequential lines of MATLAB
commands and function calls. You can run a script by typing its name at
the command line.
Sample Script
To create a script, use the edit command,
edit plotrand
This opens a blank file named plotrand.m. Enter some code that plots a
vector of random data:
n = 50;
r = rand(n,1);
plot(r)
Next, add code that draws a horizontal line on the plot at the mean:
m = mean(r);
hold on
plot([0,n],[m,m])
hold off
title('Mean of Random Uniform Data')
Whenever you write code, it is a good practice to add comments that describe
the code. Comments allow others to understand your code, and can refresh
your memory when you return to it later. Add comments using the percent (%)
symbol.
% Generate random data from a uniform distribution
1-24
Programming and Scripts
% and calculate the mean. Plot the data and the mean.
n = 50; % 50 data points
r = rand(n,1);
plot(r)
% Draw a line from (0,m) to (n,m)
m = mean(r);
hold on
plot([0,n],[m,m])
hold off
title('Mean of Random Uniform Data')
Save the file in the current folder. To run the script, type its name at the
command line:
plotrand
You can also run scripts from the Editor by pressing the Run button, .
Loops and Conditional Statements
Within a script, you can loop over sections of code and conditionally execute
sections using the keywords for, while, if, and switch.
For example, create a script named calcmean.m that uses a for loop to
calculate the mean of five random samples and the overall mean.
nsamples = 5;
npoints = 50;
for k = 1:nsamples
currentData = rand(npoints,1);
sampleMean(k) = mean(currentData);
end
overallMean = mean(sampleMean)
Now, modify the for loop so that you can view the results at each iteration.
Display text in the Command Window that includes the current iteration
number, and remove the semicolon from the assignment to sampleMean.
1-25
1 Quick Start
for k = 1:nsamples
iterationString = ['Iteration #',int2str(k)];
disp(iterationString)
currentData = rand(npoints,1);
sampleMean(k) = mean(currentData)
end
overallMean = mean(sampleMean)
When you run the script, it displays the intermediate results, and then
calculates the overall mean.
calcmean
Iteration #1
sampleMean =
0.3988
Iteration #2
sampleMean =
0.3988 0.4950
Iteration #3
sampleMean =
0.3988 0.4950 0.5365
Iteration #4
sampleMean =
0.3988 0.4950 0.5365 0.4870
Iteration #5
sampleMean =
1-26
Programming and Scripts
0.3988 0.4950 0.5365 0.4870 0.5501
overallMean =
0.4935
In the Editor, add conditional statements to the end of calcmean.m that
display a different message depending on the value of overallMean.
if overallMean < .49
disp('Mean is less than expected')
elseif overallMean > .51
disp('Mean is greater than expected')
else
disp('Mean is within the expected range')
end
Run calcmean and verify that the correct message displays for the calculated
overallMean. For example:
overallMean =
0.5178
Mean is greater than expected
Script Locations
MATLAB looks for scripts and other files in certain places. To run a script,
the file must be in the current folder or in a folder on the search path.
By default, the MATLAB folder that the MATLAB Installer creates is on the
search path. If you want to store and run programs in another folder, add it to
the search path. Select the folder in the Current Folder browser, right-click,
and then select Add to Path.
1-27
1 Quick Start
Help and Documentation
All MATLAB functions have supporting documentation that includes
examples and describes the function inputs, outputs, and calling syntax.
There are several ways to access this information from the command line:
• Open the function documentation in a separate window using the doc
command.
doc mean
• Display function hints (the syntax portion of the function documentation)
in the Command Window by pausing after you type the open parentheses
for the function input arguments.
mean(
•View an abbreviated text version of the function documentation in the
Command Window using the help command.
help mean
Access the complete product documentation by clicking the help icon .
1-28
2
Language Fundamentals
• “Matrices and Magic Squares” on page 2-2
• “Expressions” on page 2-10
• “Entering Commands” on page 2-18
• “Indexing” on page 2-21
• “Types of Arrays” on page 2-28
2 Language Fundamentals
Matrices and Magic Squares
In this section...
“About Matrices” on page 2-2
“Entering Matrices” on page 2-4
“sum, transpose, and diag” on page 2-5
“The magic Function” on page 2-7
“Generating Matrices” on page 2-8
About Matrices
In the MATLAB environment, a matrix is a rectangular array of numbers.
Special meaning is sometimes attached to 1-by-1 matrices, which are
scalars, and to matrices with only one row or column, which are vectors.
MATLAB has other ways of storing both numeric and nonnumeric data, but
in the beginning, it is usually best to think of everything as a matrix. The
operations in MATLAB are designed to be as natural as possible. Where other
programming languages work with numbers one at a time, MATLAB allows
you to work with entire matrices quickly and easily. A good example matrix,
used throughout this book, appears in the Renaissance engraving Melencolia
I by the German artist and amateur mathematician Albrecht Dürer.
2-2
Matrices and Magic Squares
This image is filled with mathematical symbolism, and if you look carefully,
you will see a matrix in the upper-right corner. This matrix is known as a
magic square and was believed by many in Dürer’s time to have genuinely
magical properties. It does turn out to have some fascinating characteristics
worth exploring.
2-3
2 Language Fundamentals
Entering Matrices
The best way for you to get started with MATLAB is to learn how to handle
matrices. Start MATLAB and follow along with each example.
You can enter matrices into MATLAB in several different ways:
• Enter an explicit list of elements.
• Load matrices from external data files.
• Generate matrices using built-in functions.
• Create matrices with your own functions and save them in files.
Start by entering Dürer’s matrix as a list of its elements. You only have to
follow a few basic conventions:
• Separate the elements of a row with blanks or commas.
• Use a semicolon, ; , to indicate the end of each row.
• Surround the entire list of elements with square brackets, [ ].
To enter Dürer’s matrix, simply type in the Command Window
A = [16 3 2 13; 5 10 11 8; 9 6 7 12; 4 15 14 1]
2-4
Matrices and Magic Squares
MATLAB displays the matrix you just entered:
A =
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
This matrix matches the numbers in the engraving. Once you have entered
the matrix, it is automatically remembered in the MATLAB workspace. You
can refer to it simply as A. Now that you have A in the workspace, take a look
at what makes it so interesting. Why is it magic?
sum, transpose, and diag
You are probably already aware that the special properties of a magic square
have to do with the various ways of summing its elements. If you take the
sum along any row or column, or along either of the two main diagonals,
you will always get the same number. Let us verify that using MATLAB.
The first statement to try is
sum(A)
MATLAB replies with
ans =
34 34 34 34
When you do not specify an output variable, MATLAB uses the variable ans,
short for answer, to store the results of a calculation. You have computed a
row vector containing the sums of the columns of A. Each of the columns has
the same sum, the magic sum, 34.
How about the row sums? MATLAB has a preference for working with the
columns of a matrix, so one way to get the row sums is to transpose the
matrix, compute the column sums of the transpose, and then transpose the
result. For an additional way that avoids the double transpose use the
dimension argument for the sum function.
MATLAB has two transpose operators. The apostrophe operator (for example,
A') performs a complex conjugate transposition. It flips a matrix about its
2-5
2 Language Fundamentals
main diagonal, and also changes the sign of the imaginary component of
any complex elements of the matrix. The dot-apostrophe operator (A.'),
transposes without affecting the sign of complex elements. For matrices
containing all real elements, the two operators return the same result.
So
A'
produces
ans =
16 5 9 4
3 10 6 15
2 11 7 14
13 8 12 1
and
sum(A')'
produces a column vector containing the row sums
ans =
34
34
34
34
The sum of the elements on the main diagonal is obtained with the sum and
the diag functions:
diag(A)
produces
ans =
16
10
7
1
2-6
Matrices and Magic Squares
and
sum(diag(A))
produces
ans =
34
The other diagonal, the so-called antidiagonal, is not so important
mathematically, so MATLAB does not have a ready-made function for it.
But a function originally intended for use in graphics, fliplr, flips a matrix
from left to right:
sum(diag(fliplr(A)))
ans =
34
You have verified that the matrix in Dürer’s engraving is indeed a magic
square and, in the process, have sampled a few MATLAB matrix operations.
The following sections continue to use this matrix to illustrate additional
MATLAB capabilities.
The magic Function
MATLAB actually has a built-in function that creates magic squares of almost
any size. Not surprisingly, this function is named magic:
B = magic(4)
B =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
This matrix is almost the same as the one in the Dürer engraving and has
all the same “magic” properties; the only difference is that the two middle
columns are exchanged.
To make this B into Dürer’s A, swap the two middle columns:
A = B(:,[1 3 2 4])
2-7
2 Language Fundamentals
This subscript indicates that—for each of the rows of matrix B—reorder the
elements in the order 1, 3, 2, 4. It produces:
A =
16 3 2 13
5 10 11 8
9 6 7 12
4 15 14 1
Generating Matrices
MATLAB software provides four functions that generate basic matrices.
zeros All zeros
ones All ones
rand Uniformly distributed random elements
randn Normally distributed random elements
Here are some examples:
Z = zeros(2,4)
Z =
0 0 0 0
0 0 0 0
F = 5*ones(3,3)
F =
5 5 5
5 5 5
5 5 5
N = fix(10*rand(1,10))
N =
9 2 6 4 8 7 4 0 8 4
R = randn(4,4)
R =
0.6353 0.0860 -0.3210 -1.2316
2-8
Matrices and Magic Squares
-0.6014 -2.0046 1.2366 1.0556
0.5512 -0.4931 -0.6313 -0.1132
-1.0998 0.4620 -2.3252 0.3792
2-9
2 Language Fundamentals
Expressions
In this section...
“Variables” on page 2-10
“Numbers” on page 2-11
“Matrix Operators” on page 2-12
“Array Operators” on page 2-13
“Functions” on page 2-15
“Examples of Expressions” on page 2-16
Variables
Like most other programming languages, the MATLAB language provides
mathematical expressions, but unlike most programming languages, these
expressions involve entire matrices.
MATLAB does not require any type declarations or dimension statements.
When MATLAB encounters a new variable name, it automatically creates the
variable and allocates the appropriate amount of storage. If the variable
already exists, MATLAB changes its contents and, if necessary, allocates
new storage. For example,
num_students = 25
creates a 1-by-1 matrix named num_students and stores the value 25 in its
single element. To view the matrix assigned to any variable, simply enter
the variable name.
Variable names consist of a letter, followed by any number of letters, digits, or
underscores. MATLAB is case sensitive; it distinguishes between uppercase
and lowercase letters. A and a are not the same variable.
Although variable names can be of any length, MATLAB uses only the first
N characters of the name, (where N is the number returned by the function
namelengthmax), and ignores the rest. Hence, it is important to make
each variable name unique in the first N characters to enable MATLAB to
distinguish variables.
2-10
Expressions
N = namelengthmax
N =
63
The genvarname function can be useful in creatingvariable names that are
both valid and unique.
Numbers
MATLAB uses conventional decimal notation, with an optional decimal point
and leading plus or minus sign, for numbers. Scientific notation uses the
letter e to specify a power-of-ten scale factor. Imaginary numbers use either i
or j as a suffix. Some examples of legal numbers are
3 -99 0.0001
9.6397238 1.60210e-20 6.02252e23
1i -3.14159j 3e5i
MATLAB stores all numbers internally using the long format specified by
the IEEE® floating-point standard. Floating-point numbers have a finite
precision of roughly 16 significant decimal digits and a finite range of roughly
10-308 to 10+308.
Numbers represented in the double format have a maximum precision of
52 bits. Any double requiring more bits than 52 loses some precision. For
example, the following code shows two unequal values to be equal because
they are both truncated:
x = 36028797018963968;
y = 36028797018963972;
x == y
ans =
1
Integers have available precisions of 8-bit, 16-bit, 32-bit, and 64-bit. Storing
the same numbers as 64-bit integers preserves precision:
x = uint64(36028797018963968);
y = uint64(36028797018963972);
x == y
ans =
2-11
2 Language Fundamentals
0
MATLAB software stores the real and imaginary parts of a complex number.
It handles the magnitude of the parts in different ways depending on the
context. For instance, the sort function sorts based on magnitude and
resolves ties by phase angle.
sort([3+4i, 4+3i])
ans =
4.0000 + 3.0000i 3.0000 + 4.0000i
This is because of the phase angle:
angle(3+4i)
ans =
0.9273
angle(4+3i)
ans =
0.6435
The “equal to” relational operator == requires both the real and imaginary
parts to be equal. The other binary relational operators > <, >=, and <= ignore
the imaginary part of the number and consider the real part only.
Matrix Operators
Expressions use familiar arithmetic operators and precedence rules.
+ Addition
- Subtraction
* Multiplication
/ Division
\ Left division
^ Power
' Complex conjugate transpose
( ) Specify evaluation order
2-12
Expressions
Array Operators
When they are taken away from the world of linear algebra, matrices become
two-dimensional numeric arrays. Arithmetic operations on arrays are
done element by element. This means that addition and subtraction are
the same for arrays and matrices, but that multiplicative operations are
different. MATLAB uses a dot, or decimal point, as part of the notation for
multiplicative array operations.
The list of operators includes
+ Addition
- Subtraction
.* Element-by-element multiplication
./ Element-by-element division
.\ Element-by-element left division
.^ Element-by-element power
.' Unconjugated array transpose
If the Dürer magic square is multiplied by itself with array multiplication
A.*A
the result is an array containing the squares of the integers from 1 to 16,
in an unusual order:
ans =
256 9 4 169
25 100 121 64
81 36 49 144
16 225 196 1
Building Tables
Array operations are useful for building tables. Suppose n is the column vector
n = (0:9)';
2-13
2 Language Fundamentals
Then
pows = [n n.^2 2.^n]
builds a table of squares and powers of 2:
pows =
0 0 1
1 1 2
2 4 4
3 9 8
4 16 16
5 25 32
6 36 64
7 49 128
8 64 256
9 81 512
The elementary math functions operate on arrays element by element. So
format short g
x = (1:0.1:2)';
logs = [x log10(x)]
builds a table of logarithms.
logs =
1.0 0
1.1 0.04139
1.2 0.07918
1.3 0.11394
1.4 0.14613
1.5 0.17609
1.6 0.20412
1.7 0.23045
1.8 0.25527
1.9 0.27875
2.0 0.30103
2-14
Expressions
Functions
MATLAB provides a large number of standard elementary mathematical
functions, including abs, sqrt, exp, and sin. Taking the square root or
logarithm of a negative number is not an error; the appropriate complex result
is produced automatically. MATLAB also provides many more advanced
mathematical functions, including Bessel and gamma functions. Most of
these functions accept complex arguments. For a list of the elementary
mathematical functions, type
help elfun
For a list of more advanced mathematical and matrix functions, type
help specfun
help elmat
Some of the functions, like sqrt and sin, are built in. Built-in functions are
part of the MATLAB core so they are very efficient, but the computational
details are not readily accessible. Other functions are implemented in the
MATLAB programing language, so their computational details are accessible.
There are some differences between built-in functions and other functions.
For example, for built-in functions, you cannot see the code. For other
functions, you can see the code and even modify it if you want.
Several special functions provide values of useful constants.
pi 3.14159265...
i
Imaginary unit, 1
j Same as i
eps
Floating-point relative precision,   2 52
realmin
Smallest floating-point number, 2 1022
realmax
Largest floating-point number, ( )2 21023 
2-15
2 Language Fundamentals
Inf Infinity
NaN Not-a-number
Infinity is generated by dividing a nonzero value by zero, or by evaluating
well defined mathematical expressions that overflow, that is, exceed realmax.
Not-a-number is generated by trying to evaluate expressions like 0/0 or
Inf-Inf that do not have well defined mathematical values.
The function names are not reserved. It is possible to overwrite any of them
with a new variable, such as
eps = 1.e-6
and then use that value in subsequent calculations. The original function
can be restored with
clear eps
Examples of Expressions
You have already seen several examples of MATLAB expressions. Here are a
few more examples, and the resulting values:
rho = (1+sqrt(5))/2
rho =
1.6180
a = abs(3+4i)
a =
5
z = sqrt(besselk(4/3,rho-i))
z =
0.3730+ 0.3214i
huge = exp(log(realmax))
huge =
1.7977e+308
toobig = pi*huge
2-16
Expressions
toobig =
Inf
2-17
2 Language Fundamentals
Entering Commands
In this section...
“The format Function” on page 2-18
“Suppressing Output” on page 2-19
“Entering Long Statements” on page 2-20
“Command Line Editing” on page 2-20
The format Function
The format function controls the numeric format of the values displayed. The
function affects only how numbers are displayed, not how MATLAB software
computes or saves them. Here are the different formats, together with the
resulting output produced from a vector x with components of different
magnitudes.
Note To ensure proper spacing, use a fixed-width font, such as Courier.
x = [4/3 1.2345e-6]
format short
1.3333 0.0000
format short e
1.3333e+000 1.2345e-006
format short g
1.3333 1.2345e-006
format long
1.33333333333333 0.00000123450000
2-18
Entering Commands
format long e
1.333333333333333e+000 1.234500000000000e-006
format long g
1.33333333333333 1.2345e-006
format bank
1.33 0.00
format rat
4/3 1/810045
format hex
3ff5555555555555 3eb4b6231abfd271
If the largest element of a matrix is larger than 103 or smaller than 10-3,
MATLAB applies a common scale factor for the short and long formats.
In addition to the format functions shown above
format compact
suppresses many of the blank lines that appear in the output. This lets you
view more information on a screen or window. If you want more control over
the output format, use the sprintf and fprintf functions.
Suppressing Output
If you simply type a statement and press Return or Enter, MATLAB
automatically displays the results on screen. However, if you end the line
with a semicolon, MATLAB performs the computation, but does not display
any output. This is particularly useful when you generate large matrices.
For example,
A = magic(100);
2-19
2 Language Fundamentals
Entering Long Statements
If a statement does not fit on one line, use an ellipsis (three periods), ...,
followed by Return or Enter to indicate that the statement continues on
the next line. For example,
s = 1 -1/2 + 1/3 -1/4 + 1/5 - 1/6 + 1/7 ...
- 1/8 + 1/9 - 1/10 + 1/11 - 1/12;
Blank spaces around the =, +, and - signs are optional, but they improve
readability.
Command Line Editing
Variousarrow and control keys on your keyboard allow you to recall, edit,
and reuse statements you have typed earlier. For example, suppose you
mistakenly enter
rho = (1 + sqt(5))/2
You have misspelled sqrt. MATLAB responds with
Undefined function 'sqt' for input arguments of type 'double'.
Instead of retyping the entire line, simply press the ↑ key. The statement
you typed is redisplayed. Use the ← key to move the cursor over and insert
the missing r. Repeated use of the ↑ key recalls earlier lines. Typing a few
characters, and then pressing the ↑ key finds a previous line that begins with
those characters. You can also copy previously executed statements from
the Command History.
2-20
Indexing
Indexing
In this section...
“Subscripts” on page 2-21
“The Colon Operator” on page 2-22
“Concatenation” on page 2-23
“Deleting Rows and Columns” on page 2-24
“Scalar Expansion” on page 2-25
“Logical Subscripting” on page 2-26
“The find Function” on page 2-27
Subscripts
The element in row i and column j of A is denoted by A(i,j). For example,
A(4,2) is the number in the fourth row and second column. For the magic
square, A(4,2) is 15. So to compute the sum of the elements in the fourth
column of A, type
A(1,4) + A(2,4) + A(3,4) + A(4,4)
This subscript produces
ans =
34
but is not the most elegant way of summing a single column.
It is also possible to refer to the elements of a matrix with a single subscript,
A(k). A single subscript is the usual way of referencing row and column
vectors. However, it can also apply to a fully two-dimensional matrix, in
which case the array is regarded as one long column vector formed from the
columns of the original matrix. So, for the magic square, A(8) is another way
of referring to the value 15 stored in A(4,2).
If you try to use the value of an element outside of the matrix, it is an error:
t = A(4,5)
2-21
2 Language Fundamentals
Index exceeds matrix dimensions.
Conversely, if you store a value in an element outside of the matrix, the size
increases to accommodate the newcomer:
X = A;
X(4,5) = 17
X =
16 3 2 13 0
5 10 11 8 0
9 6 7 12 0
4 15 14 1 17
The Colon Operator
The colon, :, is one of the most important MATLAB operators. It occurs in
several different forms. The expression
1:10
is a row vector containing the integers from 1 to 10:
1 2 3 4 5 6 7 8 9 10
To obtain nonunit spacing, specify an increment. For example,
100:-7:50
is
100 93 86 79 72 65 58 51
and
0:pi/4:pi
is
0 0.7854 1.5708 2.3562 3.1416
Subscript expressions involving colons refer to portions of a matrix:
A(1:k,j)
2-22
Indexing
is the first k elements of the jth column of A. Thus,
sum(A(1:4,4))
computes the sum of the fourth column. However, there is a better way to
perform this computation. The colon by itself refers to all the elements in
a row or column of a matrix and the keyword end refers to the last row or
column. Thus,
sum(A(:,end))
computes the sum of the elements in the last column of A:
ans =
34
Why is the magic sum for a 4-by-4 square equal to 34? If the integers from 1
to 16 are sorted into four groups with equal sums, that sum must be
sum(1:16)/4
which, of course, is
ans =
34
Concatenation
Concatenation is the process of joining small matrices to make bigger ones. In
fact, you made your first matrix by concatenating its individual elements. The
pair of square brackets, [], is the concatenation operator. For an example,
start with the 4-by-4 magic square, A, and form
B = [A A+32; A+48 A+16]
The result is an 8-by-8 matrix, obtained by joining the four submatrices:
2-23
2 Language Fundamentals
B =
16 3 2 13 48 35 34 45
5 10 11 8 37 42 43 40
9 6 7 12 41 38 39 44
4 15 14 1 36 47 46 33
64 51 50 61 32 19 18 29
53 58 59 56 21 26 27 24
57 54 55 60 25 22 23 28
52 63 62 49 20 31 30 17
This matrix is halfway to being another magic square. Its elements are a
rearrangement of the integers 1:64. Its column sums are the correct value
for an 8-by-8 magic square:
sum(B)
ans =
260 260 260 260 260 260 260 260
But its row sums, sum(B')', are not all the same. Further manipulation is
necessary to make this a valid 8-by-8 magic square.
Deleting Rows and Columns
You can delete rows and columns from a matrix using just a pair of square
brackets. Start with
X = A;
Then, to delete the second column of X, use
X(:,2) = []
This changes X to
X =
16 2 13
5 11 8
9 7 12
4 14 1
2-24
Indexing
If you delete a single element from a matrix, the result is not a matrix
anymore. So, expressions like
X(1,2) = []
result in an error. However, using a single subscript deletes a single element,
or sequence of elements, and reshapes the remaining elements into a row
vector. So
X(2:2:10) = []
results in
X =
16 9 2 7 13 12 1
Scalar Expansion
Matrices and scalars can be combined in several different ways. For example,
a scalar is subtracted from a matrix by subtracting it from each element. The
average value of the elements in our magic square is 8.5, so
B = A - 8.5
forms a matrix whose column sums are zero:
B =
7.5 -5.5 -6.5 4.5
-3.5 1.5 2.5 -0.5
0.5 -2.5 -1.5 3.5
-4.5 6.5 5.5 -7.5
sum(B)
ans =
0 0 0 0
With scalar expansion, MATLAB assigns a specified scalar to all indices in a
range. For example,
B(1:2,2:3) = 0
zeros out a portion of B:
2-25
2 Language Fundamentals
B =
7.5 0 0 4.5
-3.5 0 0 -0.5
0.5 -2.5 -1.5 3.5
-4.5 6.5 5.5 -7.5
Logical Subscripting
The logical vectors created from logical and relational operations can be used
to reference subarrays. Suppose X is an ordinary matrix and L is a matrix of
the same size that is the result of some logical operation. Then X(L) specifies
the elements of X where the elements of L are nonzero.
This kind of subscripting can be done in one step by specifying the logical
operation as the subscripting expression. Suppose you have the following
set of data:
x = [2.1 1.7 1.6 1.5 NaN 1.9 1.8 1.5 5.1 1.8 1.4 2.2 1.6 1.8];
The NaN is a marker for a missing observation, such as a failure to respond to
an item on a questionnaire. To remove the missing data with logical indexing,
use isfinite(x), which is true for all finite numerical values and false for
NaN and Inf:
x = x(isfinite(x))
x =
2.1 1.7 1.6 1.5 1.9 1.8 1.5 5.1 1.8 1.4 2.2 1.6 1.8
Now there is one observation, 5.1, which seems to be very different from the
others. It is an outlier. The following statement removes outliers, in this case
those elements more than three standard deviations from the mean:
x = x(abs(x-mean(x)) <= 3*std(x))
x =
2.1 1.7 1.6 1.5 1.9 1.8 1.5 1.8 1.4 2.2 1.6 1.8
For another example, highlight the location of the prime numbers in Dürer’s
magic square by using logical indexing and scalar expansion to set the
nonprimes to 0. (See “The magic Function” on page 2-7.)
A(~isprime(A)) = 0
2-26
Indexing
A =
0 3 2 13
5 0 11 0
0 0 7 0
0 0 0 0
The find Function
The find function determines the indices of array elements that meet a given
logical condition. In its simplest form, find returns a column vector of indices.
Transpose that vector to obtain a row vector of indices. For example, start
again with Dürer’s magic square. (See “The magic Function” on page 2-7.)
k = find(isprime(A))'
picks out the locations, using one-dimensional indexing, of the primes in the
magic square:
k =
2 5 9 10 11 13
Display those primes, as a row vector in the order determined by k, with
A(k)
ans =
5 3 2 11 7 13
When you use k as a left-side index in an assignment statement, the matrix
structure is preserved:
A(k) = NaN
A =
16 NaN NaN NaN
NaN 10 NaN 8
9 6 NaN 12
4 15 14 1
2-27
2 Language Fundamentals
Types of Arrays
In this section...
“Multidimensional Arrays” on page 2-28
“Cell Arrays” on page 2-30
“Characters and Text” on page 2-32
“Structures” on page 2-35
Multidimensional Arrays
Multidimensional arrays in the MATLAB environment are arrays with more
than two subscripts. One way of creating a multidimensional array is by
calling zeros, ones, rand, or randn with more than two arguments. For
example,
R = randn(3,4,5);
creates a 3-by-4-by-5array with a total of 3*4*5 = 60 normally distributed
random elements.
A three-dimensional array might represent three-dimensional physical data,
say the temperature in a room, sampled on a rectangular grid. Or it might
represent a sequence of matrices, A(k), or samples of a time-dependent matrix,
A(t). In these latter cases, the (i, j)th element of the kth matrix, or the tkth
matrix, is denoted by A(i,j,k).
MATLAB and Dürer’s versions of the magic square of order 4 differ by an
interchange of two columns. Many different magic squares can be generated
by interchanging columns. The statement
p = perms(1:4);
generates the 4! = 24 permutations of 1:4. The kth permutation is the row
vector p(k,:). Then
A = magic(4);
M = zeros(4,4,24);
2-28
Types of Arrays
for k = 1:24
M(:,:,k) = A(:,p(k,:));
end
stores the sequence of 24 magic squares in a three-dimensional array, M. The
size of M is
size(M)
ans =
4 4 24
Note The order of the matrices shown in this illustration might differ from
your results. The perms function always returns all permutations of the input
vector, but the order of the permutations might be different for different
MATLAB versions.
The statement
sum(M,d)
computes sums by varying the dth subscript. So
sum(M,1)
2-29
2 Language Fundamentals
is a 1-by-4-by-24 array containing 24 copies of the row vector
34 34 34 34
and
sum(M,2)
is a 4-by-1-by-24 array containing 24 copies of the column vector
34
34
34
34
Finally,
S = sum(M,3)
adds the 24 matrices in the sequence. The result has size 4-by-4-by-1, so
it looks like a 4-by-4 array:
S =
204 204 204 204
204 204 204 204
204 204 204 204
204 204 204 204
Cell Arrays
Cell arrays in MATLAB are multidimensional arrays whose elements are
copies of other arrays. A cell array of empty matrices can be created with
the cell function. But, more often, cell arrays are created by enclosing a
miscellaneous collection of things in curly braces, {}. The curly braces are
also used with subscripts to access the contents of various cells. For example,
C = {A sum(A) prod(prod(A))}
produces a 1-by-3 cell array. The three cells contain the magic square, the
row vector of column sums, and the product of all its elements. When C
is displayed, you see
C =
2-30
Types of Arrays
[4x4 double] [1x4 double] [20922789888000]
This is because the first two cells are too large to print in this limited space,
but the third cell contains only a single number, 16!, so there is room to
print it.
Here are two important points to remember. First, to retrieve the contents of
one of the cells, use subscripts in curly braces. For example, C{1} retrieves
the magic square and C{3} is 16!. Second, cell arrays contain copies of other
arrays, not pointers to those arrays. If you subsequently change A, nothing
happens to C.
You can use three-dimensional arrays to store a sequence of matrices of the
same size. Cell arrays can be used to store a sequence of matrices of different
sizes. For example,
M = cell(8,1);
for n = 1:8
M{n} = magic(n);
end
M
produces a sequence of magic squares of different order:
M =
[ 1]
[ 2x2 double]
[ 3x3 double]
[ 4x4 double]
[ 5x5 double]
[ 6x6 double]
[ 7x7 double]
[ 8x8 double]
2-31
2 Language Fundamentals
You can retrieve the 4-by-4 magic square matrix with
M{4}
Characters and Text
Enter text into MATLAB using single quotes. For example,
s = 'Hello'
The result is not the same kind of numeric matrix or array you have been
dealing with up to now. It is a 1-by-5 character array.
2-32
Types of Arrays
Internally, the characters are stored as numbers, but not in floating-point
format. The statement
a = double(s)
converts the character array to a numeric matrix containing floating-point
representations of the ASCII codes for each character. The result is
a =
72 101 108 108 111
The statement
s = char(a)
reverses the conversion.
Converting numbers to characters makes it possible to investigate the various
fonts available on your computer. The printable characters in the basic ASCII
character set are represented by the integers 32:127. (The integers less than
32 represent nonprintable control characters.) These integers are arranged in
an appropriate 6-by-16 array with
F = reshape(32:127,16,6)';
The printable characters in the extended ASCII character set are represented
by F+128. When these integers are interpreted as characters, the result
depends on the font currently being used. Type the statements
char(F)
char(F+128)
and then vary the font being used for the Command Window. To
change the font, on the Home tab, in the Environment section, click
Preferences > Fonts. If you include tabs in lines of code, use a fixed-width
font, such as Monospaced, to align the tab positions on different lines.
Concatenation with square brackets joins text variables together into larger
strings. The statement
h = [s, ' world']
2-33
2 Language Fundamentals
joins the strings horizontally and produces
h =
Hello world
The statement
v = [s; 'world']
joins the strings vertically and produces
v =
Hello
world
Notice that a blank has to be inserted before the 'w' in h and that both words
in v have to have the same length. The resulting arrays are both character
arrays; h is 1-by-11 and v is 2-by-5.
To manipulate a body of text containing lines of different lengths, you have
two choices—a padded character array or a cell array of strings. When
creating a character array, you must make each row of the array the same
length. (Pad the ends of the shorter rows with spaces.) The char function does
this padding for you. For example,
S = char('A','rolling','stone','gathers','momentum.')
produces a 5-by-9 character array:
S =
A
rolling
stone
gathers
momentum.
Alternatively, you can store the text in a cell array. For example,
C = {'A';'rolling';'stone';'gathers';'momentum.'}
creates a 5-by-1 cell array that requires no padding because each row of the
array can have a different length:
2-34
Types of Arrays
C =
'A'
'rolling'
'stone'
'gathers'
'momentum.'
You can convert a padded character array to a cell array of strings with
C = cellstr(S)
and reverse the process with
S = char(C)
Structures
Structures are multidimensional MATLAB arrays with elements accessed by
textual field designators. For example,
S.name = 'Ed Plum';
S.score = 83;
S.grade = 'B+'
creates a scalar structure with three fields:
S =
name: 'Ed Plum'
score: 83
grade: 'B+'
Like everything else in the MATLAB environment, structures are arrays, so
you can insert additional elements. In this case, each element of the array is a
structure with several fields. The fields can be added one at a time,
S(2).name = 'Toni Miller';
S(2).score = 91;
S(2).grade = 'A-';
or an entire element can be added with a single statement:
S(3) = struct('name','Jerry Garcia',...
'score',70,'grade','C')
2-35
2 Language Fundamentals
Now the structure is large enough that only a summary is printed:
S =
1x3 struct array with fields:
name
score
grade
There are several ways to reassemble the various fields into other MATLAB
arrays. They are mostly based on the notation of a comma-separated list. If
you type
S.score
it is the same as typing
S(1).score, S(2).score, S(3).score
which is a comma-separated list.
If you enclose the expression that generates such a list within square
brackets, MATLAB stores each item from the list in an array. In this example,
MATLAB creates a numeric row vector containing the score field of each
element of structure array S:
scores = [S.score]
scores =
83 91 70
avg_score = sum(scores)/length(scores)
avg_score =
81.3333
To create a character array from one of the text fields (name, for example), call
the char function on the comma-separated list produced by S.name:
names = char(S.name)
names =
Ed Plum
Toni Miller
Jerry Garcia
2-36
Types of Arrays
Similarly, you can create a cell array from the name fields by enclosing the
list-generating expression within curly braces:
names = {S.name}
names =
'Ed Plum' 'Toni Miller' 'JerryGarcia'
To assign the fields of each element of a structure array to separate variables
outside of the structure, specify each output to the left of the equals sign,
enclosing them all within square brackets:
[N1 N2 N3] = S.name
N1 =
Ed Plum
N2 =
Toni Miller
N3 =
Jerry Garcia
Dynamic Field Names
The most common way to access the data in a structure is by specifying the
name of the field that you want to reference. Another means of accessing
structure data is to use dynamic field names. These names express the
field as a variable expression that MATLAB evaluates at run time. The
dot-parentheses syntax shown here makes expression a dynamic field name:
structName.(expression)
Index into this field using the standard MATLAB indexing syntax. For
example, to evaluate expression into a field name and obtain the values of
that field at columns 1 through 25 of row 7, use
structName.(expression)(7,1:25)
Dynamic Field Names Example. The avgscore function shown below
computes an average test score, retrieving information from the testscores
structure using dynamic field names:
function avg = avgscore(testscores, student, first, last)
for k = first:last
scores(k) = testscores.(student).week(k);
2-37
2 Language Fundamentals
end
avg = sum(scores)/(last - first + 1);
You can run this function using different values for the dynamic field student.
First, initialize the structure that contains scores for a 25-week period:
testscores.Ann_Lane.week(1:25) = ...
[95 89 76 82 79 92 94 92 89 81 75 93 ...
85 84 83 86 85 90 82 82 84 79 96 88 98];
testscores.William_King.week(1:25) = ...
[87 80 91 84 99 87 93 87 97 87 82 89 ...
86 82 90 98 75 79 92 84 90 93 84 78 81];
Now run avgscore, supplying the students name fields for the testscores
structure at run time using dynamic field names:
avgscore(testscores, 'Ann_Lane', 7, 22)
ans =
85.2500
avgscore(testscores, 'William_King', 7, 22)
ans =
87.7500
2-38
3
Mathematics
• “Linear Algebra” on page 3-2
• “Operations on Nonlinear Functions” on page 3-44
• “Multivariate Data” on page 3-47
• “Data Analysis” on page 3-48
3 Mathematics
Linear Algebra
In this section...
“Matrices in the MATLAB Environment” on page 3-2
“Systems of Linear Equations” on page 3-11
“Inverses and Determinants” on page 3-22
“Factorizations” on page 3-26
“Powers and Exponentials” on page 3-34
“Eigenvalues” on page 3-37
“Singular Values” on page 3-40
Matrices in the MATLAB Environment
• “Creating Matrices” on page 3-2
• “Adding and Subtracting Matrices” on page 3-4
• “Vector Products and Transpose” on page 3-5
• “Multiplying Matrices” on page 3-7
• “Identity Matrix” on page 3-9
• “Kronecker Tensor Product” on page 3-9
• “Vector and Matrix Norms” on page 3-10
• “Using Multithreaded Computation with Linear Algebra Functions” on
page 3-11
Creating Matrices
The MATLAB environment uses the term matrix to indicate a variable
containing real or complex numbers arranged in a two-dimensional grid.
An array is, more generally, a vector, matrix, or higher dimensional grid
of numbers. All arrays in MATLAB are rectangular, in the sense that the
component vectors along any dimension are all the same length.
3-2
Linear Algebra
Symbolic Math Toolbox™ software extends the capabilities of MATLAB
software to matrices of mathematical expressions.
MATLAB has dozens of functions that create different kinds of matrices.
There are two functions you can use to create a pair of 3-by-3 example
matrices for use throughout this chapter. The first example is symmetric:
A = pascal(3)
A =
1 1 1
1 2 3
1 3 6
The second example is not symmetric:
B = magic(3)
B =
8 1 6
3 5 7
4 9 2
Another example is a 3-by-2 rectangular matrix of random integers:
C = fix(10*rand(3,2))
C =
9 4
2 8
6 7
A column vector is an m-by-1 matrix, a row vector is a 1-by-n matrix, and a
scalar is a 1-by-1 matrix. The statements
u = [3; 1; 4]
v = [2 0 -1]
s = 7
3-3
3 Mathematics
produce a column vector, a row vector, and a scalar:
u =
3
1
4
v =
2 0 -1
s =
7
Adding and Subtracting Matrices
Addition and subtraction of matrices is defined just as it is for arrays, element
by element. Adding A to B, and then subtracting A from the result recovers B:
A = pascal(3);
B = magic(3);
X = A + B
X =
9 2 7
4 7 10
5 12 8
Y = X - A
Y =
8 1 6
3 5 7
4 9 2
Addition and subtraction require both matrices to have the same dimension, or
one of them be a scalar. If the dimensions are incompatible, an error results:
3-4
Linear Algebra
C = fix(10*rand(3,2))
X = A + C
Error using plus
Matrix dimensions must agree.
w = v + s
w =
9 7 6
Vector Products and Transpose
A row vector and a column vector of the same length can be multiplied in
either order. The result is either a scalar, the inner product, or a matrix,
the outer product :
u = [3; 1; 4];
v = [2 0 -1];
x = v*u
x =
2
X = u*v
X =
6 0 -3
2 0 -1
8 0 -4
For real matrices, the transpose operation interchanges aij and aji. MATLAB
uses the apostrophe operator (') to perform a complex conjugate transpose,
and uses the dot-apostrophe operator (.') to transpose without conjugation.
For matrices containing all real elements, the two operators return the same
result.
The example matrix A is symmetric, so A' is equal to A. But, B is not symmetric:
B = magic(3);
X = B'
X =
3-5
3 Mathematics
8 3 4
1 5 9
6 7 2
Transposition turns a row vector into a column vector:
x = v'
x =
2
0
-1
If x and y are both real column vectors, the product x*y is not defined, but
the two products
x'*y
and
y'*x
are the same scalar. This quantity is used so frequently, it has three different
names: inner product, scalar product, or dot product.
For a complex vector or matrix, z, the quantity z' not only transposes the
vector or matrix, but also converts each complex element to its complex
conjugate. That is, the sign of the imaginary part of each complex element
changes. So if
z = [1+2i 7-3i 3+4i; 6-2i 9i 4+7i]
z =
1.0000 + 2.0000i 7.0000 - 3.0000i 3.0000 + 4.0000i
6.0000 - 2.0000i 0 + 9.0000i 4.0000 + 7.0000i
then
z'
ans =
1.0000 - 2.0000i 6.0000 + 2.0000i
7.0000 + 3.0000i 0 - 9.0000i
3.0000 - 4.0000i 4.0000 - 7.0000i
3-6
Linear Algebra
The unconjugated complex transpose, where the complex part of each element
retains its sign, is denoted by z.':
z.'
ans =
1.0000 + 2.0000i 6.0000 - 2.0000i
7.0000 - 3.0000i 0 + 9.0000i
3.0000 + 4.0000i 4.0000 + 7.0000i
For complex vectors, the two scalar products x'*y and y'*x are complex
conjugates of each other, and the scalar product x'*x of a complex vector
with itself is real.
Multiplying Matrices
Multiplication of matrices is defined in a way that reflects composition of
the underlying linear transformations and allows compact representation of
systems of simultaneous linear equations. The matrix product C = AB is
defined when the column dimension of A is equal to the row dimension of B,
or when one of them is a scalar. If A is m-by-p and B is p-by-n, their product
C is m-by-n. The product can actually be defined using MATLAB for loops,
colon notation, and vector dot products:
A = pascal(3);
B = magic(3);
m = 3; n = 3;
for i = 1:m
for j = 1:n
C(i,j) = A(i,:)*B(:,j);
end
end
MATLAB uses a single asterisk to denote matrix multiplication. The next two
examples illustrate the fact that matrix multiplication is not commutative;
AB is usually not equal to BA:
X = A*B
X =
15 15 15
26 38 26
3-7
3 Mathematics
41 70 39
Y = B*A
Y =
15 28 47
15 34 60
15 28 43
A matrix can be multiplied on the right by a column vector and on the left
by a row vector:
u = [3; 1; 4];
x = A*u
x =
8
17
30
v = [2 0 -1];
y = v*B
y =
12 -7 10
Rectangular matrix multiplications must satisfy the dimension compatibility
conditions:
C = fix(10*rand(3,2));
X = A*C
X =
17 19
31 41
51 70
Y = C*A
Error using mtimes
Inner matrix dimensions must agree.
3-8
Linear Algebra
Anything can be multiplied by a scalar:
s = 7;
w = s*v
w =
14 0 -7
Identity Matrix
Generally accepted mathematical notation uses the capital letter I to denote
identity matrices,matrices of various sizes with ones on the main diagonal
and zeros elsewhere. These matrices have the property that AI = A and IA = A
whenever the dimensions are compatible. The original version of MATLAB
could not use I for this purpose because it did not distinguish between
uppercase and lowercase letters and i already served as a subscript and as the
complex unit. So an English language pun was introduced. The function
eye(m,n)
returns an m-by-n rectangular identity matrix and eye(n) returns an n-by-n
square identity matrix.
Kronecker Tensor Product
The Kronecker product, kron(X,Y), of two matrices is the larger matrix
formed from all possible products of the elements of X with those of Y. If X
is m-by-n and Y is p-by-q, then kron(X,Y) is mp-by-nq. The elements are
arranged in the following order:
[X(1,1)*Y X(1,2)*Y . . . X(1,n)*Y
. . .
X(m,1)*Y X(m,2)*Y . . . X(m,n)*Y]
The Kronecker product is often used with matrices of zeros and ones to build
up repeated copies of small matrices. For example, if X is the 2-by-2 matrix
X =
1 2
3 4
and I = eye(2,2) is the 2-by-2 identity matrix, then the two matrices
3-9
3 Mathematics
kron(X,I)
and
kron(I,X)
are
1 0 2 0
0 1 0 2
3 0 4 0
0 3 0 4
and
1 2 0 0
3 4 0 0
0 0 1 2
0 0 3 4
Vector and Matrix Norms
The p-norm of a vector x,
x xp i
p p
= ( )∑ 1/ ,
is computed by norm(x,p). This is defined by any value of p > 1, but the
most common values of p are 1, 2, and ∞. The default value is p = 2, which
corresponds to Euclidean length:
v = [2 0 -1];
[norm(v,1) norm(v) norm(v,inf)]
ans =
3.0000 2.2361 2.0000
The p-norm of a matrix A,
A
Ax
x
p
x
p
p
= max ,
3-10
Linear Algebra
can be computed for p = 1, 2, and ∞ by norm(A,p). Again, the default value
is p = 2:
C = fix(10*rand(3,2));
[norm(C,1) norm(C) norm(C,inf)]
ans =
19.0000 14.8015 13.0000
Using Multithreaded Computation with Linear Algebra
Functions
MATLAB software supports multithreaded computation for a number
of linear algebra and element-wise numerical functions. These functions
automatically execute on multiple threads. For a function or expression to
execute faster on multiple CPUs, a number of conditions must be true:
1 The function performs operations that easily partition into sections that
execute concurrently. These sections must be able to execute with little
communication between processes. They should require few sequential
operations.
2 The data size is large enough so that any advantages of concurrent
execution outweigh the time required to partition the data and manage
separate execution threads. For example, most functions speed up only
when the array contains than several thousand elements or more.
3 The operation is not memory-bound; processing time is not dominated by
memory access time. As a general rule, complex functions speed up more
than simple functions.
The matrix multiply (X*Y) and matrix power (X^p) operators show
significant increase in speed on large double-precision arrays (on order of
10,000 elements). The matrix analysis functions det, rcond, hess, and expm
also show significant increase in speed on large double-precision arrays.
Systems of Linear Equations
• “Computational Considerations” on page 3-12
3-11
3 Mathematics
• “The mldivide Algorithm” on page 3-13
• “General Solution” on page 3-14
• “Square Systems” on page 3-15
• “Overdetermined Systems” on page 3-17
• “Using Multithreaded Computation with Systems of Linear Equations”
on page 3-20
• “Iterative Methods for Solving Systems of Linear Equations” on page 3-21
Computational Considerations
One of the most important problems in technical computing is the solution of
systems of simultaneous linear equations.
In matrix notation, the general problem takes the following form: Given two
matrices A and B, does there exist a unique matrix X so that AX = B or XA = B?
It is instructive to consider a 1-by-1 example. For example, does the equation
7x = 21
have a unique solution?
The answer, of course, is yes. The equation has the unique solution x = 3. The
solution is easily obtained by division:
x = 21/7 = 3.
The solution is not ordinarily obtained by computing the inverse of 7, that is
7–1 = 0.142857..., and then multiplying 7–1 by 21. This would be more work
and, if 7–1 is represented to a finite number of digits, less accurate. Similar
considerations apply to sets of linear equations with more than one unknown;
the MATLAB software solves such equations without computing the inverse
of the matrix.
Although it is not standard mathematical notation, MATLAB uses the
division terminology familiar in the scalar case to describe the solution of a
general system of simultaneous equations. The two division symbols, slash, /,
and backslash, \, correspond to the two MATLAB functions mldivide and
3-12
Linear Algebra
mrdivide. mldivide and mrdivide are used for the two situations where the
unknown matrix appears on the left or right of the coefficient matrix:
X = B/A Denotes the solution to the matrix equation
XA = B.
X = A\B Denotes the solution to the matrix equation
AX = B.
Think of “dividing” both sides of the equation AX = B or XA = B by A. The
coefficient matrix A is always in the “denominator.”
The dimension compatibility conditions for X = A\B require the two matrices
A and B to have the same number of rows. The solution X then has the
same number of columns as B and its row dimension is equal to the column
dimension of A. For X = B/A, the roles of rows and columns are interchanged.
In practice, linear equations of the form AX = B occur more frequently than
those of the form XA = B. Consequently, the backslash is used far more
frequently than the slash. The remainder of this section concentrates on the
backslash operator; the corresponding properties of the slash operator can
be inferred from the identity:
(B/A)' = (A'\B')
The coefficient matrix A need not be square. If A is m-by-n, there are three
cases:
m = n Square system. Seek an exact solution.
m > n Overdetermined system. Find a least-squares
solution.
m < n Underdetermined system. Find a basic solution
with at most m nonzero components.
The mldivide Algorithm
The mldivide operator employs different algorithms to handle different kinds
of coefficient matrices. The various cases are diagnosed automatically by
examining the coefficient matrix.
3-13
3 Mathematics
Permutations of Triangular Matrices. mldivide checks for triangularity
by testing for zero elements. If a matrix A is triangular, MATLAB software
uses a substitution to compute the solution vector x. If A is a permutation of a
triangular matrix, MATLAB software uses a permuted substitution algorithm.
Square Matrices. If A is symmetric and has real, positive diagonal elements,
MATLAB attempts a Cholesky factorization. If the Cholesky factorization
fails, MATLAB performs a symmetric, indefinite factorization. If A is upper
Hessenberg, MATLAB uses Gaussian elimination to reduce the system
to a triangular matrix. If A is square but is neither permuted triangular,
symmetric and positive definite, or Hessenberg, then MATLAB performs a
general triangular factorization using LU factorization with partial pivoting
(see the lu reference page).
Rectangular Matrices. If A is rectangular, mldivide returns a least-squares
solution. MATLAB solves overdetermined systems with QR factorization (see
the qr reference page). For an underdetermined system, MATLAB returns
the solution with the maximum number of zero elements.
The mldivide function reference page contains a more detailed description
of the algorithm.
General Solution
The general solution to a system of linear equations AX = b describes all
possible solutions. You can find the general solution by:
1 Solving the corresponding homogeneous system AX = 0. Do this using the
null command, by typing null(A). This returns a basis for the solution
space to AX = 0. Any solution is a linear combination of basis vectors.
2 Finding a particular solution to the nonhomogeneous system AX = b.
You can then write

Continue navegando