• No se han encontrado resultados

TUTORIAL DE INTRODUCCIÓN A MATLAB

N/A
N/A
Protected

Academic year: 2019

Share "TUTORIAL DE INTRODUCCIÓN A MATLAB"

Copied!
28
0
0

Texto completo

(1)

TUTORIAL DE

INTRODUCCIÓN A MATLAB

Manuel Vargas Villanueva

(2)

1 INTRODUCCI ´ON A MATLAB 1

1.1 Introducci´on . . . 1

1.2 Instalaci´on . . . 2

1.3 Primeros pasos . . . 4

1.4 Funciones y s´ımbolos relacionados con el entorno . . . 4

1.5 Introducci´on de datos. Uso de la ventana de comandos . . . 6

1.6 Variables de entorno y variables especiales . . . 7

1.7 Elementos de las matrices . . . 8

1.8 Operaciones con matrices. . . 9

1.9 Funciones orientadas al an´alisis de datos . . . 10

1.10 Polinomios . . . 10

1.11 Otras funciones de inter´es. . . 11

1.12 Gr´aficos . . . 12

1.13 Programando en matlab . . . 14

1.13.1 Operadores l´ogicos y relacionales . . . 14

1.13.2 Bucles y estructuras condicionales . . . 14

(3)

2 CONTENIDO

1.13.3 Ficheros .m . . . 16

(4)

INTRODUCCI ´

ON A MATLAB

1.1

Introducci´

on

En estas notas se pretende realizar una introducci´on muy b´asica a matlab, orient´andola en el siguiente cap´ıtulo al estudio de sistemas de control. En l´ıneas generales, matlab es una herramienta interactiva basada en matrices para c´alculos cient´ıficos y de ingenier´ıa (de hecho, el t´erminomatlabprocede dematrix laboratory). Desde el punto de vista del control, matlabse puede considerar un entorno matem´atico de simulaci´on que puede utilizarse para modelar y analizar sistemas. Permitir´a el estudio de sistemas continuos, discretos, lineales y no lineales, mediante descripci´on interna y externa, en el dominio temporal y frecuencial.

matlabconstituye un entorno abierto, para el cual numerosas paquetes espec´ıficos adicionales (toolboxes) han sido desarrollados. En el caso que nos ocupa se utilizar´a fundamentalmente elControl System Toolbox. Estos paquetes espec´ıficos adicionales est´an constituidos por un conjunto de funciones que pueden ser llamadas desde el programa y mediante las cuales se pueden realizar multitud de operaciones.

Las referencias al Control System Toolbox se realizar´an directamente en los ejemplos que acompa˜nan a estas notas.

Las notas se centrar´an fundamentalmente en aquellos aspectos y funciones que m´as inter´es tengan desde el punto de vista de control, instando al lector a que busque en el manual de usuario cualquier informaci´on adicional que desee ([4], [3], [2]). Para el desarrollo de las mismas se ha utilizado asimismo, una serie de referencias b´asicas en control: [1], [5], [6], [7], etc.

(5)

2 Instalaci´on

1.2

Instalaci´

on

La forma normal en la que se encuentra el sistema una vez instalado es la siguiente (versi´on 3.5.1):

\matlabr11\bin \extern \help \notebook \simulink \sys \toolbox

\control \local \matlab \simulink \work

El n´ucleo fundamental de matlab se encuentra en los subdirectorios BIN y MATLAB. En BIN se encuentran los programas ejecutables. El subdirectorio MATLABcontiene los ficheros .m(aunque ser´an explicados posteriormente, comentamos brevemente que consisten en ficheros escritos a base de comandos dematlaby que realizan una funci´on determinada), que contienen las funciones b´asicas para el funcionamiento dematlab. En este sentido, es necesario comentar quematlab cuenta con dos tipos b´asicos de funciones:

Funciones denominadas built-in functions: Son funciones que matlab tiene incorporadas internamente y por tanto no son accesibles al usuario.

Funciones llamadas m functions: Son funciones cuyo c´odigo es accesible. Las que se en-cuentran en el subdirectorio MATLAB son las b´asicas para el funcionamiento del sistema.

(6)

matlab\general - Comandos de prop´osito general

matlab\ops - Operadores y caracteres especiales

matlab\lang - Constructores del lenguaje de programaci´on

matlab\elmat - Matrices elementales y manipulaci´on matricial

matlab\elfun - Funciones matem´aticas elementales

matlab\specfun - Funciones matem´aticas especiales

matlab\matfun - Funciones matriciales - ´algebra lineal num´erica

matlab\datafun - An´alisis de datos y transformada de Fourier

matlab\polyfun - Interpolaci´on y polinomios

matlab\funfun - Funciones de funciones y m´etodos para ODE

matlab\sparfun - Funciones para matrices dispersas

matlab\graph2d - Gr´aficos en dos dimensiones

matlab\graph3d - Gr´aficos en tres dimensiones

matlab\specgraph - Gr´aficos especializados

matlab\graphics - Manipulaci´on de gr´aficos

matlab\uitools - Herramientas de interfaz gr´afica de usuario (GUI)

matlab\strfun - Cadenas de caracteres

matlab\iofun - Funciones para entrada/salida de ficheros

matlab\timefun - Hora y fecha

matlab\datatypes - Tipos de datos y estructuras

matlab\winfun - Ficheros de interfaz con Windows (DDE/ActiveX)

matlab\demos - Ejemplos y demostraciones

simulink\simulink - Simulink

simulink\blocks - Librer´ıa de bloques de Simulink

simulink\simdemos - Ejemplos y demostraciones de Simulink

toolbox\control - Paquete de Control de Sistemas

toolbox\local - Librer´ıa de funciones locales

(7)

4 Primeros pasos

1.3

Primeros pasos

Una vez arrancado matlab , se abre la ventana de comandos en la que aparece el prompt o l´ınea de comandos (representado con el s´ımbolo ). Este es el momento de comentar la existencia del comando m´as famoso de cualquier aplicaci´on: help. Introduciendo este co-mando aparecer´an todas las citadasbuilt-in functions, tanto las contenidas en el subdirectorio

MATLAB, como otras contenidas en subdirectorios eventualmente a˜nadidos por el usuario (ver Tabla 1.1).

Para obtener informaci´on sobre cualquiera de las funciones se introducehelpnombre-funci´on.

Ejemplo: help impulse(impulse es una funci´on que calcula la respuesta impulsional de un sistema y que se encuentra en el control system toolbox).

Una cuesti´on importante a tener en cuenta es que matlab distingue entre may´usculas y min´usculas. En este sentido, los nombres de funci´on se introducir´an en min´usculas.

El comando demopermite obtener una demostraci´on de las ”posibilidades” de matlab.

1.4

Funciones y s´

ımbolos relacionados con el entorno

– Con el comando path puede comprobarse cu´ales son las localizaciones de los ficheros y programas con los que va a trabajarmatlab, pudiendo a˜nadirse nuevos subdirectorios (incluso personales) a conveniencia. La forma m´as c´omoda de interactuar con dichas localizaciones es mediante la opci´on File/Set-Path... en el men´u de la ventana de co-mandos. Para poder usar cualquier funci´on .m, como por ejemplo las contenidas en el paquete de control, bastar´a con que el camino\matlabr11\toolbox\control est´e in-cluido en elpathdematlab(cosa que ocurrir´a si el paquete se instal´o adecuadamente).

– Por otro lado,matlabcomienza trabajando, por defecto, en el subdirectoriomatlabr11\work. Si queremos cambiar de directorio de trabajo en cualquier momento, podemos hacerlo con el comando cd camino. Puede utilizarse en nombre completo del comando si se desea: chdir. Cabe decir que todas las funciones .m que existan en el directorio de trabajo ser´an localizadas sin necesidad de tener que incluir dicho directorio en el path de matlab.

– El comandopwd nos indica cu´al es el directorio de trabajo actual.

– Para mostrar el contenido del directorio de trabajo, se pueden emplear los comandosdir

´

(8)

– Resulta interesante tener en cuenta que la l´ınea de comandos dematlabposee ”memoria” y podemos recuperar comandos introducidos previamente, haciendo uso de las teclas de movimiento de cursor arriba y abajo. Para una localizaci´on m´as eficaz de alg´un comando introducido previamente, podemos teclear los primeros caracteres del mismo antes de usar el cursor arriba y s´olo buscar´a entre los comandos ya introducidos aqu´ellos cuyos primeros caracteres coincidan con los introducidos.

– Otra posibilidad que se ofrece es la de introducir varios comandos en una misma l´ınea de la ventana de comandos, separados por coma o punto y coma.

– Puede ”limpiarse” el contenido de la ventana de comandos mediante la instrucci´on clc.

– El s´ımbolo%sirve para introducir comentarios. Todo lo escrito desde ese s´ımbolo hasta el final de la l´ınea ser´a ignorado por el int´erprete dematlab. El uso de comentarios puede no resultar demasiado interesante en la l´ınea de comandos, aunque s´ı lo ser´a cuando se est´en escribiendo programas, como se ver´a m´as adelante.

– Si se quiere guardar toda la sesi´on en un archivo, basta usar el comando diary nombre-archivo. Dicho archivo contendr´a los comandos introducidos y los correspondientes resultados. Cuando no se quiera seguir almacenando la informaci´on se introducir´a

diary off.

– Si se desean almacenar todas las variables de memoria en un fichero, junto con sus valores actuales, se usa el comando save nombre-fichero. Esto crea un fichero binario en el directorio de trabajo actual con el nombre introducido y con extensi´on .mat. Si no se da el nombre del fichero, se crea uno llamado matlab.mat. En caso que se desee guardar en un fichero con formato ascii, se introducir´a en el comando un modificador:

save -ascii nombre fichero. Si s´olo se quieren guardar una serie de variables, se introducir´a save nombre-fichero nombre-variablesseparadas por espacios.

– Para recuperar los ficheros generados con el comandosavese utilizar´aloadnombre-fichero.

– El formato de visualizaci´on en la ventana de comandos puede modificarse usandoformat:

format long: Presentar´a mayor n´umero de decimales en pantalla al presentar los resultados en punto flotante.

format short: Es el modo por defecto, presenta un n´umero de decimales menor. Este formato no afecta para nada a la precisi´on de los c´alculos, es sencillamente una cuesti´on de visualizaci´on.

format compact: Deja menor n´umero de l´ıneas en blanco en la visualizaci´on de los resultados, permitiendo dar cabida a m´as informaci´on previa en la ventana de comandos sin necesidad de hacer scroll.

format loose: Es el modo por defecto, se dejan m´as l´ıneas de separaci´on durante la visualizaci´on.

Tambi´en puede modificarse el formato de visualizaci´on a trav´es de las opciones de men´u: File/Preferences/General

– Para detener la ejecuci´on de un comando, se usa Ctrl-C.

(9)

6 Introducci´on de datos. Uso de la ventana de comandos

1.5

Introducci´

on de datos. Uso de la ventana de comandos

El elemento b´asico enmatlabesla matriz compleja de doble precisi´on, estructura que abarca realmente todo tipo de datos, desde escalares tales como n´umeros reales o complejos, hasta vectores o matrices de tama˜nos arbitrarios. Impl´ıcitamente se usa la notaci´on matricial para introducir polinomios y funciones de transferencia, de la forma que se explicar´a m´as adelante. Por otro lado, si se dispone de una representaci´on de un sistema lineal en el espacio de estados de la forma:

˙

x = A x + B u y = C x + D u

bastar´ıa con introducir los valores de los elementos de las matrices A, B,C yD, para tener descrito al sistema. Estos elementos se podr´ıan introducir de la siguiente forma:

A=[1 0 2;2 2 0;0 0 1] B=[1, 0,0]’

C=[1 1 sqrt(2)] D=0;

A la vista de esta serie de comandos se pueden comentar varias cosas:

– Si al final de la introducci´on de un comando cualquiera no se pone punto y coma (;), aparecer´a expl´ıcitamente en pantalla el resultado de dicho comando. En caso contrario, el comando se ejecutar´a pero no se mostrar´a su resultado. Dicho resultado se habr´a almacenado en la variable a la que se asigna o, si no se realiza asignaci´on, se guardar´a en una variable de entorno llamada ans. En caso de que se asigne a una variable, ´esta se crear´a autom´aticamente, sin necesidad de una declaraci´on previa.

– Los elementos de cada fila de una matriz se pueden introducir separados por espacios o por comas, indistintamente.

– Para separar filas de una matriz se usa;o un simple retorno de carro. Esta ´ultima opci´on puede facilitar muchas veces la visualizaci´on de la matriz que se est´a introduciendo.

– Para transponer matrices se usa el ap´ostrofe.

– Los elementos de vectores y matrices pueden ser reales, complejos e incluso expresiones, como vemos en el caso del ´ultimo elemento del vectorC.

– Si se est´a introduciendo un comando o conjunto de ellos cuya sintaxis sea muy larga, se puede continuar en la siguiente l´ınea introduciendo al final de la actual tres puntos seguidos (...).

(10)

En este caso, se han creado una serie de variables (en particular, matrices) mediante la introducci´on expl´ıcita de sus elementos en l´ınea de comandos. Otras formas de producir variables podr´ıan ser: gener´andolas mediante funciones y declaraciones, cre´andolas en un archivo .m, carg´andolas desde un archivo de datos externo mediante el comando load (bien se trate de ficheros de datos ASCII o bien de ficheros binarios con formato de datos de matlab.mat).

Adem´as de variables num´ericas, escalares o matriciales, en matlab pueden usarse cadenas de caracteres. Para ello se delimita una secuencia de caracteres mediante ap´ostrofes:

cadena = ’ejemplo de cadena de caracteres’

Para hacer referencia a cualquiera de los caracteres que componen una cadena, podemos hacerlo como si de un vector se tratara (la forma de indexar vectores y matrices se ver´a m´as adelante).

1.6

Variables de entorno y variables especiales

Existen una serie de variables predefinidas enmatlab, son las siguientes:

– ans: Contiene la respuesta (answer) del ´ultimo comando ejecutado, cuando el resultado de dicho comando no se asigna expl´ıcitamente a ninguna variable.

– eps: Da el valor de la precisi´on con la que la m´aquina realiza las operaciones en punto flotante. T´ıpicamente, esta precisi´on es del orden de 1017.

–pi: π.

–i,j: √−1. Constante imaginaria.

–inf: . Se trata de un valor excesivamente grande para ser almacenado.

–NaN:Not a number. Es el resultado que se proporciona si durante una operaci´on se produce

una indeterminaci´on, del tipo 0· ∞, 0 0,

, etc.

–clock: Reloj.

–date: Fecha.

–flops: N´umero de operaciones en punto flotante realizadas hasta el momento.

(11)

8 Elementos de las matrices

Para borrar alguna variable de memoria se utiliza clear nombre-variables separadas por espacios. Pueden borrarse todas las variables a la vez si no se especifica ning´un nombre a continuaci´on del nombre del comando.

1.7

Elementos de las matrices

En este punto es importante comentar uno de los elementos m´as potentes dematlab, que es el s´ımbolo :, que permite generar una secuencia, y en particular permitir´a referenciar varios elementos de una matriz. Veamos algunos ejemplos en los que se usa este operador:

1:0.1:10Generar´a una secuencia comenzando por 1 hasta 10, cada elemento de la secuencia estar´a separado del anterior en 0.1.

1:10 Si se obvia el valor central, la separaci´on entre cada dos elementos de la secuencia ser´a 1.

[1:0.1:10]Si lo ponemos entre corchetes, estaremos generando un vector con los elementos de la secuencia.

En la forma m´as directa, los elementos de una matriz se referencian mediante A(i, j), donde

iy j son los ´ındices del elemento correspondiente. Podemos usar una secuencia que facilitar la indexaci´on de m´ultiples elementos, como en los siguientes ejemplos:

A(1,2:3) dar´ıa como resultado los elementos de las columnas 2 y 3 pertenecientes a la primera fila.

A(:,2)dar´ıa como resultado todos los elementos pertenecientes a la segunda columna.

L´ogicamente, en estos casos, los elementos especificados como inicio, final e incremento para producir la secuencia deben ser enteros.

Otra forma de generar datos secuencialmente es usando los comandoslinspaceylogspace, su formato es:

t = linspace(n1,n2,n); w = logspace(n1,n2,n);

El comando linspace genera un vector desde n1 a n2 de longitud n, cuyos componentes poseen valores espaciados linealmente. Por su parte, logspace produce tambi´en un vector de n elementos, pero sus valores est´an espaciados logar´ıtmicamente desde 10n1 a 10n2. Este ´

(12)

1.8

Operaciones con matrices

Las operaciones comunes con matrices son:

– Suma: +

– Resta:

-– Multiplicaci´on: *

– Divisi´on derecha /(x=b/Aes la soluci´on del sistema de ecuaciones x∗A=b. Es decir calcula la inversa de la matriz A y multiplica bpor la derecha por dicha inversa) – Divisi´on izquierda\ (x =A\b es la soluci´on de A∗x=b. Es decir, igual que en el caso

anterior, pero realiza la multiplicaci´on de la inversa conb por la izquierda)

– Potenciaci´on ^. Este operador permite, en particular, implementar otra forma de realizar la inversi´on de una matriz: A^(-1).

– Conjugada traspuesta’

Cabe mencionar la potencia de los operadores /, \, y ^, puesto que si la matriz A no es cuadrada, autom´aticamente se realiza el c´alculo de su pseudoinversa, lo que equivaldr´ıa a resolver el sistema de ecuaciones correspondiente por m´ınimos cuadrados.

Las mismas operaciones que se han enumerado se pueden realizar elemento a elemento, an-teponiendo un punto a cualquiera de los operandos anteriores. Como ejemplo, el siguiente comando realizar´ıa el producto de cada elemento de la matrizAcon su correspondiente de la matriz B (para que dicho producto sea realizable, obviamente, dichas matrices deben tener las mismas dimensiones):

A .* B

Adem´as de los operadores anteriores, existen funciones tales como:

– Trigonom´etricas est´andar: sin,cos,tan,asin,acos,atan,atan2

– Trigonom´etricas hiperb´olicas: sinh,cosh,tanh,asinh,acosh,atanh

– Trascendentales: log,log10,exp,sqrt

– Manipulaci´on de n´umeros complejos:

real: parte real de un escalar o de los elementos de una matriz.

imag: parte imaginaria.

(13)

10 Funciones orientadas al an´alisis de datos

– C´alculo del m´odulo: abspermite calcular tanto el valor absoluto de un escalar real como el m´odulo de un escalar complejo o el m´odulo de un vector.

– Funciones t´ıpicas de matrices:

det: determinante de una matriz

inv,pinv: inversa y pseudoinversa

eig: obtenci´on de autovalores

rank: rango de la matriz

norm: norma de una matriz (norma 2, norma 1, norma infinito, norma de Frobe-nius)

trace: traza de la matriz

diag: produce un vector conteniendo los elementos de la diagonal de una matriz, o si recibe un vector como par´ametro, genera una matriz diagonal.

tril: devuelve la matriz triangular inferior de una matriz dada

triu: devuelve la matriz triangular superior de una matriz dada – funciones para generar matrices:

eye(n): produce una matriz identidad de dimensi´on n×n zeros(n,m): genera una matriz de ceros de dimensi´on n×m ones(n,m): genera una matriz de unos de dimensi´on n×m

rand(n,m): permite generar una matriz de valores aleatorios, entre 0 y 1, de dimensi´on n×m

A = [A11,A12;A21,A22]: podemos producir una nueva matriz por bloques, me-diante su composici´on a partir de submatrices ya existentes.

1.9

Funciones orientadas al an´

alisis de datos

Se trata de funciones que operan con vectores. Si se aplican a matrices operan columna a columna. Permiten realizar an´alisis sobre el conjunto de datos contenido en los vectores correspondientes, tales como calcular su valor m´ınimo, m´aximo, media, mediana, desviaci´on t´ıpica, suma de los elementos de dicho vector, etc. min, max, mean,median,std,sum, prod, etc.

1.10

Polinomios

(14)

como polinomios pormatlab. En las demos que acompa˜nan a estas notas se podr´an analizar numerosos ejemplos.

Los polinomios se representan por vectores, cuyos elementos son los coeficientes del polinomio en orden descendente. Por ejemplo, el polinomios3+ 2s2+ 3s+ 4 se representa:

p=[1 2 3 4];

que muy bien podr´ıa ser el denominador de una funci´on de transferencia.

Mediante la funci´onroots se pueden encontrar las ra´ıces de esa ecuaci´on:

roots(p)

De modo complementario, se puede calcular un polinomio a partir de sus ra´ıces usando la funci´onpoly:

p2=poly([-1 -2]);

Si el argumento de entrada apoly es una matriz, devuelve el polinomio caracter´ıstico de la matriz (det(λI−A)) como un vector fila.

Un polinomio puede ser evaluado en un punto determinado usandopolyval(p,s), donde p es el polinomio yses el punto donde va a ser evaluado. Por ejemplo:

p2=[1 3 2]; a=[1 2; 3 4]; polyval(p2,a)

si se introduce, como en este caso, un vector o una matriz, en lugar de un valor individual, la evaluaci´on se hace elemento a elemento.

Podemos realizar c´omodamente operaciones de multiplicaci´on y divisi´on de polinomios me-diante las funcionesconv ydeconv, respectivamente:

conv([1,2],[2,0])

1.11

Otras funciones de inter´

es

(15)

12 Gr´aficos

1.12

Gr´

aficos

matlab es muy potente a la hora de generar gr´aficos (sobre todo en sus ´ultimas versiones), no s´olo por la variedad de comandos que ofrece para ello, sino tambi´en por la versatilidad de dichos comandos. En las demostraciones aparecer´an varios tipos de gr´aficos. De momento, comentaremos los comandos fundamentales para la realizaci´on de los mismos. En primer lugar, comandos gen´ericos y comandos orientados a gr´aficos bidimensionales:

–figure(n): Las representaciones de gr´aficos en matlabse realizan en ventanas gr´aficas. En un momento dado puede haber varias ventanas gr´aficas abiertas. La funci´onfigure

se utiliza para abrir una nueva ventana gr´afica que ser´a numerada de acuerdo con el par´ametro, o bien, si ya existe una ventana con ese n´umero, se convertir´a en la ventana gr´afica activa, donde se realizar´a la pr´oxima representaci´on gr´afica.

–clf: Limpia la ventana gr´afica activa.

–close(n): Para cerrar una ventana gr´afica. close allcierra todas las ventanas gr´aficas.

– plot: es la funci´on b´asica de representaci´on gr´afica de datos en dos dimensiones. La representaci´on se realiza en la ventana gr´afica que est´e activa en un momento dado. En caso de no haber ninguna, se crea una ventana gr´afica nueva. Ejemplos de uso:

plot(v): representa en el eje vertical los valores contenidos en el vector v, frente a los valores del ´ındice en el eje horizontal.

plot(t,v): representa los valores del vectorv frente a los del vectort.

plot(t,A),plot(t,[v1,v2]): presentar´a varias gr´aficas, puesto que cada columna de la matriz Aes considerada como un vector a representar frente al vector t. En la segunda variante indicada, se consigue lo mismo mediante la agrupaci´on de los vectores v1,v2 en una matriz.

plot(t1,v1,t2,v2): En este caso tambi´en se obtendr´an dos gr´aficas, pero cada una de ellas tiene un conjunto de valores diferente para el eje horizontal.

–loglog: representaci´on en escala logar´ıtmica en ambos ejes.

– semilogx: representaci´on en escala semilogar´ıtmica, el eje vertical aparecer´a en escala lineal.

–semilogy: representaci´on en escala semilogar´ıtmica, el eje horizontal aparecer´a en escala lineal.

–polar: representaci´on de datos dados en forma polar, es decir en lugar de dar un par de vectores de componentes horizontales y verticales, se dan los vectores conteniendo el vector de ´angulo y m´odulo.

(16)

cambiar manualmente el color que por defecto tendr´a una determinada curva con la adici´on de un par´ametro: plot(t,y,’r’). En este ejemplo, en lugar de representarse la curva con el color por defecto (azul), aparecer´a en color rojo. Para ver los c´odigos de colores, puede consultarse la ayuda del comandoplot.

Tambi´en pueden realizarse gr´aficos en tres dimensiones:

–plot3(x,y,z): comando an´alogo aplot para dibujar curvas, pero en tres dimensiones.

– mesh(x,y,Z): para dibujar superficies, Z debe ser una matriz con tantas filas como lon-gitud del vector x y tantas columnas como la longitud del vectory. Los puntos que se representan son: (x(i), y(j), Z(i, j)).

–contour: representa en un plano horizontal las curvas de nivel de una superficie tridimen-sional.

Por otro lado, existen comandos que permiten a˜nadir determinados complementos a estos gr´aficos:

–title: permite a˜nadir un t´ıtulo a la gr´afica

–xlabel: a˜nadir una etiqueta al eje horizontal de la gr´afica

–ylabel: a˜nadir etiqueta al eje vertical

–grid: a˜nadir una rejilla

–axis: permite modificar los l´ımites de los ejes horizontal y vertical

–text: a˜nadir un texto en una posici´on cualquiera de la gr´afica

–gtext: igual que textpero permite seleccionar la ubicaci´on del texto mediante el rat´on.

Por otra parte, muchos de los elementos gr´aficos pueden manipularse como objetos que tienen una serie de propiedades asociadas. Por ejemplo:

handlePlot = plot(x,y);

con este comando estamos asignando el objeto de tipo plot a una variable. Podemos ver las propiedades asociadas a un objeto mediante la funci´on get(handlePlot), o bien especificar alguna de ellas: get(handlePlot,’LineStyle’). Cualquiera de las propiedades de un objeto pueden ser alteradas mediante la funci´on set(handlePlot,’Color’,’g’).

(17)

14 Programando en matlab

1.13

Programando en matlab

matlab permite a la hora de programar una serie de elementos t´ıpicos para la modificaci´on del flujo de una secuencia de instrucciones. La sintaxis es muy parecida a la de cualquier lenguaje de programaci´on. Todos estos operadores se pueden usar en la ventana de comandos, en l´ınea, o en un fichero .m.

1.13.1 Operadores l´ogicos y relacionales

Permiten la comparaci´on de escalares (o de matrices elemento a elemento). Si el resultado de la comparaci´on es verdadero, devuelven un 1, en caso contrario devuelven un 0.

Los operadores elementales son:

< menor que <= menor o igual == igual

> mayor que >= mayor o igual = no igual

Es importante no dejar espacios entre los operadores formados por dos s´ımbolos. Si los datos a comparar son matrices, la comparaci´on se hace elemento a elemento, devolviendo una matriz binaria.

1.13.2 Bucles y estructuras condicionales

En esta secci´on se explica una serie de comandos importantes a la hora de hacer un programa en matlab: for,while,if-else.

for

La sintaxis de este comando es la siguiente:

for variable = expresion hacer algo;

end

La expresion es un vector, una matriz o cualquier comando de matlabque produzca como salida un vector o una matriz. La ejecuci´on se realiza una vez por cada ele-mento del vector o de una columna de la matriz. Tanto los bucles como las estructuras condicionales se terminan con end.

(18)

for i=10:-1:1 kk(11-i)=i; end

A continuaci´on otro ejemplo en el que aparecen dos bucles anidados:

x = [0:0.1:pi]’; y = x;

for f=1:length(x) for c=1:length(y)

Z(f,c) = sin(x(f)).^2 + cos(y(c)).^2; end

end

mesh(x,y,Z);

Es importante evitar en lo posible el uso de bucles enmatlab, ya que consumen mucho tiempo, pudi´endose en muchos casos realizar las mismas operaciones de una forma m´as eficiente y compacta.

Los siguientes ejemplos calculan logaritmos de n´umeros desde 1 a 10.000. Se har´a de diferentes maneras para comparar. Se utilizan los comandos clock (que devuelve la hora actual) y etime (que devuelve el tiempo en segundos que ha transcurrido entre dos instantes) para calcular el tiempo consumido en las operaciones.

t1=clock; for i=1:10000, a(i)=log(i); end; e1=etime(clock,t1);

t1=clock; ind=[1:10000]; for i=ind, a(i)=log(i); end;... e2=etime(clock,t1);

t1=clock; a=zeros(1,10000); ind=[1:10000];... for i=ind, a(i)=log(i); end; e3=etime(clock,t1);

t1=clock; ind=[1:10000]; a=log(ind); e4=etime(clock,t1);

t1=clock; ind=[1:10000]; a=zeros(1,10000); a=log(ind); ... e5=etime(clock,t1);

Los tiempos de computaci´on para los diferentes m´etodos son:

86.17 86.56 2.42 0.27 0.28

(19)

16 Programando en matlab

while

Permite implementar bucles condicionales. Su sintaxis es:

while expresion hacer algo; end

La expresi´ones de la formaX operador Y, dondeXeYson escalares o expresiones que devuelven escalares y los operadores suelen ser operadores relacionales. En el siguiente ejemplo se busca una matriz aleatoria estable (parte real de autovalores negativa):

A = randn(2); % Genera numeros aleatorios con distribucion normal while max(real(eig(A))) >= 0

A=randn(2); end;

eig(A)

Se puede usar el comando breakpara salir de un bucle en funci´on de una determinada condici´on.

if, else, elseif

La sintaxis es la siguiente:

if expresion 1 hace algo

elseif expresion 2 hace algo

else

hace algo end

else yelseifson opcionales.

1.13.3 Ficheros .m

matlab puede ejecutar programas que se encuentren almacenados en ficheros ASCII que pueden encuentrarse en alguno de los subdirectorios indicados en el camino de b´usqueda o bien en el subdirectorio de trabajo actual y tengan adem´as extensi´on .m. Hay dos tipos de ficheros .m: script files yfunction files

Scripts

(20)

los datos que se encuentran en la memoria. Los ejemplos que ilustran estas notas son en s´ı script-files, pues llevan un conjunto de comandosmatlab y comentarios.

funciones

Son tambi´en ficheros .m, pero a diferencia de los anteriores, se le pueden pasar argumentos y pueden devolver resultados. Por tanto utilizan variables globales que se pasan por valor. La mayor´ıa de los ficheros contenidos en lostoolboxesson funciones. La sintaxis de todas las funciones almacenadas en ficheros.m es la siguiente:

function [out1,out2,...] = nombre_fichero (in1,in2,...) % Comentarios adicionales para el help

comandos de MATLAB return;

Una funci´on puede tener m´ultiples par´ametros de entrada y salida. Numerosos ejemplos de funciones ser´an utilizados en las demostraciones.

Para finalizar, comentar que existen una serie de utilidades a la hora de programar enmatlab. Las m´as comunes son:

– pause: Para la ejecuci´on hasta que se pulsa una tecla. Puede usarse para pausar la ejecuci´on durante un n´umero de segundos determinado, en lugar de esperar a que se pulse una tecla: pause(n).

–disp: Muestra una cadena de caracteres por pantalla.

(21)

18 Resumen de los comandos de matlab

1.14

Resumen de los comandos de matlab

Caracteres especiales

= Instrucci´on de asignaci´on

[ Usado para formar vectores y matrices

] Ver [

( Precedencia aritm´etica

) Ver (

. Punto decimal

... La instrucci´on contin´ua en la siguiente l´ınea

, Separa ´ındices y argumentos de funci´on

; Acaba filas, suprime la impresi´on

% Comentarios

: Indexaci´on, generaci´on de vectores

! Ejecuta instrucci´on del sistema operativo

Valores Especiales

ans Respuesta cuando no se asigna la expresi´on

eps Precisi´on

pi π

i,j √−1

inf

NaN No N´umero (Not-a -Number)

clock Reloj

date Fecha

flops N´umero de operaciones

nargin N´umero de argumentos de entrada de una funci´on

narout N´umero de argumentos de salida de una funci´on

Archivos de disco

chdir Cambiar de directorio

delete Borrar archivo

diary Diario de la sesi´on

dir Directorio de archivos en el disco

load Cargar variables de un archivo

save Guardar variables en un archivo

type Mostrar funci´on o archivo

what Mostrar archivos .m en el disco

fprintf Escribir en un archivo

(22)

Matrices especiales

compan Compa˜nera

diag Diagonal

eye Identidad

gallery Esot´erica

hadamard Hadamard

hankel Hankel

hilb Hilbert

invhilb Inversa de Hilbert

linspace Vectores igualmente espaciados

logspace Vectores logar´ıtmicamente espaciados

magic M´agica cuadrada

meshdom Dominio para puntos de malla

ones Matriz constante de unos

pascal Pascal

rand Elementos aleatorios

toeplitz Toeplitz

vander Vandermonde

zeros Matriz de ceros

Manipulaci´on de matrices

rot90 Rotaci´on

fliplr Invierte el orden de las columnas

flipud Invierte el orden de las filas

diag Diagonal

tril Parte triangular inferior

triu Parte triangular superior

reshape Reordena una matriz en otra

’ Traspuesta

: Convierte una matriz en una columna simple

Funciones l´ogicas y relacionales

any Condiciones l´ogicas

all Condiciones l´ogicas

find Encuentra ´ındices de valores l´ogicos

isnan Detecta NaNs

finite Detecta infinitos

isempty Detecta matrices vac´ıas

isstr Detecta variables de cadena

(23)

20 Resumen de los comandos de matlab

Control de flujo

if Ejecuta instrucciones condicionalmente

elseif Usado con if else Usado con if

end Terminaif, for, while

for Repite instrucciones un n´umero de veces

while Repite instrucciones mientras una sentencia l´ogica sea verdadera

break Sale de los buclesfor ywhile return Salida desde funciones

pause Pausa hasta que se pulse una tecla

Texto y cadenas

abs Convierte cadena en valoresASCII eval Eval´ua texto como instrucciones

num2str Convierte n´umeros en cadenas

int2str Convierte enteros en cadenas

setstr Indicador de cadenas

sprintf Convierte n´umeros en cadenas

isstr Detecta variables de cadena

strcomp Compara variables de cadena

hex2num Convierte cadenas hexadecimales en n´umeros

Programaci´on y archivos.m

input Obtiene n´umeros desde el teclado

keyboard Llamada al teclado como si fuera un archivo.m error Muestra mensaje de error

function Define funci´on

eval Eval´ua texto en variables

feval Eval´ua funci´on dada por una cadena

echo Permite mostrar las instrucciones en pantalla

exist Comprueba si las variables existen

casesen Sensibilidad a las may´usculas

global Define variables globales

startup Archivo de inicializaci´on

getenv Accede a una variable de entorno

menu Genera un men´u

etime Tiempo gastado

Ventana alfanum´erica

clc Limpia pantalla

home Mueve cursor al comienzo

format Establece el formato de salida

disp Muestra matriz o texto

fprintf Imprime n´umero formateado

(24)

Gr´aficos

plot Gr´afico lineal en el plano XY

loglog Gr´afico logar´ıtmico en el plano XY

semilogx Gr´afico semilogar´ıtmico

semilogy Gr´afico semilogar´ıtmico

polar Gr´afico polar

mesh Superficie de malla tridimensional

contour Plano de contornos

meshdom Dominio para gr´aficos de superficie

bar Gr´aficos de barras

stairs Gr´aficos de escaleras

errorbar A˜nade barras de errores

Anotaci´on Gr´afica

title T´ıtulo

xlabel Anotaci´on en eje x

ylabel Anotaci´on en eje y

grid Dibuja cuadriculado

text Posiciona un texto arbitrariamente

gtext Posiciona un texto con el rat´on

ginput inputgr´afico

Control de la ventana gr´afica

axis Escalado manual de ejes

hold Mantiene gr´afico en pantalla

shg Muestra la pantalla gr´afica

clf Limpia la pantalla gr´afica

subplot Divide la pantalla gr´afica

Funciones elementales

abs M´odulo complejo

angle Argumento complejo

sqrt Ra´ız cuadrada

real Parte real

imag Parte imaginaria

conj Conjugado complejo

round Redondeo al entero m´as cercano

fix Redondeo hacia cero

floor Redondeo hacia−∞

ceil Redondeo hacia

sign Funci´on signo

rem Resto

exp Exponencial basee

log Logaritmo natural

(25)

22 Resumen de los comandos de matlab

Funciones Trigonom´etricas

sin Seno

cos Coseno

tan Tangente

asin Arcoseno

acos Arcocoseno

atan Arcotangente

atan2 Arcotangente de x/y

sinh Seno hiperb´olico

cosh Coseno hiperb´olico

tanh Tangente hiperb´olica

asinh Arcoseno hiperb´olico

acosh Arcocoseno hiperb´olico

atanh Arcotangente hiperb´olica

Funciones especiales

bessel Funci´on de Bessel

gamma Funci´on gamma

rat Aproximaci´on racional

erf Funci´on de error

inverf Inversa de la funci´on de error

ellipk Integral completa el´ıptica de primera especie

ellipj Integral el´ıptica de Jacobi

Descomposiciones y factorizaciones

balance Forma equilibrada

backsub Sustituci´on regresiva

cdf2rdf Convierte diagonales complejas en diagonales reales

chol Factorizaci´on de Cholesky

eig Autovalores y autovectores

hess Forma de Hessenberg

inv Inversa

lu Factores de la eliminaci´on gaussiana

nnls M´ınimos cuadrados con restricciones

null Base ortonormal del n´ucleo

orth Base ortonormal de la imagen

pinv Pseudoinversa

qr Factorizaci´on QR

qz Algoritmo QZ

rref Forma escalonada reducida por filas

schur Descomposici´on de Schur

(26)

Condicionamiento de matrices

cond N´umero de condici´on en la norma 2

norm Norma 1, norma 2, norma de Frobenius, norma

rank Rango

rcond Estimaci´on de la condici´on (inverso)

Funciones matriciales elementales

expm Matriz exponencial

logm Matriz logaritmo

sqrtm Matriz ra´ız cuadrada

funm Funci´on arbitraria de matriz

poly Polinomio caracter´ıstico

det Determinante

trace Traza

kron Producto tensorial de Kronecker

Polinomios

poly Polinomio caracter´ıstico

roots Ra´ıces de polinomios - m´etodo de la matriz compa˜nera

roots1 Ra´ıces de polinomios - m´etodo de Laguerre

polyval Evaluaci´on de polinomios

polyvalm Evaluaci´on de polinomio matricial

conv Multiplicaci´on

deconv Divisi´on

residue Desarrollo en fracciones parciales

polyfit Ajuste por un polinomio

An´alisis de datos por columnas

max Valor m´aximo

min Valor m´ınimo

mean Valor medio

median Mediana

std Desviaci´on t´ıpica

sort Ordenaci´on

sum Suma de elementos

prod Producto de elementos

cumsum Suma acumulativa de elementos

cumprod Producto acumulativo de elementos

diff Derivadas aproximadas

hist Histogramas

corrcoef Coeficientes de correlaci´on

cov Matriz de covarianza

(27)

24 Resumen de los comandos de matlab

Tratamiento de se˜nales

abs M´odulo complejo

angle Argumento complejo

conv Convoluci´on

corrcoef Coeficientes de correlaci´on

cov Covarianza

deconv Deconvoluci´on

fft Transformada r´apida de Fourier

fft2 FFT 2-dimensional

ifft FFT inversa

ifft2 FFT inversa 2-dimensional

fftshift Cambia las dos mitades de un vector

Integraci´on num´erica

quad Funci´on de integraci´on num´erica

quad8 Funci´on de integraci´on num´erica

Soluci´on de ecuaciones diferenciales

ode23 M´etodo Runge-Kutta de orden 2/3

ode45 M´etodo Runge-Kutta-Fehlberg de orden 4/5

Ecuaciones no lineales y optimizaci´on

fmin M´ınimo de una funci´on de una variable

fmins M´ınimo de una funci´on de varias variables

fsolve Soluci´on de un sistema de ecuaciones no lineales (ceros de una funci´on de varias variables)

fzero Cero de una funci´on de una variable

Interpolaci´on

spline Spline c´ubico

table1 Genera tablas 1-D

(28)

[1] R.H. Bishop. Modern Control Systems Analysis and Design Using matlab. Addison-Wesley, 1993.

[2] The MathWorks Inc. Control System Toolbox User’s Guide. 1999.

[3] The MathWorks Inc. simulink User’s Guide, version 3. 1999.

[4] The MathWorks Inc. Usingmatlab, version 5.3.1. 1999.

[5] K. Ogata. Solving Control Engineering Problems with matlab, year=1994, pub-lisher=Prentice Hall International Editions.

[6] B. Shahian and M. Hassul. Control System Design using matlab, year=1993, pub-lisher=Prentice Hall.

[7] K. Sigmon. Introducci´on a matlab, Segunda Edici´on. Department of Mathematics, U. Florida. Traducido del ingl´es por Celestino Montes, Dep. Matem´atica Aplicada II, U. Sevilla, 1992.

Referencias

Documento similar

Para este apartado se utilizará la programación en Microsoft Visual C++, se estudiará la forma más simple de conectar los datos del guante a la interfaz de

En este proyecto, además diseñaremos un programa para calcular los datos hidrostáticos en adrizado y la botadura de un barco cualquiera, a partir de dos

Lo primero es crear los diferentes scripts en MATLAB, para con ellos poder diseñar los filtros dependiendo de nuestras especificaciones, como pueden ser el orden del

entorno algoritmo.

The Panel Data Toolbox introduces such set of functions, including estimation methods for the standard fixed, between and random effects models, as well as instrumental panel

b) El Tribunal Constitucional se encuadra dentro de una organiza- ción jurídico constitucional que asume la supremacía de los dere- chos fundamentales y que reconoce la separación

Como ya se ha mencionado a lo largo de esta redacción, el objetivo principal del proyecto era el desarrollo en MATLAB de una herramienta informática cuyas funcionalidades

Para implementar las comunicaciones entre las aplicaciones Java y Matlab se han utilizado las funciones del paquete java.net (implementación en Java) y de la