You are on page 1of 29

Notas sobre MATLAB y OCTAVE

Tomás Chacón Rebollo, Eliseo Chacón Vera y Macarena Gómez Mármol

2

basado en el cálculo con matrices para computación numérica y visualización en campos cientı́ficos y de la ingenierı́a. podremos usar OCTAVE. Se pueden observar las capacidades de MATLAB con el comando demo. Se pueden resolver problemas complejos con una implemetación más simple que la que se usa en otros lenguajes de programcación como Fortran o C.1. Las últimas versiones de MATLAB disponen de un conjunto de herramientas. OCTAVE es muy compatible con MATLAB en el sentido de que la mayorı́a de los códigos generados con MATLAB u OCTAVE funcionan en ambos. OCTAVE es lenguaje interactivo de alto nivel y que se distribuye gratuitamente. para aquellos momentos en los que no lo esté. pero como ya hemos dicho anteriormente. estas van a aparecer en los detalles más exquisitos de presentación de gráficas que MATLAB tiene. que extienden grandemente sus capacidades. El nombre de MATLAB proviene de MATrix LABoratory. Introducción MATLAB es un sistema interactivo. Pero. aunque no van a ser precisas para nuestro trabajo en este curso. Pero la mayor parte de un código creado con uno de ellos debe de funcionar en el otro.Capı́tulo 1 Introducción a MATLAB y OCTAVE 1. toolboxes. se requiere una licencia. También podemos trabajar con OCTAVE exclusivamente 3 . con las distintas versiones de Linux. a diferencia de MATLAB que necesita de la compra de una licencia. En nuestra aula de informática. trabajaremos principalmente con MATLAB. a parte de los toolboxes. En cuanto a las principales diferencias. Esta licencia estará disponible casi siempre.

2. A lo largo de estas notas nos referiremos a la sesión de trabajo. Empezando la sesión de trabajo Se empieza la sesión con la orden matlab (octave) y se termina la sesión con el comando quit o exit. Por ejemplo.3 9 ] y A= [ −1 2 3 0 5 1 7 −2. Mediante funciones construidas y ordenes internas. Puede ser conveniente mantener activa la sesión de trabajo en una ventana y el editor de texto en otra.3 9 ] . help eig informa sobre la función autovalor eig. El comando help nombre provee de información sobre cualquier función o comando. Por ejemplo. Todas las variables representan matrices. Este manual no pretende ser exhaustivo. 7 − 2. 0 5 1. Matrices 1 × 1 se interpretan como escalares y matrices con sólo una fila o columna como vectores. Sólo una primera toma de contacto con MATLAB/OCTAVE y una guı́a de consulta rápida para tener a mano.4 CAPÍTULO 1. Cargado de un fichero o aplicación externa. 1. una matriz numérica con posibles valores complejos.3. Especificaremos la diferencia cuando sea preciso. para modificar ordenes que puedan ser introducidas mediante ficheros de texto. INTRODUCCIÓN A MATLAB Y OCTAVE si ası́ lo deseamos. Las matrices se introducen de varias formas: Mediante una lista explı́cita de elementos. Creando un fichero de texto con el editor. Introduciendo matrices Esencialmente trabajamos con sólo un tipo de objeto. indistintamente que sea en MATLAB u OCTAVE. A = [−1 2 3. 1.

Para enteros n y m. la orden rand(n) crea una matriz n × n con entradas aleatorias. 7 8] A = [1 + 5i 2 + 6i. Las funciones internas rand. Por último. Por ejemplo: A = [1 2. Si denotamos por datos. matrices 1 × 1. columnas y diagonales suman lo mismo). resulta mejor usar un fichero creado con un editor de texto. magic(n) crea una matriz entera n × n que es un cuadrado mágico (filas. Para introducir escalares. magic y hilb. hilb(n) crea la matriz de Hilbert n × n. A(2.1.ext (donde . las matrices también se suelen generar mediante ciclos de programación como el ciclo for.3. que resulta ser la matriz mal condicionada por excelencia. no es preciso el uso de corchetes. 2 + 6i y no 2 + 6 i. 3 + 7i 4 + 8i ] También en este caso se deben de evitar los espacios en blanco. por ejemplo 3.12e-3. uniformemente distribuidas entre 0 y 1. Los elementos dentro de una fila también se pueden separar mediante comas en vez de espacios en blanco. Por ejemplo. Cuando los números aparecan en forma exponencial. Por ejemplo. proporcionan matrices con las que se pueden experimentar. 3) indica el valor en la segunda fila y tercera columna de la matriz A y x(3) denota la tercera componente del vector x. 3 4 ] + i ∗ [5 6. INTRODUCIENDO MATRICES 5 crea una matriz 3 × 3 y se le asigna a la variable A. Como unidades imaginarias se pueden usar i o j. No es conveniente usar i o j como variables para otro uso. los espacios se deben de evitar.n) crea una matriz m × n. Los elementos de matrices y vectores se pueden referenciar con ı́ndices entre paréntesis en la forma usual. no es necesaria). por ejemplo. que por cierto.ext es cualquier extensión. Este fichero debe de consistir en una disposición rectangular con los valores numéricos. Se pueden usar números complejos. mientras que rand(m. . Para introducir matrices grandes. el comando load datos.ext leerá este fichero y lo guardará en la variable datos. Matrices y vectores sólo aceptan enteros positivos como ı́ndices.

2. Es importante observar que estas otras operaciones. si A es cuadrada. Operaciones con escalares.3. En la división por la izquierda.16]. se factoriza usando eliminación de Gauss y esos factores se usan para resolver A ∗ x = b. vectorial y matricial de forma es- tandard.4] o [1. expresiones y variables El lenguaje de MATLAB y OCTAVE se basa en expresiones.∧ 2 dan [1. ∗. Las operaciones matriciales de suma y resta operan sobre las entradas de la matriz.3. La “división de matrices” merece un comentario.6 CAPÍTULO 1. se pueden hacer operar sobre cada entrada de la matriz si se las precede con un punto.4]. ∧. Por ejemplo. cualquier expresión introducida se interpreta y se evalua. pero las otras operaciones no lo hacen ası́. Si A es una matriz cuadrada invertible y b es un vector columna. y /. INTRODUCCIÓN A MATLAB Y OCTAVE 1.9. x = b/A es la solución de x ∗ A = b.4.2. son operaciones sobre matrices como conjunto. respectivamente. Las sentencias son normalmente de la forma . Si A no es cuadrada. excepto en el caso de la operación de un escalar con una matriz.3. vectores y matri- ces Las siguientes operaciones están disponibles: + suma − resta ∗ multiplicación ∧ potencia 0 transpuesta conjugada \ división por la izquierda / división por la derecha Estas operaciones se aplican al caso escalar. 1. se factoriza usando la ortogonalización de Householder pivotando en las columnas y los factores se usan para resolver el sistema en el sentido de los mı́nimos cuadrados. respectivamente fila. La división por la derecha se define en términos de la división por la izquierda mediante b/A = (A0 \b0 )0 .*[1. \. entonces x = A\b es la solución de A ∗ x = b y. [1.4.5.2. Si las tallas de las matrices son incompatibles aparece un mensaje de error. Operaciones con vectores. en donde cada entrada de la matriz es operada con el escalar. Sentencias.4].

EXPRESIONES Y VARIABLES 7 variable = expresión. Las expresiones se componen normalmente con operadores. Los procesos en marcha se pueden interrumpir en la mayorı́a de las máquinas con la orden CTRL-C. La evaluación de la expresión produce una matriz. aunque la asignación si que se realiza. no es lo mismo solveUT que solveut. Una sentencia se termina normalmente con el control de carro (ENTER).1. se puede continuar en la siguiente lı́nea con tres o más puntos seguidos de control de carro.5. La orden who (o whos) proporciona una lista de las variables actuales en la memoria de trabajo de la sesión en curso. SENTENCIAS. funciones y nombres de variables. en torno a 10−16 en la mayorı́a de las máquinas. Si el nombre de la variable y el signo = se omiten. . Esto es esencial si se pretende suprimir la salida por pantalla de resultados intermedios. funciones y variables. Se distinguen las mayúsculas en los nombres de comandos. Por ejemplo. Por otro lado. Una variable puede ser eliminada de la memoria con el comando clear nombrevariable. entonces una variable ans (de answer) se crea automáticamente y se le asigna el valor. o simplemente expresión. varias sentencias se pueden poner sobre la misma lı́nea si se separan por punto y coma o coma. Sin embargo. Resulta de utilidad cuando se quiere especificar la tolerancia en la convergencia de un proceso iterativo. Si el último carácter de una sentencia es un punto y coma. que entonces se muestra en pantalla y se le asigna a la variable para su uso futuro. La variable permanentes eps (epsilon) da la unidad de redondeo de la máquina. la impresión en pantalla del resultado de la evaluación de la sentencia no se efectua. El comando clear borra todas las variable no permanentes de la memoria.

if. o bien. Relaciones En su forma más básica. zeros(size(A)) produce una matriz de ceros con la misma talla que A. For. para n dado.6. For. Funciones para construir matrices Algunas funciones de interés y utilidad son eye matriz identidad zeros matriz de ceros ones matriz de unos diag crea o extrae la diagonal triu parte triangular superior de una matriz tril parte triangular inferior de una matriz rand matriz generada con entradas aleatorias hilb matriz de Hilbert magic cuadrado mágico Por ejemplo. Por ejemplo. Con diag(diag(A)) se obtiene la matriz diagonal con la diagonal de A. i2 ]. 2). zeros(3. i∧ 2] end . zeros(2. for i = 1 : n x = [x.7. Si x es un vector. x = [x. Las matrices se pueden construir con bloques. f or i = 1 : n. Si A es una matriz.n) produce una matriz de ceros m × n y zeros(n) produce una matriz cuadrada n×n. diag(x) es la matriz con diagonal x. las sentencias x = [ ]. 3). INTRODUCCIÓN A MATLAB Y OCTAVE 1. diag(A) es un vector con la diagonal de A. while. end. 1. estas ordenes de control de flujo en funcionan como en la mayorı́a de lenguajes de programación. Si A es una matriz cuadrada. eye(2)] construye una matriz 5 × 5. si A es una matriz 3 × 3. x = [ ]. Por ejemplo. el resto de elementos cero.8 CAPÍTULO 1. entonces B = [A. zeros(m.

Las sentencias for i=1:m for j = 1 : n H(i. La sentencia for permite usar cualquier matriz como incremento en vez de 1:n. f or i = n : −1 : 1. La forma general del ciclo while es while (relación) sentencias end Las sentencias se ejecutan repetidamente mientras que relación permanezca cierta. end hacen lo mismo pero en sentido inverso. las siguientes ordenes calculan y muestran el menor entero no negativo n tal que 2n ≥ a: .7. RELACIONES 9 produce un vector de n componentes y las sentencias x = [ ]. i∧ 2]. WHILE. While. sum(sum(A)) realiza esta tarea más eficientemente). for c = A s = s + sum(c). end calcula la suma de todas las entradas de la matriz A sumando todas las sumas de sus columnas (Por supuesto. Por ejemplo. En OCTAVE se suele terminar el ciclo for con endfor.1. Por ejemplo. La última sentencia H muestra el resultado final. FOR. s = 0. IF. La variable contador simplemente asume consecutivamente los valores de cada columna de la matriz. j) = 1/(i+j-1). El punto y coma . end end H producen y muestran en pantalla la matriz de Hilbert m × n. en las sentencias interiores es esencial para evitar la impresión en pantalla de cálculos intermedios. dado un número a. Observar que una matriz puede estar vacı́a como indica la orden x = [ ]. aparte de acelerar el trabajo total. x = [x.

no.10 CAPÍTULO 1. 2) == 0) paridad = 2. Una ramificación múltiple también es posible: if ( n < 0) paridad = 0. Los operadores de relación son < menor que > mayor que <= menor o igual que >= mayor o igual que == igual ∼= distinto. se reemplaza elseif por else. Observar que “=” se usa en una sentecia de asignación mientras que “==” se usa en una relación. elseif ( rem(n. Las relaciones se pueden conectar o cuantificar mediante operadores lógicos & and. En OCTAVE se suele terminar el condicional if con endif. end n En OCTAVE se suele terminar el ciclo while con endwhile. o ∼. y | or. La forma general de una sentencia simple if es if (relación) sentencias end Las sentencias se ejecutan sólo si la relación es verdadera. while ( 2∧ n < a) n = n + 1. ! not. Relaciones. . INTRODUCCIÓN A MATLAB Y OCTAVE n = 0. end En una ramificación doble. If. else paridad = 1.

b = triu(a). WHILE. Una relación entre matrices se interpreta por while e if como verdadera si cada entrada de la matriz relación es no cero. FOR. Cuando se aplica a matrices de la misma talla. 3 >5. una relación es el escalar 1 o 0 dependiendo de si es verdadera o falsa. Intenta a = rand(5). 3 == 5.7. dos any son requeridos puesto que any es una operación vectorial. Se puede observar introduciendo 3 <5. una relación será otra matriz de la misma talla con 0’s y 1’s dando el valor de la relación en cada entrada. . IF. se puede hacer como if ( any(any(A ∼= B))) sentencias end o bien if ( A == B) else sentencias end Observar que la aparente if ( A ∼= B) sentencias end no produce el efecto deseado puesto que las sentencias se ejecutarán sólo si cada entrada correspondiente de A y B difiere. y 3 == 3. RELACIONES 11 Cuando se aplica a escalares. En el ejemplo anterior. Las funciones any y all pueden ser usadas de forma creativa para reducir relaciones matriciales a vectores o escalares. a == b.1. si se quieren ejecutar unas sentencias cuando las matrices A y B son iguales se puede usar if ( A == B) sentencias end pero si se quieren ejecutar cuando A y B no lo son. Por lo tanto.

la máxima entrada de una matriz A viene dada por max(max(A)) en vez de max(A). mean(A’)’.12 CAPÍTULO 1. por ejemplo. Funciones escalares. para devolver un vector fila con los resultados de la aplicación de la función a cada columna. pero lo hacen elemento a elemento cuando actuan sobre matrices. norma-2. INTRODUCCIÓN A MATLAB Y OCTAVE 1. Una acción sobre cada fila se puede obtener usando la transpuesta. vectoriales y matriciales Algunas funciones operan esencialmente sobre escalares. las más útiles son eig autovalores y autovectores chol factorización de Cholesky svd descomposición de acuerdo a los valores singulares (SVD) inv inversa lu factorización LU qr factorización QR hess forma de Hessenberg schur descomposición de Schur expm exponencial de la matriz sqrtm raiz cuadradad de la matriz poly polinomio caracterı́stico det determinante size talla norm norma-1.8. fila o columna y lo hacen sobre una matriz m × n (m ≥ 2) haciendolo sobre cada columna. norma-Frobenius. Algunas de estas funciones son max sum median any min prod mean all Por ejemplo. Mucha de la potencia de MATLAB y OCTAVE proviene de sus funciones ma- triciales. norma-∞ cond número de condición en la norma-2 rank rango . Las funciones más comunes son sin asin exp abs round cos acos log(base e) sqrt f loor tan atan rem(resto) sign ceil Otras funciones operan esencialmente sobre un vector.

f lops Si se quieren comparar las gráficas de las funciones y = sin(m x) e y = sin(n x) en el intervalo [0. Ctl-e. Edición y recuperación de comandos en lı́nea El cursor se puede posicionar sobre la lı́nea de edición de comandos con las teclas de las flechas izquierda/derecha y de Backspace (o Delete).m que requiere moverse entre el editor de texto y la sesión de trabajo.y. Por ejemplo. esto puede ser más conveniente que usar un fichero del tipo *.x. para observar el costo de calcular la inversa de matrices de varias tallas se puede ejecutar mediante la recuperación. uno puede hacer lo mismo con los comandos: m=2. Ctl-d y Ctl-k también funcionan. sobre un sistema Unix o PC los comandos Emacs Ctl-a. EDICIÓN Y RECUPERACIÓN DE COMANDOS EN LÍNEA 13 Las funciones pueden tener una salida simple o múltiple en cuanto al número de argumentos. ver help cedit o type cedit.9. y = eig(A). z=cos(n*x). Se puede recuperar un comando an- terior y modificarlo para volver a ejecutarlo con una nueva variación. n=3. o eig(A) produce un vector columna con los autovalores de A mientras que [U.z) 1. ya lo veremos más adelante. El uso creativo de estas facilidades para .01:2*pi. End y Delete. Es muy conveniente el uso de las teclas de las flechas arriba/abajo puesto que permiten repetir o buscar comandos previos. 1. plot(x. Para tareas simples. Por ejemplo.9. Submatrices la notación : Vectores y submatrices se usan frecuentemente para conseguir manipular datos u objetos de forma compleja. x=0:.10. 2π] para varios m y n. y=sin(m*x).1. Los dos puntos : (que se usan para generar vectores y referenciar submatrices) y la indexación mediante vectores de enteros son clave en la manipulación de estos datos u objetos. D] = eig(A) produce una matriz U cuyas columnas son los autovectores de A y una matriz diagonal D con los autovalores de A sobre su diagonal. modificación y ejecución las órdenes a = rand(8). f lops(0). sobre otros sistemas. inv(a). También se puede intentar sobre un PC las teclas Home.

y = sin(x). [2.1:2. Si a > b se almacenan en orden decreciente y si n no aparece. La expresión 1:5 es el vector fila [1 2 3 4 5]. Ni los números ni el incremento necesitan ser enteros. 3 4] : A(:. :) son las primeras cuatro filas. genera un vector y del vector x. n) similar a linspace pero ahora se usan valores logarı́tmicamente espaciados desde 10a a 10b .4. [x y] Observar que. 3 4]. Si x es un vector de n componentes se puede observar el efecto de x = x(n:-1:1) y de y = fliplr(x) y y = flipud(x’). y A(1 : 4. 4]) ∗ [1 2. 3) es la tercera columna de A. La siguientes órdenes generan una tabla de senos.0:0. 0. También se puede usar las formas: t = linspace(a. [2 4 5]) = B(:. 1. t = logspace(a. ası́: A(:. x = [0.14 CAPÍTULO 1.0. Por ejemplo. n) que genera el vector de a a b con n (entero) número de elementos. se usa por defecto n = 100. o C para obtener el mismo resultado. Es evidente la ventaja que estos comandos de MATLAB y OCTAVE represen- tan en comparación con lo que se precisa hacer en otros lenguajes como Pascal. FORTRAN. . Con los : también se puede acceder a submatrices de una matriz. 4]) = A(:.6. b. Si b = π los puntos son espaciados desde 10a y π. Las columnas 2 y 4 de A se pueden multiplicar por la derecha por la matriz 2 × 2 dada por [1 2. 1. y 5 : −1 : 1 es [5 4 3 2 1]. Esta indexación se puede usar en ambos lados de una sentencia de asignación: A(:.2 : 0. como sin opera entrada a entrada. [2 4]) contiene como columnas la 2 y la 4 de A. Con : se denota una fila o columna entera de la matriz: A(:.4 y 5 de A con las tres primeras columnas de B. 0. A(1 : 4. 1 : 3) reemplaza las columnas 2. Por ejemplo. INTRODUCCIÓN A MATLAB Y OCTAVE vectorizar operaciones permite minimizar el uso de ciclos (que frenan la rapidez de MATLAB y OCTAVE) y crear códigos simples y de fácil lectura.2 da [0.2 : 1. 0. Se incluye a y b.8.2]. 3) es el vector columna con las primeras cuatro entradas de la tercera columna de A. b.0]’. Vectores de enteros también se pueden usar para indexar los elementos de una matriz. 0. [2.2.

Los archivos de función extienden las capacidades de MAT- LAB u OCTAVE en el sentido de que se pueden crear nuestras propias funciones para nuestro problema particular. .a.m (M-files) Se pueden ejecutar una serie de comandos almacenados en un fichero grabado en disco. Los programas principales. % randint(m. La mayor parte del trabajo consiste en crear y refinar archivos *. FICHEROS *. Si por ejemplo.m. o script files (archivos con el guión) están formados por una secuencia de comandos y sentencias. Programas principales.m puede referenciar otros *.M (M-FILES) 15 1. Las variables en un programa principal son globales y cambiarán el valor de las variables con el mismo nombre que ya existan en el entorno de trabajo.11.m mediante un editor de texto.n) % RANDINT Genera aleatoriamente una matriz de enteros.n.n) devuelve una matriz m × n con entradas % entre 0 y 9. o en la memoria de la sesión de trabajo actual. Estos archivos guión se pueden usar para introducir datos en una gran matriz. Archivos de función. Ası́ los errores en una entrada particular son fácilmente corregibles. Un archivo *. Una versión más general es: function a = randint(m. Existen dos tipos de ficheros *.n)). lo llamamos ejemplo. son los programas principales y archivos para definir funciones (function files). y que se pueden usar después como cualquier otra función.1.b) % RANDINT Genera aleatoriamente una matriz. la orden ejemplo hará que todas las sentencias en ejemplo. a =floor(10*rand(m. % randint(m.n) devuelve una matriz m × n con entradas % entre 0 y 9. Ficheros *.m: (script files) archivos con el guión de las or- denes a realizar.m incluyendose a sı́ mismo recursiva- mente. Estos ficheros se denominan “M-files”porque los terminamos en . Las variables en un archivo función son por defecto locales.m (esto es obligatorio en MATLAB y opcional en OCTAVE). Veamos un ejemplo: function a = randint(m.11.m se ejecuten por orden de aparición dentro del archivo.

El sı́mbolo % indica que el resto de la lı́nea es un comentario. stat(x) devuelve la media de x. if ( nargin < 3) a = 0. % caso de un vector fila end media = sum(x)/m. los argumentos de entrada y de salida.5) pasa los valores 4 y 5 a las variables m y n en la función y la salida de la función se le pasa a la variable z. end a = floor((b-a+1)*rand(m. Puesto que las variables en un fichero de función son locales.n. el comando [xm. sin esta lı́nea el fichero serı́a un programa principal ( script file) más. b = 9.m (que corresponde con el nombre de la función). stdev] = stat(x) % STAT Media y desviación estandard % para un vector x. La primera lı́nea lleva la palabra clave function que declara el nombre de la función.n)) +a. que documentan el fichero *.m.m debe de realizarse siempre. La orden z = randint(4. Observar que el uso de nargin (“número de argumentos de entrada”) permite dar un valor por defecto a una variable de entrada omitida. La documentación de un fichero *. en OCTAVE se terminan los archivos de funciones con la palabra clave endfunction. n que puedan ya existir en el entorno de trabajo actual. % Para una matrix x. stdev] = stat(x) media y desviación estandard. están disponibles como ayuda usando help stat. Opcionalmente. xd] = . INTRODUCCIÓN A MATLAB Y OCTAVE % rand(m.media.16 CAPÍTULO 1. Por ejemplo: function [media. stat(x) actua en cada columna.m. % [media.∧ 2). if ( m == 1) m = n. Estas ordenes se deben de guardar en un archivo con el nombre randint. MATLAB y OCTAVE ignorarán el resto de las lı́neas que empiecen con % (OCTAVE también acepta # para los comentarios).∧ 2)/m . stdev = sqrt(sum(x. Una vez estas órdenes son guardadas en un archivo stat. Además.b) devuelve entradas entre a y b. las primeras lı́neas de comentario. sus nombres son independientes de las otras m. como por ejemplo lo son a y b. [m n] = size(x).a. Una función puede tener también varios argumentos de salida.

ver también eval. E = zeros(6. function [b. que x. Sin esto. que sum es una función vectorial y que sqrt es una función escalar. Por lo tanto. Algunos otros detalles más avanzados se ilustran en la siguiente función. FICHEROS *. % Normalmente las funciones son definidas en ficheros *. Como ya hemos mencionado. el espacio para almacenar E en memoria es predeterminado. respectivamente. mediante el uso de nargin (“número de argumentos de entrada”). j) = eig(M∧ i). Si no se es capaz de vectorizar algunos cálculos. “no cero” sig- nifica “true” y 0 significa “false”. . Cuando while o if evalua una relación. Observar también como se usa el hecho de que una relación es 1 cuando verdad y 0 cuando falsa. % fun es una cadena de caracteres con el nombre de la función. por ejemplo. se debe de redefinir la talla de E incre- mentándola una columna en cada iteración y ralentizando la ejecución. la función feval permite tener como variable de entrada la cadena de caracteres que denota otra función. xm = stat(x) (sin corchetes en torno a xm) asigna la media de x a xm. asigna la media y la desviación estandard de las entradas del vector x a xm y xd. x.m. La variable nargout se puede usar de forma similar. M = magic(6). 50). Observar. por ejemplo.M (M-FILES) 17 stat(x). Por ejemplo. steps] = bisect(fun.11. tol) % BISECT da el cero de una función de una variable via bisección. la división en sum(x)/m es una operación matriz- escalar. for j = 1 : 50 E(:. algunos de los argumentos de entrada en una función se pueden hacer opcionales. % bisect(fun. que usa la función zeros.∧ 2 es la matriz de los cuadrados de las componentes de x.1. La función stat ilustra algunas de las capacidades MATLAB y OCTAVE para producir un código eficiente. todas las operaciones están vectorizadas y los ciclos han sido evitados. Por ejemplo. Además. se puede conseguir que los ciclos for vayan más rápido mediante la predeterminación de vectores o matrices en los que la salida se almacene.x) devuelve un cero de la función. por ejemplo tol en esta función. end incluyendo la segunda orden. Finalmente. Una asignación simple puede también hacerse con una función con varios argumentos de salida.

% Se busca cambio de signo.a).0 ∗ dx. fb = feval(fun. % bisect(’sin’. b = x + dx. Observemos las comillas entorno a sin.a). INTRODUCCIÓN A MATLAB Y OCTAVE % x es un valor inicial.3) es pi. fa = feval(fun. % % Un tercer argumento de entrada determina una tolerancia. while ( (f a > 0) == (f b > 0)) dx = 2. fb = feval(fun. % Un segundo argumento de salida opcional da una matriz % con la traza de los pasos. la % precisión relativa del resultado (por defecto: eps). El valor devuelto es cercano % a un punto donde fun cambia de signo.dx. end . end trace = (nargout == 2). if ( (f a > 0) ∼= (f b > 0)) break end b = x + dx.18 CAPÍTULO 1. Por ejemplo . a = x .dx.b). end if (trace) steps = [a fa. b fb]. % Inicialización if ( nargin < 3) tol = eps.b). else dx = 1/20. end a = x . fa =feval(fun. if ( x ∼= 0) dx = x/20. las filas son [c f(c)].

m. mensajes de error. if (trace) steps = [steps. end if ((f b > 0) == (f c > 0)) b = c. Por ejemplo.5*(b . fa = fc. fb = fc. En un fichero *. Por ejemplo.c). end end Algunas de las funciones son internas mientras que otras se distribuyen como ficheros *. s = ’Esto es una prueba’ asigna el texto a la variable s.12. ENTRADA 19 % ciclo principal while (abs(b − a) > 2. La opción al final \n representa el salto a una nueva lı́nea.a). Por ejemplo: disp(’Hola que tal?’) Los mensajes de error se muestran mejor con la función error error(’Perdon. 1. 1.1.m el usuario puede ser requerido a introducir datos con la función input. Cadenas de caracteres.12.0 ∗ tol ∗ max(abs(b). la orden iter = input(’Introduce el número de iteraciones: ’) muestra el mensaje. Por ejemplo. fc =feval(fun.m para la ejecución. printf(’Hola que tal?\n’). else a = c.0)) c = a + 0. la matriz debe de ser simetrica’) puesto que dentro de un fichero *. entrada Las cadenas de caracteres se introducen entre comillas simples. CADENAS DE CARACTERES. MENSAJES DE ERROR. Mensajes de texto se pueden mostrar en MATLAB y OCTAVE mediante la fun- ción disp. interrumpe la ejecución hasta que el usuario . [c fc]]. Mensajes de texto también se muestran en OCTAVE mediante la orden printf. Con la orden type nombrefuncion se puede ver el contenido de la función nombrefuncion.

Sin embargo en sistemas permitiendo tareas múltiples es preferible mantener los dos activos.m. El comando flops(0) (que no flops = 0) inicializa flops a 0. Por ejemplo. usamos el editor de texto vi.m nos permitirá editar el archivo rotar. La lista de directorios en el camino de búsqueda se obtiene con la orden path.m Es mejor crear o editar para modificar un fichero *. este se puede realizar sin salir de la sesión de trabajo. Despues de salir del editor. Si por ejemplo. tic y toc Dos medidas de la eficiencia de un algoritmo son el número de operaciones en coma flotante (flops) realizados y el tiempo empleado.20 CAPÍTULO 1. el número de flops requerido para resolver . volveremos a la sesión de trabajo donde la dejamos. cada uno de ellos en una ventana distinta. Las comandos delete y type se pueden usar para borrar archivos o mostrarlos en pantalla respectivamente.m deben de estar en un directorio accesible a MATLAB y OCTAVE.m. la orden >> vi rotar. Entonces la ejecución se resume y el valor se ha asignado a iter. Comparando la eficiencia de algoritmos: flops. Posiblemente. Todos los *.13. El comando pwd devuelve el nombre de el directorio de trabajo presente y con cd es posible cambiarlo. 1. Esto se puede realizar mediante la orden !. MATLAB u OCTAVE y el editor de texto. cualquier comando de sistema. INTRODUCCIÓN A MATLAB Y OCTAVE introduce un dato y presiona la tecla de retorno.14. Trabajando con archivos *. Este comando se puede usar para incluir o eliminar directorios del camino de búsqueda. Los archivos *. Entonces. ver help path 1. Con dir o ls se pueden listar los contenidos del directorio de trabajo y con what se muestran sólo los archivos *. puesto que si salimos perderiamos todas las variables activas en esa sesión. poniendo flops(0) inmediata- mente antes de ejecutar un algoritmo y flops justo después da el número de flops realizados en el algoritmo.m en el directorio de trabajo actual lo son.m sin salir de la sesión actual de trabajo. La función flops guarda un total de los flops realizados. Si precedemos de !.

x = A\b. toc devuelven el tiempo gastado en la ejecución de sentencias. Como ejemplo..15. las ordenes tic. puesto que depende de lo ocupado que esté el computador en ese momento. Por ejemplo. Las opciones loose y compact son independientes de los otros formatos. permanece hasta que se cambia. tic empieza el reloj y toc devuelve el tiempo pasado. se puede comparar en cuanto a flops y tiempo con la orden x = inv(A)*b. 1. Se debe observar que en las máquinas en las que se comparte el tiempo de cálculo con otros usuarios. toc se obtiene el tiempo usado en resolver el sistema lineal. . el tiempo pasado no es una buena referencia.15.1. x = A\b. Por lo tanto. sentencias. f lops El tiempo usado (en segundos) puede ser obtenido con las ordenes tic y toc. con: tic. FORMATOS DE SALIDA 21 un sistema lineal mediante eliminación de Gauss se puede obtener con: f lops(0). Formatos de salida Todos los cálculos se realizan en doble precisión. pero el formato de salida en pantalla se puede controlar con los siguientes comandos format short 4 decimales (por defecto) format long 14 decimales format short e notación cientı́fica con 4 decimales format long e notación cientı́fica con 15 decimales format rat aproximación por el cociente de enteros format hex formato hexadecimal format loose introduce lı́neas en blanco en la salida (por defecto) format compact elimina las lı́neas en blanco en la salida (recomendada) Una vez que se ejecuta el formato.

siempre hay una que es la activa. Gráficas MATLAB y OCTAVE generan gráficas planas de curvas 2-D.16. y no se nos avisa. Por ejemplo. se puede dibujar la función seno en el intervalo de -4 a 4 con los comandos: x = −4 : . si x e y son vectores de la misma longitud. Por ejemplo. INTRODUCCIÓN A MATLAB Y OCTAVE 1. la función sin opera en cada componente del vector x. la orden figure(2) (o simplemente figure) abre una segunda ventana que queda como la activa.2251e-308) inf.22 CAPÍTULO 1. La variable eps devuelve la diferencia entre 1. mesh. si la figura 1 es la activa.I. da una idea de la precisión.j. por ejemplo. plot3.J unidad imaginaria −1 pi número π e número e eps precisión en operaciones de punto flotante realmax mayor número real positivo representable (1. Los comandos principales para ello son plot. Se pueden tener varias gráficas en distintas ventanas. La forma de trabajar es similar. j. Gráficas planas. 1. gsplot y mesh en OCTAVE. un número sumado a NaN da NaN. Existen otras más √ i. Variables Especiales y Constantes Ya hemos visto el uso de las variables de valor fijo (predeterminado) i. Es decir. plot(x. El vector x es una partición del intervalo con separación entre puntos de 0. por lo tanto.01 : 4. la orden plot(x.0 y el número flotante inmediatamente superior. La orden figure(1) . y = sin(x). Resultado de operaciones sin sentido como 0/0 Especial cuidado debe de tenerse con inf y NaN puesto que se propagan en las operaciones matemáticas.7977e+308) realmin menor número real positivo representable (2. -inf números fuera del rango representable NaN Not a Number.01 mien- tras que y es un vector con los valores del seno en los nodos de la partición.y) abre una ventana y dibuja los elementos de x versus los de y. La orden plot crea gráficas lineales x-y.17. 3-D y de superficies. y surf en MATLAB y gplot o plot. y).

La orden gcf devuelve el número de la figura activa. plot(x.5.17. t=0:. y=sin(2*t).∧ 2). [−1.m.m y conteniendo function y = expnormal(x) y = exp(-x. Los siguientes comandos toman una cadena de caracteres como argumento title dibuja titulo xlabel etiqueta eje x ylabel etiqueta eje y gtext pone texto sobre la figura usando el ratón text posiciona texto en las coordenadas Por ejemplo. x=cos(3*t). La orden gtext(’El punto’) permite situar interactivamente el texto en la figura con el ratón. para dibujar y = e−x primero se define la función en un fichero *.5 a 1. 2 Por ejemplo. 1. Entonces la orden f plot(0 expnormal0 . plot(x.5]) produce la gráfica. llamado por ejemplo expnormal.1. La orden grid muestra lı́neas de malla sobre la figura actual. los ejes pueden tener etiquetas y se puede poner texto dentro de la figura.01:1.5: x = -1. la orden title(’Aproximacion por minimos cuadrados’) da un tı́tulo a la gráfica. y = exp(-x. . MATLAB tiene la función fplot para poder realizar la gráfica de una función. Para situar texto en unas determinadas coorde- nadas. Curvas paramétricas pueden ser también dibujadas.001:2*pi. y = e−x en el intervalo -1.y) Las gráficas pueden tener tı́tulos. 2 Otro ejemplo. Por ejemplo. se usa text (ver help text).y) Observar que se debe de preceder ∧ por un punto para asegurar que opera en cada componente de x.∧ 2).5:.5. GRÁFICAS 23 mostrará la figura 1 y la pondrá como activa.

y1=sin(x).’:’.x. azul (b). INTRODUCCIÓN A MATLAB Y OCTAVE Por defecto.y. Los ejes pueden ser reescalados de todas formas. rojo (r). puntos y colores establecidos por defecto.24 CAPÍTULO 1.’+’) da una lı́nea discontı́nua y una de puntos para las dos primeras curvas mientras que para la tercera el sı́mbolo + se pone en cada nodo.y3) y segundo.’–’.signo + (+).ymı́n . negro (k) Por ejemplo. blanco (w). Los tipos de lı́nea y marcas son Tipos de lı́nea: sólida (-). plot(x.’r--’) dibuja una lı́nea roja discontı́nua. La orden hold on congela la figura actual y la gráfica siguiente se realiza sobre ella.x.ymáx ]) pone los ejes según los lı́mites descritos axis(axis) mantiene escala en las siguientes gráficas axis auto devuelve al escalado automático v = axis devuelve el vector v con la escala actual axis square misma escala en ambos ejes axis equal misma escala y marcas en ambos ejes axis off elimina la escala y las marcas de los ejes axis on devuelve la escala y marcas a los ejes La orden axis debe de darse después de la orden plot.01:2*pi. Dos formas de obtener gráficas múltiples dentro de una misma figura son.y3=sin(4*x).x.y2=sin(2*x). verde (g). Con hold off se elimina la opción “hold. x (x) Los colores se pueden especificar también para marcas y lı́neas Colores: amarillo (y). sin(2*x)’. formando una matriz Y con los valores funcionales como columnas x=0:. y3=sin(4*x).x.y1.xmáx . puntos (:). x=0:. y1=sin(x). los ejes se escalan automáticamente.) Tipos de marcas: puntos (. punto lı́nea (-.Y) Otra forma es con la orden hold.01:2*pi. Esto se puede eliminar con el comando axis. . primero x=0:. y2=sin(2*x). sin(4*x)’].” Se pueden cambiar los tipos de lı́neas.01:2*pi. plot(x.y2. circulo (o). Por ejemplo. discontı́nua (--). plot(x.y3. plot(x.y2. cyan (c). Y=[sin(x)’. Algunas opciones de axis son: axis([xmı́n . magenta (m).y1. estrella (*).).

yy). Si x. y y z son tres vectores de la misma talla. primero definimos los vectores xx e yy que proporcionan la partición sobre los lados del rectángulo. Con la función meshgrid (meshdom en OCTAVE) se crea la matriz x.z) produce una hélice comprimida cerca del plano x-y. si z = e−x −y y el dominio es [−2.y. t=. yy = xx. rose. Como en el caso de curvas en el plano. se pueden usar tı́tulos y etiquetas para los ejes. [x. y) sobre un rectángulo. Otras funciones para hacer gráficas 2-D y que se pueden explorar con la or- den help son: polar. Por ejemplo. Entonces se calcula la matriz z.y.1.y] = meshgrid(xx. Superficies 3-D. 2] haremos: xx = -2:. obtenida evaluando f en sobre cada entrada de las matrices x e y. donde cada fila es xx y la longitud de cada columna es la de yy.z) produce una gráfica en perspectiva de la curva lineal a trozos que pasa por los puntos del espacio 3-D de coordenadas x. Para dibujar la función z = f (x. Estos vectores se definen usualmente de forma paramétrica. quiver.∧ 3. La orden mesh(z) crea una gráfica 3-D en perspectiva de los elementos de la matriz z. Intenta surf(eye(10)) y mesh(eye(10)). ver help subplot. 2 2 Por ejemplo. x=cos(t). y] = meshgrid(xx.2:2. incluyendo ahora el eje z con zlabel.yy). GRÁFICAS 25 La orden subplot puede ser usada para subdividir la pantalla y poder situar varias gráficas dentro de una misma figura. bar. compass. stairs. feather.01:20*pi. Similarmente se crea la matriz y.17. cada columna iguala a yy. De forma análoga plot en 2-D. fill Gráficas de curvas 3-D. como sigue: [x. la orden plot3 produce curvas en tres di- mensiones espaciales. También el comando axis se puede usar. hist. aunque ahora para prescribir las escalas de los ejes necesitaremos 6 valores. La malla base es rectangular en el plano x-y y se define con los ı́ndices de la matriz mientras que la superficie con los valores de Z para cada par de ı́ndices También se puede usar el comando surf.01:. 2] × [−2. la orden plot3(x. z=t. plot3(x. . y y z. y=sin(t). Entonces usamos mesh o surf.

5. El color de una superficie se controla con colormap. copper. flag.2:2).y. n es el número de % caras sobre la superficies. verhelp view. % % [x. % % Ver también SPHERE. interpolated y flat eliminan las lı́neas de malla. Se seleccionan con la orden shading faceted. colormap y view deben de introducirse después del comando surf. Las ordenes shading. cool. El sombreado de las superficies se fija con la orden shading. CYLINDER .a) genera tres (n+1)-(n+1) % matrices y surf(x. gray. Las fun- ciones de MATLAB sphere y cylinder generan las superficies referidas (ver type sphere y type cylinder).z] = toro(r.y.∧ 2 . shading interp. La orden view se usa para especificar el punto de vista del objeto en coordenadas esféricas o cartesianas. hot. -2:. pink.∧ 2). mesh(z) Se pueden reemplazar las tres primeras lı́neas con [x.z] = toro(r. jet.z) produce el toro.2:2. interpolated y flat.n. bone y se determinan mediante colormap(cool). y]= meshgrid(-2:.a) genera un toro con radio central a % y radio lateral r.a) % TORO Genera un toro % toro(r. Valores por defecto son % r = 0. Hay tres opciones: faceted (defecto). Valores posibles son: hsv (defecto). shading flat Sobre las superficies producidas con surf. n = 30. Superficies definidas en forma paramétrica se pueden también obtener. Intentalo con surf en vez de mesh.n. El siguiente ejemplo genera un toro: function [x.26 CAPÍTULO 1. INTRODUCCIÓN A MATLAB Y OCTAVE z = exp(-x.y.y. a = 1.n.

contour. t. end theta = pi*(0:2:2*n)/n.pcolor 1. dado el dato inicial del sistema x0. end if ( nargin < 2) n = 30. end if ( nargin < 1) r =0. para t ≥ t0. La función lsode(f cn. surfl. OCTAVE posee una funcion interna construida para la resolución de este tipo de problemas y es la función lsode. x0.18. y = yy. axis([-ar. tcrit ). Ecuaciones Diferenciales Ordinarias Queremos ahora resolver ecuaciones de la forma d x(t) = f (x(t). xx = (a + r*cos(phi))*cos(theta).ar]) else x =xx.1. tcrit ) devuelve una matriz de x como función de t. surfc. Ası́ la primera fila corresponde con x0.18.ar.ar. t.5. x(t = t0) = x0 dt que se denominan Ecuaciones Diferenciales Ordinarias con un valor inicial. if ( nargout == 0) surf(xx. . z = zz. end Son interesantes de explorar via help las funciones meshz.-ar. ECUACIONES DIFERENCIALES ORDINARIAS 27 if ( nargin < 3) a = 1. x0. Cada fila en x corresponde a un valor de t. phi = 2*pi*(0:2:n)’/n. Su forma general es : lsode(f cn.-ar. yy = (a +r*cos(phi))*sin(theta).zz) ar = (a + r)/sqrt(2).yy. zz = r*sin(phi)*ones(size(theta)). t).

tcrit es opcional y se suele usar para indicar un tiempo máximo a partir del cual no se debe de resolver la ecuación. x0. El cuarto argumento.3) para obtener una precisión media.28 CAPÍTULO 1. Se podrá observar un cambio brusco de la solución entre t = 0 y t = 5 y en torno a t = 305. logspace(−1. endfunction con la condición inicial x0 = [ 4.27 ∗ (x(2) − x(1) ∗ x(2) + x(1) − 8. t). mientras que ode45 emplea una fórmula de tipo (4.161 ∗ (x(1) − x(3)). El sistema se puede integrar con t = linspace(0. 1000). Nosotros usaremos ode23 y ode45. Si tiempo contiene más . 1). xpunto(3) = 0. function xpunto=fcn(x. o de tiempos t más eficiente es t = [ 0. 4 ]. Por ejemplo. t) donde xdot y x son vectores y t es un escalar. 1. y = lsode(0 f cn0 .27. Debe de ser de la forma xpunto = f cn(x. x0) El primer argumento f cn es la cadena de caracteres que representa la función f y debe de ser de la forma xpunto = f cn(x. log10(303). Estas funciones emplean métodos de integración del tipo de Runge-Kutta explı́citos.t) xpunto = zeros(3. 500. xpunto(1) = 77. tiempo.375e − 06 ∗ x(1)∧ 2). 150). logspace(log10(304).5) para obtener una gran precisión. MATLAB posee varias funciones internas para la resolución de Ecuaciones Difer- enciales Ordinarias con un valor inicial. La forma general es [ t. log10(500). ode23 emplea una fórmula de tipo (2. t) donde xdot y x son vectores y t es un escalar. Un conjunto de puntos. x ] = resolutor(f cn. 150) ].1. Resulta útil ante problemas como singularidades y puntos de discontinuidad. INTRODUCCIÓN A MATLAB Y OCTAVE El primer argumento f cn es la cadena de caracteres que representa la función f . xpunto(2) = (x(3) − x(1) ∗ x(2) − x(2))/77. La variable tiempo representa el intervalo de integración y x0 es el vector de datos iniciales.

∗ x(1). 4). x1.18.∧ 2. x(0) = 1. Por ejemplo. x0). 0.1. . dt en los tiempos t = 0. x0). 1 usamos lo siguiente: function dx=xfun(x. tiempo. 1. tiempo. [ t2.75.5. x2] la última orden crea una tabla con los resultados. para buscar la solución de d x(t) = −2 t x2 . [ t1. la ecuación se puede integrar con x0 = 1. x2 ] = ode45(0 xf un0 . 0. tiempo = linspace(0.25. x1 ] = ode23(0 xf un0 . ECUACIONES DIFERENCIALES ORDINARIAS 29 de dos elementos.t) dx = −2 ∗ t. 0. [t1. entonces el resolutor devuelve los valores calculados de x en esos valores como tiempos.