Getting Started
Introduction
Who Should Read This Book
MATLAB C Math Library Features
Unsupported MATLAB Features
Library Routine Naming Convention
MATLAB C Math Library Documentation
How This Book Is Organized
Accessing Online Reference Documentation
Additional Sources of Information
Installing the MATLAB C Math Library
Installation with MATLAB
Installation Without MATLAB
Verifying a UNIX Installation
Verifying a PC Installation
Writing and Building Programs
Introduction
Example - Writing a Simple Program
Output
Building Stand-Alone C Applications
Packaging Stand-Alone Applications
Overview
Compiler Options Files
Building UNIX Applications
Configuring the Build Environment
Locating Options Files
Using the System Compiler
Changing the Default Compiler
Modifying the Options File
Temporarily Changing the Compiler
Building an Application
Locating Shared Libraries
Running Your Application
mbuild Options
Building Microsoft Windows Applications
Configuring the Build Environment
Locating Options Files
Systems with Exactly One C/C++ Compiler
Systems with More than One Compiler
Changing the Default Compiler
Modifying the Options File
Combining Customized C and C++ Options Files
Temporarily Changing the Compiler
Building an Application
Shared Libraries (DLLs)
Running Your Application
mbuild Options
Distributing Stand-Alone Applications
Packaging the MATLAB Math Run-Time Libraries
Installing Your Application
On UNIX Systems
On PCs
Problem Starting Stand-Alone Application
Building Shared Libraries
Troubleshooting mbuild
Options File Not Writable
Directory or File Not Writable
mbuild Generates Errors
Compiler and/or Linker Not Found
mbuild Not a Recognized Command
Cannot Locate Your Compiler (PC)
Internal Error When Using mbuild -setup (PC)
Verification of mbuild Fails
Linking Applications Without mbuild
Working with MATLAB Arrays
Introduction
Supported MATLAB Array Types
MATLAB Array C Data Type
Numeric Arrays
Creating Numeric Arrays
Using Numeric Array Creation Routines
Creating Numeric Arrays by Calling Arithmetic Routines
Creating Numeric Arrays by Concatenation
Creating Numeric Arrays by Assignment
Initializing a Numeric Array with Data
Column-Major Storage versus Row-Major Storage
Example Program: Creating Numeric Arrays (ex1.c)
Sparse Matrices
Creating a Sparse Matrix
Converting an Existing Matrix into Sparse Format
Creating a Sparse Matrix from Data
Converting a Sparse Matrix to Full Matrix Format
Evaluating Arrays for Sparse Storage
Character Arrays
Creating MATLAB Character Arrays
Using Explicit Character Array Creation Routines
Converting Numeric Arrays to Character Arrays
Creating Multidimensional Arrays of Strings
Accessing Individual Strings in an Array of Strings
Cell Arrays
Creating Cell Arrays
Using the Cell Array Creation Routine
Using Cell Array Conversion Routines
Using Concatenation to Create Cell Arrays
Using Assignment to Create Cell Arrays
Displaying the Contents of a Cell Array
MATLAB Structures
Creating Structures
Using a Structure Creation Routine
Creating Multidimensional Arrays of Structures
Using a Structure Conversion Routine
Using Assignment to Create Structures
Performing Common Array Programming Tasks
Allocating and Freeing MATLAB Arrays
Displaying MATLAB Arrays
Formatting Output
Determining Array Type
Determining Array Size
Length of a Single Dimension
Dimension Return Values
Determining Array Shape
Managing Array Memory
Introduction
Automated Versus Explicit Memory Management
Explicit Memory Management
Automated Memory Management
Temporary and Bound Arrays
Comparison of Memory Management Schemes
Benefits of Automated Memory Management
Compatibility Between Memory Management Schemes
Avoiding Memory Leaks in Your Functions
Using Automated Memory Management
Function Template
Main Routine Template
Enabling Memory Management
Creating Bound Arrays
Assigning Arrays to mxArray* Variables
Assigning a Value to an Array Destroys Its Previous Value
Assignment by Value
Nesting Calls to Functions that Return Arrays
Deleting Bound Arrays
Restoring the Previous Context
Arguments to mlfRestorePreviousContext( )
What Happens to the Array Arguments?
Purpose of mlfRestorePreviousContext( )
Returning an Array
Argument and Return for mlfReturnValue( )
Changing Bound Arrays to Temporary Arrays
Handling Return Values
Example - Managing Array Memory (ex2.c)
Example Without Automated Memory Management
Restrictions
Recommendation
Replacing Allocation and Deallocation Routines
Indexing into Arrays
Introduction
Terminology
Indexing Functions
Array Storage
Calling the Indexing Functions
Specifying the Target Array
Specifying the Index String
What an Indexing String Specifies
Complex Indexing Expressions
Nesting Indexing Operations
Specifying the Values for Indices
Specifying a Source Array for Assignments
Assumptions for the Code Examples
One-Dimensional Indexing
Overview
Selecting a Single Element
Selecting a Vector
Specifying a Vector Index with mlfEnd()
Selecting a Matrix
Selecting the Entire Matrix As a Column Vector
N-Dimensional Indexing
Overview
Selecting a Single Element
Selecting a Vector of Elements
Specifying a Vector Index with mlfEnd( )
Selecting a Row or Column
Selecting a Matrix
Selecting Entire Rows or Columns
Selecting an Entire Matrix
Extending Two-Dimensional Indexing to N Dimensions
Logical Indexing
Overview
Using a Logical Matrix as a One-Dimensional Index
Using Two Logical Vectors as Indices
Using One Colon Index and One Logical Vector as Indices
Using a Scalar and a Logical Vector
Extending Logical Indexing to N Dimensions
Assigning Values to Array Elements
Overview
Assigning to a Single Element
Assigning to Multiple Elements
Assigning to a Subarray
Assigning to All Elements
Extending Two-Dimensional Assignment to N Dimensions
Deleting Array Elements
Deleting Multiple Elements
Cell Array Indexing
Overview
Tips for Working with Cell Arrays
Referencing a Cell in a Cell Array
Referencing a Subset of a Cell Array
Referencing the Contents of a Cell
Referencing a Subset of the Contents of a Cell
Indexing Nested Cell Arrays
Indexing the First Level
Indexing the Second Level
Assigning Values to a Cell Array
Deleting Elements from a Cell Array
Deleting a Single Element
Deleting an Entire Dimension
Structure Array Indexing
Overview
Tips for Working with Structure Arrays
Accessing a Field
Accessing the Contents of a Structure Field
Assigning Values to a Structure Field
Assigning Values to Elements in a Field
Referencing a Single Structure in a Structure Array
Referencing into Nested Structures
Accessing the Contents of Structures Within Cells
Deleting Elements from a Structure Array
Deleting a Structure from the Array
Deleting a Field from All the Structures in an Array
Deleting an Element from an Array Contained by a Field
Comparison of C and MATLAB Indexing Syntax
Calling Library Routines
Introduction
How to Call MATLAB Functions
One Output Argument and Only Required Input Arguments
Optional Input Arguments
Optional Output Arguments
Optional Input and Output Arguments
Variable Input Arguments
Pure Varargin Functions
Variable Output Arguments
Constructing an mlfVarargoutList
Pure Varargout Functions
Summary of Library Calling Conventions
Exceptions to the Calling Conventions
Example - Calling Library Routines (ex3.c)
Calling Operators
Passing Functions As Arguments to Library Routines
How Function-Functions Use mlfFeval( )
How mlfFeval() Works
Extending the mlfFeval() Table
Writing a Thunk Function
Example - Passing Functions As Arguments (ex4.c)
Output
Replacing Argument Lists with a Cell Array
Positioning the Indexed Cell Array
Exception for Built-In Library Functions
Importing and Exporting Array Data
Introduction
Writing Data to a MAT-File
Reading Data from a MAT-File
Example - Saving and Loading Data (ex5.c)
Handling Errors and Writing a Print Handler
Introduction
Error Handling Overview
Customizing Error Handling
Continuing Processing After Errors
Example - Defining Try/Catch Blocks (ex6.c)
Replacing the Default Library Error Handler
Writing an Error Handler
Registering Your Error Handler
Example - Adding an Error Handler
Defining a Print Handler
Providing Your Own Print Handler
Sending Output to a GUI
Example - Writing Output to X Windows/Motif
Example - Writing Output to Microsoft Windows
Library Routines
Introduction
Organization of the MATLAB Math Libraries
The MATLAB Built-In Library
General Purpose Commands
Operators and Special Functions
Elementary Matrices and Matrix Manipulation
Elementary Math Functions
Numerical Linear Algebra
Data Analysis and Fourier Transform Functions
Character String Functions
File I/O Functions
Data Types
Time and Dates
Multidimensional Array Functions
Cell Array Functions
Structure Functions
Sparse Matrix Functions
Utility Routines
MATLAB M-File Math Library
Operators and Special Functions
Elementary Matrices and Matrix Manipulation
Elementary Math Functions
Specialized Math Functions
Numerical Linear Algebra
Data Analysis and Fourier Transform Functions
Polynomial and Interpolation Functions
Function-Functions and ODE Solvers
Character String Functions
File I/O Functions
Time and Dates
Multidimensional Array Functions
Cell Array Functions
Structure Functions
Sparse Matrix Functions
Array Access and Creation Library
Directory Organization
Directory Organization on UNIX
<matlab>/bin
<matlab>/extern/lib/$ARCH
<matlab>/extern/include
<matlab>/extern/examples/cmath
Directory Organization on Microsoft Windows
<matlab>\bin
<matlab>\extern\include
<matlab>\extern\examples\cmath
Errors and Warnings
Introduction
Error Messages
Warning Messages