MATLAB Programming: A Quick Start
Kinds of M-Files
What's in an M-File?
Providing Help for Your Programs
Creating M-Files: Accessing Text Editors
Scripts
Simple Script Example
Functions
Simple Function Example
Basic Parts of a Function M-File
How Functions Work
Checking the Number of Function Arguments
Passing Variable Numbers of Arguments
Subfunctions
Private Functions
Variables
Naming Variables
Local Variables
Global Variables
Persistent Variables
Special Values
Data Types
Operators
Arithmetic Operators
Relational Operators
Logical Operators
Operator Precedence
Keywords
Flow Control
if, else, and elseif
switch
while
for
continue
break
try ... catch
return
String Evaluation
eval
feval
Dates and Times
Date Formats
Current Date and Time
Calling Functions
Function Syntax
Command Syntax
Passing Arguments
Obtaining User Input
Prompting for Keyboard Input
Pausing During Execution
Subscripting and Indexing
Subscripting
Advanced Indexing
Empty Matrices
Operating on an Empty Matrix
Using Empty Matrices with If or While
Errors and Warnings
Checking for Errors with try-catch
Handling and Recovering from an Error
Warnings
Message Identifiers
Using Message Identifiers with lasterr
Warning Control
Debugging Errors and Warnings
Shell Escape Functions
Using MATLAB Timers
Creating and Deleting Timer Objects
Timer Object Properties
Starting and Stopping Timers
Timer Object Execution Modes
Creating Timer Callback Functions
Character Arrays (Strings)
Function Summary
Character Arrays
Creating Character Arrays
Creating Two-Dimensional Character Arrays
Converting Characters to Numeric Values
Cell Arrays of Strings
Converting to a Cell Array of Strings
String/Numeric Conversion
String Comparisons
Comparing Strings For Equality
Comparing for Equality Using Operators
Categorizing Characters Within a String
Searching and Replacing
Regular Expressions
Metacharacters
Logical Operators
Quantifiers
Searching with Tokens
Numeric/String Conversion
Array/String Conversion
Multidimensional Arrays
Function Summary
Multidimensional Arrays
Creating Multidimensional Arrays
Accessing Multidimensional Array Properties
Indexing
Reshaping
Permuting Array Dimensions
Computing with Multidimensional Arrays
Operating on Vectors
Operating Element-by-Element
Operating on Planes and Matrices
Organizing Data in Multidimensional Arrays
Multidimensional Cell Arrays
Multidimensional Structure Arrays
Applying Functions to Multidimensional Structure Arrays
Structures and Cell Arrays
Function Summary
Structures
Building Structure Arrays
Accessing Data in Structure Arrays
Finding the size of Structure Arrays
Adding Fields to Structures
Deleting Fields from Structures
Applying Functions and Operators
Writing Functions to Operate on Structures
Organizing Data in Structure Arrays
Nesting Structures
Cell Arrays
Creating Cell Arrays
Obtaining Data from Cell Arrays
Deleting Cells
Reshaping Cell Arrays
Replacing Lists of Variables with Cell Arrays
Applying Functions and Operators
Organizing Data in Cell Arrays
Nesting Cell Arrays
Converting Between Cell and Numeric Arrays
Cell Arrays of Structures
Function Handles
Overview
Benefits of Using Function Handles
A Simple Function Handle
Constructing a Function Handle
Maximum Length of a Function Name
Evaluating a Function Through Its Handle
Function Evaluation and Overloading
Examples of Function Handle Evaluation
Displaying Function Handle Information
Fields Returned by the Functions Command
Types of Function Handles
Function Handle Operations
Converting Function Handles to Function Names
Converting Function Names to Function Handles
Testing for Data Type
Testing for Equality
Saving and Loading Function Handles
Handling Error Conditions
Handles to Nonexistent Functions
Including Path In the Function Handle Constructor
Evaluating a Nonscalar Function Handle
Historical Note - Evaluating Function Names
MATLAB Classes and Objects
Classes and Objects: An Overview
Features of Object-Oriented Programming
MATLAB Data Class Hierarchy
Creating Objects
Invoking Methods on Objects
Private Methods
Helper Functions
Debugging Class Methods
Setting Up Class Directories
Data Structure
Tips for C++ and Java Programmers
Designing User Classes in MATLAB
The MATLAB Canonical Class
The Class Constructor Method
Examples of Constructor Methods
Identifying Objects Outside the Class Directory
The display Method
Accessing Object Data
The set and get Methods
Indexed Reference Using subsref and subsasgn
Handling Subscripted Reference
Handling Subscripted Assignment
Object Indexing Within Methods
Defining end Indexing for an Object
Indexing an Object with Another Object
Converter Methods
Overloading Operators and Functions
Overloading Operators
Overloading Functions
Example -- A Polynomial Class
Polynom Data Structure
Polynom Methods
The Polynom Constructor Method
Converter Methods for the Polynom Class
The Polynom display Method
The Polynom subsref Method
Overloading Arithmetic Operators for polynom
Overloading Functions for the Polynom Class
Listing Class Methods
Building on Other Classes
Simple Inheritance
Multiple Inheritance
Aggregation
Example - Assets and Asset Subclasses
Inheritance Model for the Asset Class
Asset Class Design
Other Asset Methods
The Asset Constructor Method
The Asset get Method
The Asset set Method
The Asset subsref Method
The Asset subsasgn Method
The Asset display Method
The Asset fieldcount Method
Designing the Stock Class
The Stock Constructor Method
The Stock get Method
The Stock set Method
The Stock subsref Method
The Stock subsasgn Method
The Stock display Method
Example -- The Portfolio Container
Designing the Portfolio Class
The Portfolio Constructor Method
The Portfolio display Method
The Portfolio pie3 Method
Creating a Portfolio
Saving and Loading Objects
Modifying Objects During Save or Load
Example -- Defining saveobj and loadobj for Portfolio
Summary of Code Changes
The saveobj Method
The loadobj Method
Changing the Portfolio Constructor
The Portfolio subsref Method
Object Precedence
Specifying Precedence of User-Defined Classes
How MATLAB Determines Which Method to Call
Selecting a Method
Querying Which Method MATLAB Will Call
Maximizing MATLAB Performance
Techniques for Improving Performance
Analyzing Your Program's Performance
Vectorizing Loops
Preallocating Arrays
Other Ways to Speed Up Performance
Performance Acceleration
What MATLAB Accelerates
What MATLAB Does Not Accelerate
How Vectorizing and Preallocation Fit In
What to Avoid When Running MATLAB
Operating System Considerations
Sample Accelerated Programs
Program 1 -- Bayes' Rule
Program 2 -- Relaxation Algorithm
Program 3a -- Vector Comparison, with Loop
Program 3b -- Vector Comparison, Vectorized
Program 4 -- Tic-Tac-Toe
Measuring Performance
What Is Profiling?
The Profiler
The profile Function
Making Efficient Use of Memory
Memory Management Functions
Ways to Conserve Memory
"Out of Memory" Errors
Platform-Specific Memory Topics
MATLAB Programming Tips
Command and Function Syntax
Syntax Help
Command and Function Syntaxes
Command Line Continuation
Completing Commands Using the Tab Key
Recalling Commands
Clearing Commands
Suppressing Output to the Screen
Help
Using the Help Browser
Help on Functions from the Help Browser
Help on Functions from the Command Window
Topical Help
Paged Output
Writing Your Own Help
Help for Subfunctions and Private Functions
Help for Methods and Overloaded Functions
Development Environment
Workspace Browser
Using the Find and Replace Utility
Commenting Out a Block of Code
Creating M-Files from Command History
Editing M-Files in EMACS
M-File Functions
M-File Structure
Using Lowercase for Function Names
Getting a Function's Name and Path
What M-Files Does a Function Use?
Dependent Functions, Built-Ins, Classes
Function Arguments
Getting the Input and Output Arguments
Variable Numbers of Arguments
String or Numeric Arguments
Passing Arguments in a Structure
Passing Arguments in a Cell Array
Program Development
Planning the Program
Using Pseudo-Code
Selecting the Right Data Structures
General Coding Practices
Naming a Function Uniquely
The Importance of Comments
Coding in Steps
Making Modifications in Steps
Functions with One Calling Function
Testing the Final Program
Debugging
The MATLAB Debug Functions
More Debug Functions
The MATLAB Graphical Debugger
A Quick Way to Examine Variables
Setting Breakpoints from the Command Line
Finding Line Numbers to Set Breakpoints
Stopping Execution on an Error or Warning
Locating an Error from the Error Message
Using Warnings to Help Debug
Making Code Execution Visible
Debugging Scripts
Variables
Rules for Variable Names
Making Sure Variable Names Are Valid
Don't Use Function Names for Variables
Checking for Reserved Keywords
Avoid Using i and j for Variables
Avoid Overwriting Variables in Scripts
Persistent Variables
Protecting Persistent Variables
Global Variables
Strings
Creating Strings with Concatenation
Comparing Methods of Concatenation
Store Arrays of Strings in a Cell Array
Search and Replace Using Regular Expressions
Converting Between Strings and Cell Arrays
Evaluating Expressions
Find Alternatives to Using eval
Assigning to a Series of Variables
Short-Circuit Logical Operators
Changing the Counter Variable within a for Loop
MATLAB Path
Precedence Rules
File Precedence
Adding a Directory to the Search Path
Handles to Functions Not on the Path
Making Toolbox File Changes Visible to MATLAB
Making Nontoolbox File Changes Visible to MATLAB
Change Notification on Windows
Program Control
Using break, continue, and return
Using switch Versus if
MATLAB case Evaluates Strings
Multiple Conditions in a case Statement
Implicit Break in switch/case
Variable Scope in a switch
Catching Errors with try/catch
Nested try/catch Blocks
Forcing an Early Return from a Function
Save and Load
Saving Data from the Workspace
Loading Data into the Workspace
Viewing Variables in a MAT-File
Appending to a MAT-File
Save and Load on Startup or Quit
Saving to an ASCII File
Files and Filenames
Naming M-files
Naming Other Files
Passing Filenames as Arguments
Passing Filenames to ASCII Files
Determining Filenames at Runtime
Returning the Size of a File
Input/Output
File I/O Function Overview
Common I/O Functions
Readable File Formats
Using the Import Wizard
Loading Mixed Format Data
Reading Files with Different Formats
Reading ASCII Data into a Cell Array
Interactive Input into Your Program
Managing Memory
Useful Functions for Managing Memory
Compressing Data in Memory
Clearing Unused Variables from Memory
Conserving Memory with Large Amounts of Data
Matrix Manipulation with Sparse Matrices
Structure of Arrays Rather Than Array of Structures
Preallocating Is Better Than Growing an Array
Use repmat When You Need to Grow Arrays
Preallocating a Nondouble Matrix
System-Specific Ways to Use Less Memory
Out of Memory Errors on UNIX
Reclaiming Memory on UNIX
Out of Memory Errors and the JVM
Memory Requirements for Cell Arrays
Memory Required for Cell Arrays and Structures
Preallocating Cell Arrays to Save Memory
Optimizing for Speed
Finding Bottlenecks with the Profiler
Measuring Execution Time with tic and toc
Measuring Smaller Programs
Speeding Up MATLAB Performance
Vectorizing Your Code
Functions Used in Vectorizing
Coding Loops in a MEX-File for Speed
Preallocate to Improve Performance
Functions Are Faster Than Scripts
Avoid Large Background Processes
Load and Save Are Faster Than File I/O Functions
Conserving Both Time and Memory
Starting MATLAB
Getting MATLAB to Start Up Faster
Operating System Compatibility
Executing O/S Commands from MATLAB
Searching Text with grep
Constructing Path and File Names
Finding the MATLAB Root Directory
Temporary Directories and Filenames
Demos
Demos Available with MATLAB
For More Information
Examples