Programming and Data Types

Data Types

There are 15 fundamental data types (or classes) in MATLAB. Each of these data types is in the form of an array. This array is a minimum of 0-by-0 in size and can grow to an n-dimensional array of any size. Two-dimensional versions of these arrays are called matrices.

All of the fundamental data types are shown in lowercase text in the diagram below. Additional data types are user-defined, object-oriented `user classes` (a subclass of `structure`), and `java classes`, that you can use with the MATLAB interface to Java.

Matrices of type `double` and `logical` may be either `full` or `sparse`. For matrices having a small number of nonzero elements, a sparse matrix requires a fraction of the storage space required for an equivalent full matrix. Sparse matrices invoke special methods especially tailored to solve sparse problems.

The `logical` data type represents a logical `true` or `false` value using the numbers `1` and `0`, respectively. MATLAB returns logical values from its relational (e.g., `>`, `~=`) and logical (e.g., `&&`, `xor`) operations and functions.

The `char` data type holds characters. A character string is merely a 1-by-n array of characters. You can use `char` to hold an m-by-n array of strings as long as each string in the array has the same length. (This is because MATLAB arrays must be rectangular.) To hold an array of strings of unequal length, use a `cell` array.

Numeric data types include signed and unsigned integers, and single- and double- precision floating point numbers. The following hold true for numeric data types in MATLAB:

• All data types support basic array operations, such as subscripting and reshaping.
• All MATLAB computations are done in double-precision.
• To perform mathematical operations on integer or single precision arrays, you must convert them to double precision using the `double` function.
• Integer and single precision arrays offer more memory efficient storage than double-precision.

A `cell array` provides a storage mechanism for dissimilar kinds of data. You can store arrays of different types and/or sizes within the cells of a `cell` array. For example, you can store a 1-by-50 `char` array, a 7-by-13 `double` array, and a 1-by-1 `uint32` in cells of the same `cell` array. You access data in a `cell` array using the same matrix indexing used on other MATLAB matrices and arrays.

The MATLAB `structure` data type is similar to the `cell` array in that it also stores dissimilar kinds of data. But, in this case, it stores the data in named fields rather than in cells. This enables you to attach a name to the groups of data stored within the structure. You access data in a structure using these same field names.

A `function handle` holds information to be used in referencing a function. When you create a function handle, MATLAB captures all the information about the function that it needs to locate and execute, or evaluate, it later on. Typically, a function handle is passed in an argument list to other functions. It is then used in conjunction with `feval` to evaluate the function to which the handle belongs.

MATLAB data types are implemented as classes. You can also create MATLAB classes of your own. These user-defined classes inherit from the MATLAB `structure` class and are shown in the previous diagram as a subset of `structure`.

MATLAB provides an interface to the Java programming language that enables you to create objects from Java classes and call Java methods on these objects. A Java class is a MATLAB data type. There are built-in and third-party classes that are already available through the MATLAB interface. You can also create your own Java class definitions and bring them into MATLAB.

The following table describes the data types in more detail.

 Data Type Example Description `logical` `magic(4) > 10` Logical array. Must contain only logical `1` (`true`) and logical `0` (`false`) elements. (Any nonzero values converted to `logical` become `logical` `1`.) Logical matrices (2-D only) may be sparse. `char` `'Hello'` Character array (each character is 16 bits long). This array is also referred to as a string. `int8, uint8, int16, uint16, int32, uint32, int64, uint64` `uint8(magic(3))` Signed and unsigned integer arrays that are 8, 16, 32, and 64 bits in length. Enables you to manipulate integer quantities in a memory efficient manner. These data types cannot be used in mathematical operations. `single` `3*10^38` Single-precision numeric array. Single precision requires less storage than double precision, but has less precision and a smaller range. This data type cannot be used in mathematical operations. `double` `3*10^300``5+6i` Double-precision numeric array. This is the most common MATLAB variable type. Double matrices (2-D only) may be sparse. `cell` `{17 'hello' eye(2)} ` Cell array. Elements of cell arrays contain other arrays. Cell arrays collect related data and information of a dissimilar size together. `structure` `a.day = 12;a.color = 'Red';a.mat = magic(3);` Structure array. Structure arrays have field names. The fields contain other arrays. Like cell arrays, structures collect related data and information together. `function handle` `@humps` Handle to a MATLAB function. A function handle can be passed in an argument list and evaluated using `feval`. `user class` `inline('sin(x)')` MATLAB class. This user-defined class is created using MATLAB functions. `java class` `java.awt.Frame` Java class. You can use classes already defined in the Java API or by a third party, or create your own classes in the Java language.

 Special Values Operators