OTRO TIPO DE DATOS EN MATLAB.
En los Capítulos precedentes se ha visto la “especialidad” de MATLAB: trabajar con vectores y matrices. En este Capítulo se va a ver que MATLAB puede también trabajar con otros tipos de datos: 1. Conjuntos o cadenas de caracteres, fundamentales en cualquier lenguaje de programación. 2. Hipermatrices, o matrices de más de dos dimensiones. 3. Estructuras, o agrupaciones bajo un mismo nombre de datos de naturaleza diferente. 4. Vectores o matrices de celdas (cell arrays), que son vectores o matrices cuyos elementos pueden ser cualquier otro tipo de dato. 5. Matrices dispersas o matrices dispersas, que son matrices que pueden ser de muy gran tamaño con la mayor parte de sus elementos cero.
Cadenas de caracteres.
MATLAB trabaja también con cadenas de caracteres, con ciertas semejanzas y también diferencias respecto a C/C++ y Java. A continuación se explica lo más importante del manejo de cadenas de caracteres en MATLAB. Las funciones para cadenas de caracteres están en el sub-directorio toolbox\matlab\strfundel directorio en que esté instalado MATLAB. Los caracteres de una cadena se almacenan en un vector, con un carácter por elemento. Cada carácter ocupa dos bytes. Las cadenas de caracteres van entre apóstrofoso comillas simples, como por ejemplo: 'cadena'. Si la cadena debe contener comillas, éstas se representan por un doble carácter comilla, de modo que se pueden distinguir fácilmente del principio y final de la cadena. Por ejemplo, para escribir la cadena ni 'idea'se escribiría 'ni''idea'''. Una matriz de caracteres es una matriz cuyo s elementos son caracteres, o bien una matriz cuyas filas son cadenas de caracteres. Todas las filas de una matriz de caracteres deben tener el mismo número de elementos. Si es preciso, las cadenas (filas) más cortas se completan con blancos.
Hipermatrices (arrays de más de dos dimensiones). MATLAB permite trabajar con hipermatrices, es decir con matrices de más de dos dimensiones (Figura 23). Una posible aplicación es almacenar con un único nombre distintas matrices del mismo tamaño (resulta una hipermatriz de 3 dimensiones). Los elementos de una hipermatriz pueden ser números, caracteres, estructuras, y vectores o matrices de celdas. El tercer subíndice representa la tercera dimensión: la “profundidad” de la hipermatriz.
DEFINICIÓN DE HIPERMATRICES. Las funciones para trabajar con estas hipermatrices estánen el sub-directorio toolbox\matlab\datatypes. Las fun ciones que operan con matrices de más de dos dimensiones son análogas a las funciones vistas previamente, aunque con algunas diferencias. Por ejemplo, las siguientes sentencias generan, en dos pasos, una matriz de 2×3×2: >> AA(:,:,1)=[1 2 3; 4 5 6]% matriz inicial AA = 1 2 3 4 5 6 >> AA(:,:,2)=[2 3 4; 5 6 7]% se añade una segunda matriz AA(:,:,1) = 1 2 3 4 5 6 AA(:,:,2) = 2 3 4 5 6 7
Estructuras.
Una estructura (struct) es una agrupación de datos de tipo diferente bajo un mismo nombre. Estos datos se llaman miembros(members) o campos(fields). Una estructura es un nuevo tipo de dato, del que luego se pueden crear muchas variables (objetoso instances). Por ejemplo, la estructura alumno puede contener los campos nombre(una cadena de caracteres)y carnet(un número).
CREACIÓN DE ESTRUCTURAS.
En MATLAB la estructura alumnose crea creando un objeto de dicha estructura. A diferencia de otros lenguajes de programación, no hace falta definir previamente el modelo o patrón de la estructura. Una posible forma de hacerlo es crear uno a uno los distintos campos, como en el ejemplo siguiente:
>> alu.nombre='Miguel' alu = nombre: 'Miguel' >> alu.carnet=75482 alu = nombre: 'Miguel' carnet: 75482 >> alu alu = nombre: 'Miguel' carnet: 75482
Se accede a los miembros o campos de una estructura por medio del operador punto(.), que une el nombre de la estructura y el nombre del campo (por ejemplo: alu.nombre). También puede crearse la estructura por medio de la función struct(), como por ej emplo,
>> al = struct('nombre', 'Ignacio', 'carnet', 76589) al = nombre: 'Ignacio' carnet: 76589 Los nombres de los camposse pasan a la función struct() entre apóstrofos ('), seguidos del valor que se les quiere dar. Este valor puede ser la cadena vacía ('') o la matriz vacía ([]). Pueden crearse vectores y matrices (e hipermatrices) de estructuras. Por ejemplo, la sentencia, >> alum(10) = struct('nombre', 'Ignacio', 'carnet', 76589) crea un vector de 10 elementos cada uno de los cuales es una estructura tipo alumno. Sólo el elemento 10 del vector es inicializado con los argumentos de la f unción struct(); el resto de los campos se inicializan con una cadena vacía o una matriz vacía11. Para dar valor a los campos de los elementos restantes se puede utilizar un bucle forcon sentencias del tipo: >> alum(i).nombre='Noelia', alum(i).carnet=77524; MATLAB permite añadir un nuevo campo a una estructura en cualquier momento. La siguiente sentencia añade el campo edada todos los elementos del vector alum, aunque sólo se da valor al campo del elemento 5,
>> alum(5).edad=18; Para ver el campo edaden los 10 elementos del vector puede teclearse el comando: >> alum.edad
FUNCIONES PARA OPERARCON ESTRUCTURAS.
Las estructuras de MATLAB disponen de funciones que facilitan su uso. Algunas de estas funciones son las siguientes: fieldnames() devuelve un vector de celdas con cadenas de caracteres que recogen los nombres de los campos de una estructura. isfield(ST,s) permite saber si la cadena ses un campo de una estructura ST. isstruct(ST) permite saber si STes o no una estructura. rmfield(ST,s) elimina el campo sde la estructura ST. getfield(ST,s) devuelve el valor del campo especificado. Si la estructura es un array hay que pasarle los índices como cell array (entre llaves {}) como segundo argumento.