4 - Matlab (i)

Tutorial creado por Guillem Borrell i Nogueras. Extraido de: http://torroja.dmt.upm.es/%7Eguillem/matlab/
05 de Noviembre de 2006

2.1  El lenguaje y las bibliotecas

Antes de entrar en materia es importante que sepamos qué diferencias hay entre las sentencias de un lenguaje de programación y la biblioteca de funciones.

Las sentencias son las palabras clave independientes. Esto significa que si las eliminaremos del lenguaje no podríamos sustituirlas con ninguna combinación del resto de sentencias del lenguaje. Esta definición no es estricta; algunas palabras clave comunes se consideran sentencias cuando se hace un uso muy frecuente de ellas.

El total de sentencias y de reglas de escritura son lo que forman el lenguaje de programación descrito en un documento llamado referencia. Como Matlab es un programa comercial no existe tal documento.

El resto de funciones y subrutinas son parte de la biblioteca
. Son palabras clave que cumplen una tarea y no pueden ser consideradas sentencias porque están escritas con ellas. Algunas funciones de uso muy frecuente llegan a ser parte del mismo lenguaje, el grupo que forman se llama biblioteca estándar. El conjunto de sentencias y biblioteca estándar se conoce como especificaciones y en el caso que el lenguaje tome vida propia, es decir, sus especificaciones pasen a ser públicas; se llama estándar. Estos documentos existen para la mayoría de los lenguajes de programación conocidos: C, C++, Ada, Fortran, Python... Matlab no es uno de ellos.

Al ser un lenguaje sujeto a una herramienta Matlab es Matlab y punto; sin embargo podemos aplicar estas definiciones estrictas para acercarnos a él como lo haríamos con el resto de lenguajes. La organización interna de Octave sigue este criterio. Se podría decir que Octave es el conjunto de sentencias mas la biblioteca estándar y que el resto de colecciones de funciones (y hay bastantes) son los toolkits. La Compatibilidad entre los dos se sitúa sólo en las sentencias aunque se extiende en gran manera con la biblioteca de funciones. Por lo menos las funciones básicas son compatibles, casi idénticas.

Matlab tiene muy pocas sentencias. Como lenguaje es muy sencillo aunque cada versión incluye nuevas especificaciones. En los últimos años se ha añadido la extensión para programación orientada a objetos y el diseño de interfaces gráficas. Octave es ligeramente distinto en su concepción; es más minimista y cuenta con muchas menos funciones pero es más fácilmente extensible. Son las diferencias típicas entre los productos libres y los comerciales.

Este capítulo es la referencia del lenguaje; en él veremos argumentos, variables, operadores y sentencias que nos servirán para programar funciones y scripts así como la arquitectura general del programa. Es con diferencia la parte más importante del libro y no se ha dividido en varios capítulos para no romper el hilo conceptual.

Siempre que se hable exclusivamente de Matlab nos referiremos a las características comunes de Matlab y Octave. Cuando la palabra Matlab se utilice en una diferencia respecto a Octave nos estaremos refiriendo al programa comercial. Por sencillez no se ha diferenciado tipográficamente la palabra Matlab en los dos contextos.

2.2  Convenciones

A partir de ahora escribiremos un comando escrito en la consola de la siguiente manera:
>> %Esto es un comentario puesto en la consola de Matlab
 
Escribiremos todas las palabras clave con letra de formato fijo como esta función: sin(x).

Veremos que la sintaxis de Matlab no es muy distinta de la de cualquier otro lenguaje; las diferencias serán las de siempre, los símbolos de continuación, los comentarios... Aunque sea un poco temprano los listamos a continuación:
'_'
Comillas simples. Sirven para introducir texto literal, todo lo que se encuentre en este entorno será tomado como texto y no como el nombre de una variable
``_''
Comillas dobles. Símbolo de carácter también soportado en Octave.
%
Porcentaje. Es el símbolo del comentario. Todo lo que está por detrás de este símbolo en una línea es ignorado por el intérprete.
#
Almohadilla. Símbolo del comentario sólo soportado por Octave. Es muy útil cuando se quieren añadir comentarios en la cabecera de una función sin que el parser1 lo tome como parte de la ayuda.
...
Tres puntos. Al añadir alguno de estos dos símbolos al final de una línea significa que se tomará la posterior como continuación
Barra invertida. El símbolo de continuación de C, C++ y Python también está soportado en Octave.
;
Punto y coma. Símbolo de retorno de carro. Sirve para concatenar más de una sentencia en la misma línea y para inhibir la salida por consola del resultado.
Importante:
El punto y coma al final de una sentencia explicita el retorno de carro e inhibe que salga el resultado por pantalla.

2.2.1  Operaciones elementales con Matlab

Las convenciones para las operaciones en Matlab son idénticas que en cualquier otro lenguaje de programación o que en una calculadora programable. El orden de asociación de las operaciones es también el mismo. Primero se operan las funciones matemáticas elementales (senos, cosenos, logaritmos...), las multiplicaciones y divisiones y luego sumas y restas. Por ejemplo, para realizar la siguiente operación:
1
2
0.11/2
-
0.4
21/3
introduciremos enla consola:
>> 1/((2/0.1 ^(1/2))-(0.4/2 ^(1/3)))
 
Evidentemente Matlab no distingue entre elementos numéricos y variables, la ecuación:
a
b
cd
-
e
gf
>> a/(b/c^d-e/g^f)
 
Los paréntesis sirven para variar el orden normal de las operaciones a realizar.

2.2.2  Algunas palabras clave y atajos de teclado.

La consola es un entorno de trabajo más potente de lo que parece. Editar directamente en ella es un ejercicio cómodo gracias a una serie de atajos de teclado de gran utilidad. Uno de los más potentes es la capacidad de auto-completar alguna palabra clave con la tecla de tabular, tab completion en inglés. Por ejemplo, si nos encontramos en el intérprete Octave y nos acordamos cómo se escribe exactamente la función para trasponer una matriz podemos hacer lo siguiente, escribimos sólo el inicio de la palabra y luego presionamos la tecla de tabular:
>> tra<TAB>
 trace      transpose  trapz
 
Esta es una característica común de casi todas las consolas existentes, ya sea una consola de UNIX o el Command Prompt de Windows. La consola gráfica de Matlab es un poco más potente gracias a su interfaz (figura 2.1):


Figure 2.1: Tab completion en Matlab


A continuación una lista de palabras clave y atajos de teclado que pueden hacernos la vida mucho más fácil:
exit
Cierra el intérprete, equivalente a cerrar la ventana.
<CTRL>-c
Corta la ejecución del comando actual (kill)
Reescribe líneas anteriores. A medida que presionemos este carácter aparecerán en la línea actual todos los comandos escritos anteriormente. Una vez estemos viendo los comandos podemos movernos entre ellos mediante los cursores.
<CTRL>+<→,←>
Hace avanzar o retroceder el cursor por palabras en vez de por caracteres.
clc
Limpia la pantalla del intérprete de comandos

2.3  La Ayuda(I)

La manera más fácil de acceder a la ayuda tanto en Matlab como en Octave es mediante la consola y el comando help. Cada comando y función lleva consigo la información necesaria para que conozcamos su uso y sus funcionalidades2. Para acceder a la ayuda de una función teclearemos
>> help  {nombre de la función}
 
Esto significa que debemos saber cómo se llama la función. Si introducimos help sin ningún argumento nos aparecerá una ayuda general desde donde podremos encontrar cualquiera de las funciones disponibles.

Uno comando bastante útil cuando trabajamos desde una consola o por red es more
. Si activamos el comando con more on activaremos el paginador de modo que cuando el texto que aparezca en pantalla se salga de la misma interrumpirá el texto hasta que nosotros le pidamos que continúe. Esto evita el comportamiento tan desagradable que tienen las ayudas especialmente largas en las que siempre tenemos que utilizar la barra de desplazamiento para ver el principio. Para salir del texto sin tener que desplazarnos hasta el final pulsaremos la tecla <Q>.

2.4  Tipos de archivos en Matlab

Al igual que el intérprete es capaz de entender comandos mediante su consola interactiva, también es capaz de leer archivos de código o scripts. En el caso de Matlab los archivos asignados al intérprete son los que terminan con la extensión .m. Pero para entender cómo estos archivos interactúan con el intérprete es necesario que entendamos la arquitectura interna de Matlab.

Gran parte de la funcionalidad de Matlab se basa en su biblioteca de funciones. Una función en Matlab es equivalente a una función matemática; es una tarea encapsulada que puede depender de una o varias variables. Matlab tiene una extensísima biblioteca de funciones, la mayoría de ellas son archivos con la extensión .m que lee el intérprete. Pero el intérprete no puede saber por ciencia infusa dónde se encuentran dichas funciones. Si en la consola introducimos:
>> sin(x)
 
¿Cómo sabe Matlab dónde se encuentra la función seno? La respuesta es que Matlab ya sabe en qué directorios del sistema puede encontrar archivos .m desde su instalación.

¿Significa esto que si creamos nuestras funciones debemos guardarlas en estos directorios? Ni mucho menos. Matlab cuenta con un directorio especial en el que también busca funciones; es el llamado directorio de trabajo. Si estamos utilizando la interfaz gráfica de Matlab lo seleccionaremos en la barra de herramientas. Si en cambio accedemos a Matlab por consola o optamos por Octave el directorio de trabajo será el directorio actual (en UNIX el contenido en la variable de sistema PWD). Cada vez que se invoque una función en Matlab buscará en los directorios habituales y en el directorio de trabajo.

2.4.1  Funciones(I)

Una función es una unidad de programa, una tarea independiente que puede o no depender de variables externas. Las unidades de programa típicas son las funciones, las subrutinas, las clases... Matlab basa toda su potencia y su sencillez en el constante uso de funciones. La razón es bien sencilla; si Matlab es un programa para cálculo numérico es normal que la unidad de programa esencial sea la que tiene un significado más matemático

En Matlab se define una función del siguiente modo:3:
function [variables_de_salida]= nombre(variables_de_entrada)
   Comandos que terminamos asignando a las variables de salida
 {end}
 
Por ejemplo,si queremos implementar una función que sume dos escalares debemos hacer lo siguiente:
function [c]=suma(a,b)
   c=a+b;
 
Y lo guardaremos en un archivo que se llame igual que la función; en el caso del ejemplo será suma.m. Luego lo guardaremos en nuestro directorio de trabajo.

El concepto de función va más allá pero esta descripción es suficiente para entender su papel dentro de la arquitectura de Matlab.

2.4.2  Scripts

Los scripts hacen la función de un programa completo, su hilo de sentencias tiene un principio y un final y no necesita actuar con ninguna variable externa al código. La diferencia entre un script y un archivo de código fuente es que el script es una transcripción literal de comandos de consola; se dice que es secuencial. Esto no nos permite explotar las posibilidades de los formatos libres ni utilizar secuencias de control tipo goto4. También tienen la extensión .m y se pueden ejecutar de varios modos:
  • Dentro del intérprete. Si hemos guardado el archivo en alguno de los directorios de búsqueda de funciones el intérprete ejecutará toda la secuencia de comandos introduciéndole el nombre del script
>> nombre_del_archivo
 
  • Fuera del intérprete. Dentro de una consola llamando el intérprete con el nombre de archivo como argumento. Por ejemplo, en una consola cualquiera:
$> matlab nombre_del_archivo
 
Podemos llamar a funciones en nuestros scripts siempre que sea con variables que hayamos inicializado antes de la llamada. El concepto es el mismo, no es más que la transcripción de los comandos que se introducirían en la consola.

2.4.3  Nuestra primera función

En esta primera función no usaremos ninguno de los elementos característicos de la programación en Matlab. Estos son los que encontramos en cualquier código de simulación: contadores, funciones elementales, condicionales, casos... Empezaremos con el archivo aprsin.m, que es la aproximación de orden 3 del desarrollo de Taylor en 0 de la función seno. Para ello editamos el archivo nuevo de nombre aprsin.m en el directorio que nos diga Matlab o Octave según el caso y pondremos en ella lo siguiente:
function out=aprsin(x)
   out=x-x^3/6;
 
Vemos que asignamos a la variable out las operaciones que hacemos sobre la variable de entrada x. La idea es mantener las características de una función matemática. Una vez la hayamos guardado en el directorio de trabajo esta función puede ser llamada por el intérprete de Matlab o por cualquier script. Para probarlo nos vamos a la consola y tecleamos:
>> y=aprsin(1.3)
 
que debe darnos como resultado:
y = 0.93383
 
Aún es pronto para algunos conceptos, hay que aclarar un par de cuestiones:
  • Las variables x y out son de uso interno de la función. Desde la consola o desde un script podemos usar las variables que queramos. Esta abstracción es común en todos los lenguajes de programación; la entenderemos cuando hablemos de la diferencia entre variable y argumento.
  • El punto y coma significa lo mismo que el retorno de carro. Tenemos que recordar siempre que la diferencia entre hacer un retorno de carro y poner el punto y coma es que en el segundo caso el programa no nos da ningún output. Llenaremos siempre las funciones de puntos y comas para no recibir resultados intermedios inútiles.

2.4.4  Nuestro primer script

Vamos a comparar nuestra aproximación de la función seno con la función exacta y lo vamos a escribir en un guión. Para ello creamos el archivo comparar.m y escribimos lo siguiente en él:
x=linspace(-pi,+pi,100);
 for i=1:100
     y(i)=aprsin(x(i));
 end
 plot(x,[y;sin(x)])
 
Para ejecutarlo vamos a la consola y tecleamos:
>> comparar
 
E inmediatamente va a aparecer la figura 2.2:


Figure 2.2: Comparación del desarrollo de Taylor


Aún es temprano para entender exactamente qué hace el script, lo iremos viendo paso a paso; pero ha servido para ver cuál es la relación entre funciones, los scripts y Matlab.

2.4.5  Una gran diferencia entre Matlab y Octave

Matlab no puede definir funciones directamente en el intérprete o en un script. Cualquier función debe ser un archivo independiente por simple que esta sea. Por ejemplo, si en Matlab escribimos:
>> function c=suma(a,b)
 ??? function c=suma(a,b)
     |
 Error: Function definitions are not permitted at the prompt or in scripts.
 
Recibimos un error. En cambio Octave puede definir funciones tanto en el intérprete como en un script, algo que dota a este intérprete alternativo de algo más de versatilidad.

Éste es uno de los grandes puntos débiles de Matlab. Ignoro el hecho por el que aún no lo soportan.

Lo que no se puede hacer ni en Matlab ni en Octave es poner varias funciones en un mismo archivo de función. No es muy difícil ver por qué. El lenguaje Matlab, cuando llama a una función, busca por los directorios algún archivo que se llame como la función, y luego busca una sentencia ejecutable en él. Esto implica que cada archivo sólo puede contener una cabecera5. Si pensamos un poco también vemos que en Octave se puede usar un pequeño truco para cargar varias funciones sin necesitar una cabecera. Simplemente creamos un script cuyo nombre no coincida con ninguna de las funciones que contiene. Éste archivo lo empezamos con algo que no sea la sentencia function y a continuación escribimos todas las funciones que necesitemos. Luego, en el programa principal lo llamamos con un:
>> source('header.m')
 

2.5  Argumentos

El concepto preciso de argumento es complejo pero a nosotros nos bastará con saber que es cualquier elemento manipulable en un código. Los argumentos de un programa de simulación numérica son los números, los índices, las matrices, las secuencias...

Tenemos que hacer el esfuerzo conceptual de separar el concepto de argumento del de variable. Una variable es su contenedor, es lo que les da nombre y sirve para manipularlos. Sucede lo mismo en cualquier fórmula matemática; siempre se expresa mediante variables y toma sentido cuando éstas contienen algún argumento.

Matlab tiene varios tipos de argumentos y varios tipos de variables; en consecuencia será valida cualquier combinación entre ellos. Estos son los tipos de argumentos soportados6:

2.5.1  Matrices

Matlab no distingue entre escalares y matrices. Si se dice que Matlab es un lenguaje de cálculo matricial es porque todos los números son en el fondo matrices. El número 1 puede ser escalar, vector y matriz a la vez sin ningún problema:
>> a=1
 a = 1
 >> a(1)
 ans = 1
 >> a(1,1)
 ans = 1
 >> a(1,1,1)
 ans = 1
 
Tampoco distingue si sus elementos son enteros o reales, todos los números tienen la misma precisión en coma flotante, que es doble precisión siempre que no le indiquemos lo contrario. Las entradas
>> a=105
 a = 105
 >> a=1.05e+2
 a = 105
 >> a=1050e-1
 a = 105
 >> a=105.
 a = 105
 
son equivalentes. Estas son las dos características más importantes del lenguaje.

Las matrices se estiran y encogen sin ninguna limitación ni en el tamaño ni en las dimensiones. Si intentamos llenar el décimo elemento de un vector inexistente con un 1.
>> foo(10)=1
 
el programa lo va a hacer sin ningún problema
foo =   
   0  0  0  0  0  0  0  0  0  1
 
y si ahora le pido
>> foo(11,4)=2
 
obtengo
foo =   
   0  0  0  0  0  0  0  0  0  1   
   0  0  0  0  0  0  0  0  0  0   
   0  0  0  0  0  0  0  0  0  0   
   0  0  0  0  0  0  0  0  0  0   
   0  0  0  0  0  0  0  0  0  0   
   0  0  0  0  0  0  0  0  0  0   
   0  0  0  0  0  0  0  0  0  0   
   0  0  0  0  0  0  0  0  0  0   
   0  0  0  0  0  0  0  0  0  0   
   0  0  0  0  0  0  0  0  0  0   
   0  0  0  2  0  0  0  0  0  0
 
Vemos que el comportamiento es un poco extraño. Si nosotros utilizamos únicamente un índice obtenemos un vector fila, mientras que en una matriz la notación es la usual, el primer elemento es el número de fila y el segundo el número de columna. Esto nos obligará a trasponer vectores más de una vez, sobretodo para resolver sistemas lineales de ecuaciones7.

Esta característica facilita la tarea de escribir los algoritmos por primera vez pero tiene grandes peligros 8 e inconvenientes.
Importante:
Cualquier número es en realidad una matriz sin fronteras fijas.
Las matrices se ordenan en Matlab del mismo modo que en la realidad, por filas y columnas. La notación para diferenciar si una serie de números se encuentran en la misma fila o en la misma columna es el siguiente:
  • el espacio y la coma (,) separan elementos de una misma fila
  • el retorno de carro y el punto y coma (;) separan elementos de una misma columna
Por ejemplo, si queremos escribir el vector fila e=(1 2 3) lo haremos con:
>> e=[1,2,3]
 e =
   1  2  3
 >> e=[1 2 3]
 e =
   1  2  3
 
En cambio, para escribir el mismo vector pero en forma de columna:
>> f=[1;2;3]
 f =
   1
   2
   3
 >> f=[1
 > 2
 > 3]
 f =
   1
   2
   3
 
Esta es exactamente la misma notación que se sigue para introducir una matriz entera. Lo intentamos con:
漂R> 缂R> 缂R> 輯FONT>
1 2 3
4 5 6
7 8 9
?> ?> ?> ?NT>
>> m=[1,2,3;4,5,6;7,8,9]
 m =
   1  2  3
   4  5  6
   7  8  9
 
Aunque cualquier combinación de las anteriores sería perfectamente válida, por ejemplo:
>> m=[1 2 3
 > 4 5 6
 > 7 8 9]
 m =
   1  2  3
   4  5  6
   7  8  9
 
La llamada simple a un elemento cualquiera de una matriz se hace indicando su fila y su columna por ese orden. En el caso de la matriz m:
>> m(2,1)
 ans = 4
 
Aprenderemos a crear matrices de más dimensiones en la sección 3.2.1.

2.5.1.1  Tipos de argumentos matriciales

Cuando se habla del tipo de un argumento no estamos hablando sólo de si es una matriz, una cadena de caracteres, un número complejo. El concepto en el ámbito del cálculo numérico va mucho más allá. Se llama tipo a la representación que tiene un argumento en la memoria del ordenador. Cuando almacenamos un número podemos hacerlo en varias representaciones; coma flotante de simple precisión, entero de 32 bits... Antes hemos hablado de la configuración por defecto de Matlab que almacena todos los elementos de una matriz como reales de doble precisión (64 bits o 8 bytes).

Todo lo dicho anteriormente para la representación interna de números es válida sólo por defecto. En ningún momento afirmamos que el único tipo de escalar posible es el real de doble precisión. Podemos definir explícitamente números ,es decir, matrices; con tipos distintos al real de doble precisión (DOUBLE).

Los tipos soportados por matlab son los mismos que C excepto por el tipo long double (real de 128 bits). Esta representación tiene una limitación evidente; como la formulación de los argumentos en Matlab es matricial sólo podremos tener matrices de un único tipo. No podremos construir matrices con elementos enteros y elementos reales a la vez. Esta es una limitación común a todos los lenguajes de programación y viene dado por la manera en la que cualquier programa reserva (alocatea) memoria. Por ejemplo, si deseamos operar con matrices de números enteros de 8 bits utilizaremos la función int8 del modo siguiente:
>> x=int8([1,2;109237401823056187365,83.0938])
 x =
     1    2
   127   83
 
Llama la atención el hecho de que el número 109237401823056187365 se ha convertido en el 127. Esto es debido a que el mayor entero de 8 bits que podemos almacenar es precisamente 127. Si necesitamos una aritmética de mayor precisión entera siempre podemos hacer lo siguiente:
x=int64([1,2;109237401823056187365,83.0938])
 x =
     1    2
   9223372036854775807   83
 
Ni siquiera el mayor entero disponible es capaz de almacenar el número anterior.

Podemos tener la necesidad de manipular la cantidad de memoria dedicada a cada elemento de una matriz por dos motivos
  1. Estamos definiendo matrices de gran tamaño y tenemos la necesidad de reducir la precisión de los argumentos reales; ya sea por la necesidad de reservar memoria o por requerimientos de velocidad de cálculo
  2. Necesitamos operar con tipos de enteros, ya sean con signo o sin signo para realizar con ellos operaciones lógicas por bits o utilizar lógica entera.
En Octave sólo es posible lo segundo porque el tipo de real es siempre el de doble precisión. Hablaremos un poco más de los tipos de argumentos escalares en la sección dedicada a rutinas de creación de matrices.

2.5.2  Secuencias

Son parecidas a los vectores pero no lo son. Aparecen por todos los elementos del lenguaje, en las submatrices, en los contadores en el funcionamiento interno de muchas funciones... Siempre que necesitemos contar algo aparecerán las secuencias porque es el método propio Matlab para contar. Si queremos una lista de números que nos cuente del 1 al 10 hacerlo es tan fácil como:
>> secuencia=1:10
 secuencia =
    1   2   3   4   5   6   7   8   9  10
 
Si queremos manipular el contador para que no sea de 1 en 1 podemos introducir el salto entre dos números sucesivos:
>> secuencia=1:2:10
 secuencia =
    1   3   5   7   9
 

2.5.2.1  ¿Por qué las secuencias no son vectores?

Hay una diferencia esencial entre las sentencias y los vectores. La diferencia es que una sentencia no se almacena en memoria. Es un concepto un poco complejo y requiere entender el funcionamiento interno de Matlab pero intentaremos explicarlo de un modo sencillo.

Si definimos un vector éste se almacena en memoria; tenemos un argumento que contiene todos los elementos y se pueden llamar del modo usual. En cambio una secuencia es como una función que cuenta elementos. Si la llamamos por primera vez (siempre de forma implícita) nos da el primer elemento; si la llamamos por segunda vez nos devuelve el segundo, y así sucesivamente. Todo esto se hace de modo interno y es un proceso muy rápido, por eso se usan muy a menudo.

2.5.2.2  Contadores no enteros.

Las secuencias soportan intervalos distintos a los números enteros. Podemos introducir la secuencia:
>> 0:0.5:4
 ans =
  Columns 1 through 8:
   0.00000  0.50000  1.00000  1.50000  2.00000  2.50000  3.00000  3.50000
  Column 9:
   4.00000
 
Si el intervalo que introducimos no ajusta exactamente al límite superior parará de contar sin pasarse.
>> 0:0.52:4
 ans =
   0.00000  0.52000  1.04000  1.56000  2.08000  2.60000  3.12000  3.64000
 
Evidentemente este tipo particular de contadores no son adecuados para contar índices porque genera números no enteros. Su utilidad se encuentra en la discretización de intervalos necesaria, por ejemplo, en los ejes de coordenadas.

2.5.3  Submatrices

Para asignar partes de matrices a variables o operar dentro de una matriz con una parte de la misma es necesario asignarles una secuencia de índices. Se puede decir que la submatriz se genera contando los índices de la primera Para entender mejor cómo funciona este tipo de asignaciones mejor hacerlo mediante ejemplos. Iniciaremos una sesión en Matlab creando una matriz de números aleatorios:
>> foo=rand(5,5)
  foo =
   0.808048  0.804808  0.871166  0.606412  0.867716
   0.114965  0.524531  0.210789  0.163542  0.639094
   0.476355  0.544236  0.254009  0.818164  0.091934
   0.736103  0.231876  0.115706  0.336303  0.478042
   0.807002  0.244172  0.507355  0.814160  0.792253
 
Ahora crearemos una submatriz llamada bar que contendrá las filas de la segunda a la quinta y columnas de la tercera a la quinta.
>> bar=foo(2:5,3:5)
  bar =
   0.210789  0.163542  0.639094
   0.254009  0.818164  0.091934
   0.115706  0.336303  0.478042
   0.507355  0.814160  0.792253
 
Pero las secuencias tienen la capacidad de contar de modos distintos, en el caso siguiente contaremos las filas de 2 en 2 como muestra el siguiente ejemplo. En él crearemos una submatriz qwe que sean, de la matriz foo las filas de la primera a la quinta de 2 en 2 (la primera, la tercera y la quinta) y las columnas de la primera a la tercera.
>> qwe=foo(1:2:5,1:3)
  qwe =
   0.80805  0.80481  0.87117
   0.47635  0.54424  0.25401
   0.80700  0.24417  0.50735
 
Si omitimos los elementos de la secuencia y dejamos sólo el símbolo :, el resultado será que tomaremos todos los elementos de la fila o de la columna.

2.5.4  Números Complejos

En realidad deberían llamarse matrices cuyos elementos son números complejos, pero se ha abreviado. Las reglas matriciales son exactamente las mismas, lo único que cambia es el carácter individual de cada elemento. La manera de introducir un número complejo como argumento en una variable es el uso del número i que multiplica a la parte imaginaria.
>> numcom=2+3i
 
También podemos usar otros signos para expresar i como j, I o J. Evidentemente también podemos crear vectores, matrices y tensores de números complejos, y al buscar un índice en ellos tendremos el número complejo completo.

Además del número i tenemos otros números relevantes embebidos dentro de Matlab, como los números racionales π como pi o e.

2.5.5  Cadenas de texto

Podemos asignar a una variable una cadena de texto introduciéndola entre comillas simples o dobles:
>> saludo='hola que tal';
 
y si pedimos qué hay en la variable:
>> saludo
 saludo = hola que tal
 
La expresión es la misma si usamos comillas dobles:
>> saludo=''hola que tal''
 saludo = hola que tal
 
Matlab almacena las cadenas de texto como un vector de caracteres. Esto significa que acepta todas las posibilidades de composición de vectores, la diferencia es que operaremos con caracteres ASCII en vez de con números reales. Para demostrarlo nada mejor que intentar encadenar palabras en fila
>> ['me','gusta','el','furbo']
 ans = megustaelfurbo
 
o en columna
>> ['me';'gusta';'el';'furbo']
 ans =
 me
 gusta
 el
 furbo
 

2.5.6  Argumentos lógicos

Sólo tenemos dos variables lógicas que son true y false. Estos nombres son sólo interfaces, en realidad Matlab toma 0 como falso y cualquier número distinto de cero como verdadero.

11 opiniones

Enzo

buenazo
Introducción informal a Matlab y Octave

un excelente materaial
^^ bueno el tutorial >_<

es bueno para uno q esta aprendiendo a aprender a manejarlo
Esta bien bueno y claro ese tutorial.

De verdad es una ayuda para el que empieza a manejar matlab.
Ing. Civil.

Bastante completo y didactico.
1 2 3 | siguiente >

Tutoriales relacionados con 'Introducción informal a Matlab y Octave'

Hay muchos libros de Matlab, algunos muy buenos, pero en ninguno es tratado como un... Más »

Autor y licencia de 'Introducción informal a Matlab y Octave'


Tutorial de Guillem Borrell i Nogueras. Extraido de: http://torroja.dmt.upm.es/%7Eguillem/matlab/ CopyLeft
Este contenido ha sido recopilado por el equipo de Wikilearning. Todo el contenido recopilado se ha obtenido respetando y comunicando en nuestro site la licencia de cada fuente.
Wikilearning tiene permiso expreso por escrito de los autores para publicar los contenidos que ha extraído de otras webs, incluyendo su uso comercial.