Icp Octave Manual PDF
Icp Octave Manual PDF
Icp Octave Manual PDF
27 de marzo de 2012
1
Catedra de Instrumentacion y Control de Procesos, Facultad de Ingeniera Qumica, Universidad Nacional
del Litoral - e-mail: [email protected]
2
Catedra de Instrumentacion y Control de Procesos, Facultad de Ingeniera Qumica, Universidad Nacional
del Litoral - e-mail: [email protected]
II
Indice general
Prefacio V
1. Introduccion 1
1.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2. Software libre en la Educacion Universitaria . . . . . . . . . . . . . . . . . . . . . . 1
2. Conceptos basicos 3
2.1. Instalacion de Paquetes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1.1. Usuarios de Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.1.2. Usuarios de Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2. GNU Octave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
2.2.1. Acerca de Octave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.2.2. Distribucion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.3. El entorno de trabajo de Octave . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2.3.1. Respuesta a los comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3.2. Interrupcion de comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.3.3. Lista de comandos y funciones disponibles . . . . . . . . . . . . . . . . . . 6
2.3.4. Ayuda sobre comandos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.3.5. Manual en lnea . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.4. Tipos de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.4.1. Enteros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.4.2. Reales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.4.3. Complejos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2.4.4. Vectores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
2.4.5. Matrices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
2.4.6. Logicos: true/false . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4.7. Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.4.8. Estructuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.4.9. Cell arrays y listas separadas por comas . . . . . . . . . . . . . . . . . . . . 13
2.4.10. Rangos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
2.5. Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
2.5.1. ans . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
III
IV INDICE GENERAL
5. Graficos 27
5.1. Comandos para Realizar Graficos 2D . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5.1.1. Graficos x-y . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5.1.2. Graficos logartmos y semilogartmicos . . . . . . . . . . . . . . . . . . . . 28
5.1.3. Nombrando Figuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
5.1.4. Imprimiendo Figuras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
5.2. Comandos para Realizar Graficos 3D . . . . . . . . . . . . . . . . . . . . . . . . . . 28
5.2.1. Comando surf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
5.3. Comandos para Mejorar el Aspecto de los Graficos . . . . . . . . . . . . . . . . . . 28
5.3.1. axis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
5.3.2. clf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.3.3. color . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.4. Como trazar graficos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
6. Toolbox de Control 31
6.1. Instalando el toolbox de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
6.2. Definiendo Sistemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
6.2.1. Sistemas a Lazo Abierto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
6.2.2. Sistemas Realimentados . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
6.3. Distintos tipos de Senales de Entrada . . . . . . . . . . . . . . . . . . . . . . . . . . 35
6.4. Analisis de Sistemas Realimentados . . . . . . . . . . . . . . . . . . . . . . . . . . 35
V
VI PREFACIO
Captulo 1
Introduccion
1.1. Introduccion
Mucho se ha escrito sobre el tema en este captulo incorporamos y adherimos a algunos comen-
tarios de Richard Stallman, quien fue el primer impulsor las ideas de software libre 1 .
2. La libertad de estudiar como trabaja el programa, y cambiarlo para que haga lo que usted
quiera (libertad 1). El acceso al codigo fuente es una condicion necesaria para ello.
3. La libertad de redistribuir copias para que pueda ayudar al projimo (libertad 2).
4. La libertad de distribuir copias de sus versiones modificadas a terceros (libertad 3). Si lo hace,
puede dar a toda la comunidad una oportunidad de beneficiarse de sus cambios. El acceso al
codigo fuente es una condicion necesaria para ello.
Un programa es software libre si los usuarios tienen todas esas libertades. Entonces, debera ser
libre de redistribuir copias, tanto con o sin modificaciones, ya sea gratis o cobrando una tarifa por
distribucion, a cualquiera en cualquier parte. El ser libre de hacer estas cosas significa, entre otras
cosas, que no tiene que pedir o pagar el permiso.
Tambien debera tener la libertad de hacer modificaciones y usarlas en privado, en su propio
trabajo u obra, sin siquiera mencionar que existen. Si publica sus cambios, no debera estar obligado
a notificarlo a alguien en particular, o de alguna forma en particular.
1 Ver http://www.gnu.org/education/education.es.html
1
2 CAPITULO 1. INTRODUCCION
La libertad de ejecutar el programa significa la libertad para cualquier tipo de persona u orga-
nizacion de usarlo en cualquier tipo de sistema de computacion, para cualquier tipo de trabajo y
proposito, sin estar obligado a comunicarlo a su programador, o alguna otra entidad especfica. En
esta libertad, el proposito de los usuarios es el que importa, no el proposito de los programadores.
Como usuario es libre de ejecutar un programa para sus propositos; y si lo distribuye a otra persona,
tambien es libre para ejecutarlo para sus propositos, pero usted no tiene derecho a imponerle sus
propios propositos.
La libertad de redistribuir copias debe incluir las formas binarias o ejecutables del programa,
as como el codigo fuente; tanto para las versiones modificadas como para las no lo estan. (Dis-
tribuir programas en forma de ejecutables es necesario para que los sistemas operativos libres se
puedan instalar facilmente). Resulta aceptable si no existe un modo de producir una formato binario
o ejecutable para un programa especfico, dado que algunos lenguajes no incorporan esa caractersti-
ca, pero debe tener la libertad de redistribuir dichos formatos si encontrara o programara una forma
de hacerlo.
Captulo 2
Conceptos basicos
Este documento se basa en la version 3.6.1 de Octave para Linux, sobre sistema operativo Ubun-
tu. Si bien la mayora de los temas desarrollados pueden aplicarse a otras versiones de Octave,
recomendamos la utilizacion de Octave bajo cualquier distribucion de Linux.
3
4 CAPITULO 2. CONCEPTOS BASICOS
A pesar de que inicialmente estaba destinado a ser usado para ensenar diseno del reac-
tor, se ha utilizado en varios otros cursos de pregrado y posgrado en el Departamento
de Ingeniera Qumica de la Universidad de Texas, y el departamento de matematicas
de la Universidad de Texas lo ha estado usando para la ensenanza ecuaciones difer-
enciales y algebra lineal. Mas recientemente, Octave se ha utilizado como la principal
herramienta computacional para la ensenanza en lnea de la clase de Machine Learning
(ml-class.org) de Stanford, impartido por Andrew Ng. Decenas de miles de estudiantes
participaron del curso.
Si encuentras a Octave util, por favor haznoslo saber. Siempre estamos interesados en
saber como se esta usando Octave.
Practicamente todo el mundo piensa que la el nombre Octave tiene algo que ver con
la musica, pero en realidad es el nombre de uno de los antiguos profesores de John W.
Eaton, quien escribio un famoso libro de texto en la ingeniera de reacciones qumicas,
y que tambien fue muy conocido por su habilidad para resolver calculos estimativos
rapidamente. Esperamos que este software permita que muchas personas logren hacer
calculos mas ambiciosos con la misma facilidad.
Todo el mundo esta invitado a compartir este programa con otras personas bajo los
terminos de la Licencia Publica General GNU. Tambien te invitamos a ayudar a hac-
er a Octave mas util escribiendo y contribuyendo con funciones adicionales para el, e
informando cualquier problema que puedas encontrar.))
2.2.2. Distribucion
Octave es software gratuito. Esto significa que cualquiera es libre de usarlo y libre de redis-
tribuirlo bajo ciertas condiciones. Octave no es, sin embargo, de dominio publico. Esta protegido
por derechos de autor, y existen restricciones sobre su distribucion, pero las restricciones han sido
disenadas para asegurar que los demas tengan la misma libertad que usted tiene para utilizar y redis-
tribuir Octave. Las condiciones precisas se pueden encontrar en la Licencia Publica General GNU
que viene con Octave.
Para descargar una copia de la Octave, por favor visite http://www.gnu.org/software/
octave/download.html.
La misma terminal oficiara de interprete de comandos para Octave, como se muestra en la figura
2.3.
Despues de algunos mensajes de copyright y avisos sobre la version de Octave en ejecucion,
aparece el prompt2 de Octave:
o c t a v e : 1>
2 Se llama prompt al caracter o conjunto de caracteres que se muestran en una lnea de comandos para indicar que el
El prompt de Octave lleva un numero correlativo, que contabiliza el numero de comandos intro-
ducidos durante la sesion de trabajo.
Para abandonar Octave, cerrando la sesion de trabajo, simplemente debe escribirse el comando
quit o el comando exit en la lnea de comandos.
o c t a v e : 1> q u i t
help --list
Octave cuenta con un numero limitado de comandos integrados, sin embargo, puede extender-
se ilimitadamente mediante el agregado de paquetes de funciones3 . Por lo tanto, la cantidad de
funciones listadas veriara segun los paquetes que se hayan instalado.
help comando
B u i l t i n F u n c t i o n : e x i t ( STATUS )
B u i l t i n F u n c t i o n : q u i t ( STATUS )
E x i t t h e c u r r e n t Octave s e s s i o n . If the optional integer value
STATUS i s s u p p l i e d , p a s s t h a t v a l u e t o t h e o p e r a t i n g s y s t e m a s t h e
Octave s e x i t s t a t u s . The d e f a u l t v a l u e i s z e r o .
A d d i t i o n a l h e l p f o r b u i l t i n f u n c t i o n s and o p e r a t o r s i s
a v a i l a b l e i n t h e onl i n e v e r s i o n o f t h e manual . Use t h e command
doc <t o p i c > t o s e a r c h t h e manual i n d e x .
doc
doc tema
2.4.1. Enteros
Las constantes enteras son un caso particular de constantes reales, puesto que Octave no incluye
una definicion interna de enteros. Cuando un entero participa de alguna operacion que da como
resultado un numero real (por ejemplo, 3/2), los enteros son tratados automaticamente como reales.
Octave cuenta con funciones especficas para forzar a tales operaciones a dar resultados enteros.
2.4.2. Reales
Las constantes reales se almacenan internamente como numeros de coma flotante de doble pre-
cision, y se pueden introducir con notacion decimal o con notacion cientfica.
2.4.3. Complejos
Las constantes complejas se almacenan internamente como un par de numeros reales corre-
spondientes a la parte real y a la parte imaginaria, respectivamente. Por ende, cada parte real e
imaginaria puede escribirse con notacion decimal o con notacion cientfica.
Octave utiliza por defecto la letra i como constante imaginaria pura (i , 1) en las respues-
tas. Sin embargo, para denotar la constante imaginaria pura podemos utilizar indistintamente las
letras ((i)), ((I)), ((j)) o ((J)), en tanto respetemos una regla basica: Octave no admite espacios entre
la cantidad numerica y la letra que identifica a la constante imaginaria pura.
8 CAPITULO 2. CONCEPTOS BASICOS
syntax error
>>> 3 + 2 j
o c t a v e : 4> 3 + 2 j
ans = 3 + 2 i
Tanto la parte real como la parte imaginaria de una constante compleja deben ser del mismo
tipo de dato. Si uno de los valores es de un tipo mas basico que el otro valor, el mismo sufre una
((promocion)) al tipo de dato mas avanzado.
2.4.4. Vectores
El vector es un caso particular de matriz; para Octave, es una matriz de 1 fila por n columnas
(donde n es el numero de elementos del vector).
Los vectores se introducen como una coleccion de escalares encerrados entre corchetes.
En un vector fila los elementos se separan entre s por espacios o por comas.
2 4 6
o c t a v e : 7> [ 2 , 4 , 6 ]
ans =
2 4 6
En un vector columna, los elementos se separan entre s por saltos de lnea (pulsando la tecla
ENTER) o por punto y coma.
2
Ejemplo: Introducir el vector 4:
6
o c t a v e : 1> [ 2
> 4
> 6]
ans =
2
4
6
o c t a v e : 2> [ 2 ; 4 ; 6 ]
ans =
2
4
6
2.4. TIPOS DE DATOS 9
Todos los elementos de un vector deben ser del mismo tipo de dato, por lo que los elementos de
tipos mas basicos sufren una ((promocion)) al tipo de dato mas avanzado de entre los elementos que
componen el vector.
Ejemplo: Introducir el vector [3, 97 1 7, 01 + 3]. Notar que el primer elemento (constante
real) y el segundo elemento (constante entera) son promocionados a constantes complejas, para que
los tipos de datos concuerden con el del tercer elemento:
o c t a v e : 7> [ 3 . 9 7 1 7 . 0 1 + 3 i ]
ans =
Vectores de elementos espaciados linealmente con la diferencia entre elementos como dato
Una forma sencilla de crear un vector con elementos equiespaciados (es decir, vectores donde
la diferencia entre un elemento y el elemento anterior es constante) es escribiendo un rango4 entre
corchetes.
De esta forma podemos definir un vector conociendo el primer elemento, la diferencia entre
elementos y el valor lmite que el ultimo elemento no sobrepasara.
Vectores de elementos espaciados linealmente con el numero de elementos y los elementos ex-
tremos como dato
Si lo que buscamos es crear un vector fila con un numero determinado de elementos equidistan-
ciados y donde tanto el primer como el ultimo elemento deben estar incluidos, nos convendra utilizar
la funcion linspace:
linspace(inicio,final,cantidad)
donde inicio es el primer elemento del vector, final es el ultimo elemento del vector y cantidad es el
numero total de elementos linealmente espaciados.
Columns 1 t h r o u g h 3 :
Columns 4 and 5 :
2 4 6 8 10
o c t a v e : 9> a ( 3 )
ans = 6
Debemos destacar que en Octave el primer elemento de un vector lleva el ndice 1, diferen-
ciandose de otros programas y lenguajes de programacion donde el primer elemento se indexa con
el numero cero.
2.4.5. Matrices
Las matrices se introducen como una coleccion de escalares separados entre s por espacios o
por comas, encerrados entre corchetes. Cada cada fila puede estar delimitada por un punto y coma
(;) o por un salto de lnea:
11 12 13
Ejemplo: Introducir la matriz 21 22 23:
31 32 33
o c t a v e : 8> [ 1 1 12 1 3 ; 21 22 2 3 ; 3 1 , 3 2 , 3 3 ]
ans =
11 12 13
21 22 23
31 32 33
o c t a v e : 9> [ 1 1 12 13
> 21 22 23
> 31 32 3 3 ]
ans =
11 12 13
21 22 23
31 32 33
Una matriz puede pensarse tambien como una coleccion de vectores fila.
1 2 3
Ejemplo: Introducir la matriz 3 5 7, donde la fila central es un vector b definido previa-
7 8 9
mente:
o c t a v e : 1 0> b = [3 5 7 ]
b =
3 5 7
o c t a v e : 1 1> [ 1 , 2 , 3 ; b ; 7 , 8 , 9 ]
ans =
1 2 3
3 5 7
7 8 9
Al igual que ocurre con los vectores (que en realidad son matrices de una fila), todos los el-
ementos de una matriz deben ser del mismo tipo de dato, por lo que los elementos de tipos mas
basicos sufren una ((promocion)) al tipo de dato mas avanzado de entre los elementos que componen
la matriz.
1 2, 05
Ejemplo: Introducir la matriz :
3 1032 5 + 2j
o c t a v e : 1 1> [ 1 2 . 0 5 ; 3 e 32 5+2 j ]
ans =
Si asignamos una matriz a una variable6 , podemos acceder a cada uno de sus elementos mediante
la estructura
variable(fila,columna)
donde variable es el nombre asignado a la matriz, fila es el numero de fila (contando desde arriba
hacia abajo), y columna es el numero de columna (contando de izquierda a derecha).
1 2 3
4 5 6
7 8 9
o c t a v e : 2> a ( 1 , 2 )
ans = 2
En Octave el primer elemento de una fila o de una columna lleva el ndice 1, diferenciandose
de otros programas y lenguajes de programacion donde el primer elemento se indexa con el numero
cero.
2.4.7. Strings
Los strings, termino a veces traducido como cadenas de texto o cadenas de caracteres, son
trozos de texto y se introducen entre comillas simples o dobles indistintamente:
6 El tema variables se desarrolla en la seccion 2.5 de la pagina 14
12 CAPITULO 2. CONCEPTOS BASICOS
2.4.8. Estructuras
Las estructuras son un tipo de datos mixto, compuestos por un grupo de datos mas o menos
heterogeneo, pero que conforman una unidad logica. Su utilizacion es mas efectiva, y sus ventajas se
ponen en evidencia, a la hora de programar aplicaciones para Octave. Dado que no son de particular
interes para el dictado de la materia, solo haremos una breve introduccion a los mismos para los
lectores que posean conocimientos de programacion y deseen programar en Octave, particularmente
para aquellos familiarizados con lenguajes como C++.
Las estructuras se identifican mediante un nombre comun a todos los elementos de la misma. A
su vez, cada elemento de la estructura se identifica por el nombre de la estructura a la que pertenece
seguido por un punto y por el nombre del elemento:
estructura.elemento
t i p o = PID
o c t a v e : 1 5> c o n t r o l a d o r . v a l o r e s = [ 2 . 2 1 4 . 7 ]
controlador =
t i p o = PID
valores =
o c t a v e : 1 6> c o n t r o l a d o r
controlador =
t i p o = PID
valores =
2.4. TIPOS DE DATOS 13
o c t a v e : 1 7> c o n t r o l a d o r . v a l o r e s ( 3 )
ans = 4.7000
2.4.10. Rangos
Desde el punto de vista operacional, un rango es un simple vector fila, cuyos elementos tienen la
particularidad de estar espaciados linealmente, como por ejemplo: [2 4 6 8].
Mas alla de la condicion de equiespaciado de sus elementos, la diferencia entre un rango y
un vector es interna: mientras un vector ocupa tanta memoria como elementos contenga, un rango
ocupa una cantidad mnima de memoria independientemente de su tamano, y es convertido a un
vector (o, hablando con mas propiedad, a una matriz de una fila), solo cuando las operaciones que
se realicen sobre el lo requieran. Los rangos le permiten a Octave trabajar con vectores muy grandes
(por ejemplo, de 500 000 elementos) con un consumo mnimo de memoria.
Para definir un rango, se usa la estructura:
donde inicio es el primer numero del rango, tope es la cifra que el ultimo numero del rango no
superara e incremento es el incremento entre cada uno de los elementos del rango.
1 2 3 4 5
Si al momento de definir un rango se lo escribe entre corchetes, Octave creara un vector en vez
de un rango, con el consumo de memoria que eso implica.
14 CAPITULO 2. CONCEPTOS BASICOS
2.5. Variables
Las variables son nombres asignados a constantes. Para definir una variable, se escribe el nombre
de la variable seguido por un signo igual (=) y por el valor asignado. Cualquier tipo de datos es valido
para ser asignado a una variable:
Ejemplo: Definir a = 2 + 3:
o c t a v e : 2> a =2+3
a = 5
El nombre elegido para una variable tiene ciertas restricciones:
solo puede contener letras del alfabeto ingles, dgitos y guiones bajos ( );
no pueden utilizarse caracteres particulares de un idioma, como la ene, las vocales acentuadas,
etc.;
no pueden comenzar y terminar con doble guion bajo (Octave reserva este tipo de nombre,
como variable , para uso interno).
Si tenemos dudas y queremos averiguar si un nombre determinado puede ser utilizado como
nombre de una variable, podemos recurrir al comando isvarname:
isvarname(nombre)
donde nombre es el string que queremos comprobar, y debe estar encerrado entre comillas.
isvarname devuelve 1 si nombre es valido para nombrar una variable o 0 en caso contrario.
Ejemplo: Averiguar si 3erDato y caudal pueden ser utilizados como nombres de variables.
Como es de esperar, 3erDato no es un nombre valido, porque comienza con un numero.
o c t a v e : 3> i s v a r n a m e ( "3erDato" )
ans = 0
o c t a v e : 4> i s v a r n a m e ( "caudal" )
ans = 1
7
Octave no impone un lmite al largo del nombre de una variable , aunque siempre es una practica
recomendable elegir nombres cortos pero a la vez representativos. Una de las crticas mas habituales
que recibimos los ingenieros por parte de los programadores es la de utilizar nombres de variables
extremadamente ambiguas, como x, i, y, t, etc. Si bien resulta indudablemente logico para un in-
geniero ahorrar esfuerzos nombrando a una variable que represente a un tiempo de respuesta de un
proceso como t en lugar de tiempo rta, desde el punto de vista del programador es un error fatal,
porque el esfuerzo ahorrado a la hora de escribir el codigo se paga muy caro a la hora de mantener
o modificar el programa, momento en que deberemos invertir una gran cantidad de tiempo y con-
centracion para interpretar el codigo. En el momento de elegir nombres para las variables debemos
tener en cuenta si nuestro codigo sera utilizado por otras personas o por nosotros mismos en un
futuro lejano.
En Octave las variables son sensibles a las mayusculas, lo que significa que para Octave
resultado y Resultado son dos variables distintas. Esto puede ocasionarnos serias dificultades
si no recordamos exactamente como escribimos el nombre de nuestras variables. Lo recomendable
es elegir un sistema para nombrar variables y apegarse a el. Por ejemplo, muchos programadores
utilizan solo minusculas y guiones bajos, como en tiempo muerto; otros programadores siempre
7 En realidad, existe un lmite, impuesto por la tecnologa actual, de 231 1 caracteres.
2.5. VARIABLES 15
utilizan la primera letra en mayusculas, como en TiempoMuerto. Queda a criterio de cada uno
adoptar un sistema de nombres para sus variables.
Existen varias maneras de determinar si una variable esta definida y en uso.
Para averiguar cuales nombres en particular estan siendo utilizados como variable, podemos
utilizar el comando who. En su forma mas sencilla de uso, la sintaxis de who es simplemente:
who
who devuelve un listado con todas las variables en uso. Este comando acepta tambien algunos
parametros que lo hacen mas poderoso, como la posibilidad de presentar solo los nombres de vari-
ables en uso que cumplan una condicion determinada (por ejemplo, solo los nombres que comiencen
con la letra ((a))). La gua de referencia en lnea de Octave explica su utilizacion avanzada.
a ans senial
Octave no fija un tipo de datos determinado para cada variable. Una misma variable puede con-
tener primero una constante real y luego ser reasignada a un string, por ejemplo.
Para comprobar que tipos de datos estan asignados a las variables en uso, recurrimos al comando
whos:
whos
whos devuelve un listado con todas las variables en uso junto con informacion sobre las mismas
dispuesta en formato de tabla, cuyas columnas son:
Attr puede estar vaca o contener una letra que indica si una variable tiene un atributo especial. La
ayuda en lnea del comando whos lista todos los atributos posibles, pero para los alcances de
este documento solo interesa el atributo ((c)) que indica que una variable contiene un numero
complejo.
Size contiene el tamano logico de cada variable. Un escalar tiene un tamano logico de 11, mientras
una matriz de n filas y m columnas tiene un tamano logico de n m.
Class contiene la clase de variable, que puede ser double, single, char, logical, uint16, cell, o struct.
T o t a l i s 10 e l e m e n t s u s i n g 17 b y t e s
Al igual que el comando who, whos tambien acepta parametros que lo hacen mas poderoso, y
la informacion que emite puede ser configurada por el usuario. Estos temas se explican en la ayuda
en lnea, pues quedan fuera de los alcances de este documento.
2.5.1. ans
La variable ans es una variable especial predefinida, que contiene el ultimo resultado computado
que no fue explcitamente asignado a una variable.
16 CAPITULO 2. CONCEPTOS BASICOS
En este captulo veremos las operaciones basicas que Octave pone a nuestra disposicion para
manipular polinomios. Existen muchas mas funciones disenadas para polinomios ademas de las que
citaremos a continuacion, y a la vez la mayora de las funciones citadas poseen mas parametros y
funcionalidades que las que describiremos. Solo nos limitaremos a ver los aspectos mas practicos de
la manipulacion de polinomios que son de utilidad en Instrumentacion y Control de Procesos.
3 0 5 34
polyout(polinomio, variable)
donde polinomio es el vector de coeficientes del polinomio y variable es la letra con que se identi-
ficara a la variable. Si variable se omite, Octave asumira s como variable:
17
18 CAPITULO 3. OPERACIONES CON POLINOMIOS
polyval(polinomio, valor)
48 34 20
roots(polinomio)
2.4927 + 0.0000 i
1.2463 + 1 . 7 3 0 1 i
1.2463 1 . 7 3 0 1 i
conv(polinomio1, polinomio2)
donde polinomio1 y polinomio2 son los vectores con los coeficientes de los polinomios a multiplicar.
5 11 7 1
o c t a v e : 1 8> p o l y o u t ( a n s )
5 s 3 + 11 s 2 + 7 s 1 + 1
3.5. DIVISION DE POLINOMIOS 19
[B, R] = deconv(Y, A)
30 91 72 21 2
o c t a v e : 4> r o o t s ( p )
ans =
2.00000
0.50000
0.33333
0.20000
o c t a v e : 5> [ B , R] = deconv ( p , [ 1 2 ] )
B =
30 31 10 1
R =
0 0 0 0 0
El ejemplo arroja como resultado: 30 s4 +91 s3 +72 s2 +21 s+2 = (s+2)(30 s3 +31 s2 +10 s+1).
Si la salida de la funcion deconv no se asigna a un vector con dos variables, solo se vera el
vector correspondiente al polinomio cociente:
1 0 3
R =
0 0 0 2
o c t a v e : 7> deconv ( [ 1 , 2 , 3 , 4 ] , [ 1 , 2 ] )
ans =
1 0 3
20 CAPITULO 3. OPERACIONES CON POLINOMIOS
s4 5 s3 + 9 s2 3 s + 1
Ejemplo: Calcular la expansion en fracciones simples de :
s3 5 s2 + 8 s 4
o c t a v e : 8> [ r p k e ] = r e s i d u e ( [ 1 , 5, 9 , 3, 1 ] , [ 1 , 5, 8 , 4])
r =
2.0000
7.0000
3.0000
p =
2.0000
2.0000
1.0000
k =
1 0
e =
1
2
1
Si interpretamos el resultado del ejemplo anterior, concluimos que:
s4 5 s3 + 9 s2 3 s + 1 2 7 3
= + + +s
s3 5 s2 + 8 s 4 (s 2) (s 2)2 (s 1)
s4 5 s3 + 9 s2 3 s + 1
Ejemplo: Determinar los residuos de la expansion en fracciones simples de :
s3 5 s2 + 8 s 4
o c t a v e : 9> r e s i d u e ( [ 1 , 5, 9 , 3, 1 ] , [ 1 , 5, 8 , 4])
ans =
2.0000
7.0000
3.0000
A= [1 4 ; 9 7 ] ;
s = p o l y (A)
AGREGAR TAMBIEN COMANDO EIG
22 CAPITULO 3. OPERACIONES CON POLINOMIOS
Captulo 4
Como vimos en la seccion 2.4.7 del captulo ((Conceptos basicos)), un string es un vector de
caracteres, que se introduce entre comillas simples o dobles.
Octave no impone un lmite en el largo de los strings, y aunque existe un lmite impuesto por el
hardware y por el sistema operativo en uso, en los sistemas modernos y para fines practicos, es casi
imposible de alcanzar.
En este captulo repasaremos algunas de las funciones mas utiles para manipular strings, y
aunque la utilidad de muchas de ellas recien se pone de manifiesto a la hora de programar, es conve-
niente formarse una idea de las herramientas disponibles para los string.
ischar(variable)
Ejemplo: Primero definiremos dos variables: la variable a contendra el numeral -33 como numero
entero negativo; la variable b contendra el numeral -33 como string, es decir, como un vector con
tres caracteres.
o c t a v e : 1> a = 33;
o c t a v e : 2> b="-33" ;
Si pedimos a Octave que nos muestre el contenido de ambas variables, no notaremos diferencias:
o c t a v e : 3> a
a = 33
o c t a v e : 4> b
b = 33
1
Utilizamos entonces la funcion ischar para determinar cual variable contiene un string :
1 Tambien podramos utilizar la funcion whos que describimos en la seccion 2.5.
23
24 CAPITULO 4. OPERACIONES CON STRINGS
o c t a v e : 5> i s c h a r ( a )
ans = 0
o c t a v e : 6> i s c h a r ( b )
ans = 1
Otras secuencias de escape son mas Un ejemplo comun es el salto de lnea. Si queremos alma-
cenar en un solo string dos lneas de texto, debemos utilizar la secuencia de escape \n.
\n le indica a Octave que en esa posicion debe realizar un salto de lnea, es decir, comenzar a
mostrar lo siguiente en una nueva lnea de texto2 .
donde string1, string2 y (...) son una lista de los strings que se quieren concatenar.
Graficos
Una forma sumamente simple de reeplazar la linea de leyenda es hacerlo como sigue.
x = l i n s p a c e ( pi , pi , 1 0 0 ) ;
p l o t ( x , s i n h ( x ) , ";seno hiperbolico;-b" , x , c o s h ( x ) , ";coseno hiperbolico;-g" ) ;
plotyy
Grafica dos conjuntos de datos con ejes y independientes. De acuerdo con el Help de Octave su
sintaxis es,
Ejemplo.
x = 0 : 0 . 1 : 2 pi ;
y1 = s i n ( x ) ;
y2 = exp ( x 1 ) ;
ax = p l o t y y ( x , y1 , x 1 , y2 , @plot , @semilogy ) ;
x l a b e l ( "X" ) ;
y l a b e l ( ax ( 1 ) , "Axis 1" ) ;
y l a b e l ( ax ( 2 ) , "Axis 2" ) ;
27
28 CAPITULO 5. GRAFICOS
donde figname es el nombre del archivo y ext es la extension del archivo. El help de Octave
informa los distintos tipos de formatos posibles.
Ejemplo
x=[0:.1:10];
y=x 2;
plot (x , y)
p r i n t d s v g f i g 0 1 . s v g
de esta forma se graba un archivo con nombre fig01.svg que permite ser editado por Inkscape.
t = 0:0.1:6.2;
p l o t ( t , s i n ( t ) , color , [ 1 1 0 ] , linewidth , 2 )
a x i s ( "square" )
5.3.2. clf
El comando clf (clear figure) permite limpiar una figura realizada en una ventana.
5.3.3. color
El help de Octave indica lo siguiente:
colors are defined with a 3x1 vector each element between 0 and one or
0 and 255 depending on the function. The first element is the amount
of red, second green, and third is blue.
To plot with and arbitrary color just do
Ejemplo.
p l o t ( rand ( 1 0 , 1 ) , -o , color , [ 0 . 8 0 . 2 0 . 2 ] )
You can also set the order of plot colors in the axes properties. For example,
s e t ( g c f , "colororder" , j e t ( 1 1 ) )
This will define 11 colors using the jet() colormap. You can test drive the color by ...
p l o t ( rand ( 1 1 ) )
Ejemplo.
t = 0:0.1:6.2;
f i g u r e ( 1 ) , p l o t ( t , s i n ( t ) , color , [ 1 1 0 ] , linewidth , 2 )
f i g u r e ( 2 ) , p l o t ( t , s i n ( t ) , color , [ 9 0 / 2 5 5 1 9 / 2 5 5 2 5 5 / 2 5 5 ] )
f i g u r e ( 3 ) , p l o t ( t , s i n ( t ) , color , [ hex2dec ( 5A ) / 2 5 5
hex2dec ( 13 ) / 2 5 5
hex2dec ( FF ) / 2 5 5 ] )
Ver la siguiente pagina web:
http://wiki.octave.org/wiki.pl?Producing_Graphical_Output
3 0 5 34
30 CAPITULO 5. GRAFICOS
Captulo 6
Toolbox de Control
donde,
1. NUM: es el numerador de la funcion de transferencia
2. DEN: muestra la forma de espacio de estados
3. TSAM: tiempo de muestreo. Si es 0 o no se escribe, se obtiene la funcion de transferencia
continua, de otro modo se obtiene la discreta
4. INNAME y OUTNAME:
Ejemplo 1:
gs=tf([2 1],[1 2 1]);
sysout(gs)
y la salida es,
Input(s)
1: u_1
Output(s):
1: y_1
31
32 CAPITULO 6. TOOLBOX DE CONTROL
2*s1 + 1
-----------------
1*s2 + 2*s1 + 1
Ejemplo 2:
gs=tf([2 1],[1 2 1],0.1);
sysout(gs)
y la salida es,
Input(s)
1: u_1
Output(s):
1: y_1 (discrete)
sysout
Muestra la estructura de un sistema con distintos formatos de acuerdo con la siguiente sintaxis:
Comando tf2ss-ss2tf
El comando tf2ss permite obtener la realizacion en espacios de estados a partir de la funcion
de transferencia salida-entrada, mientras que el comando ss2tf realiza la operacion inversa.
Ejemplo Considere un sistema de segundo orden cuya G(s) = 1/(s + 1)(2s + 1) y se desea
obtener la correspondiente realizacion en espacio de estados.
n = 1 ; d=conv ( [ 1 1 ] , [ 2 1 ] ) ;
gs= t f ( n , d ) ; s y s o u t ( gs )
[A, B , C , D] = t f 2 s s ( n , d )
El pront de Octave nos informa el siguiente resultado:
>>sysout(gs)
Input(s)
1: u_1
6.2. DEFINIENDO SISTEMAS 33
Output(s):
1: y_1
0.00000 1.00000
-0.50000 -1.50000
B =
0
1
C =
0.50000 0.00000
D = 0
Note que los polos del sistema fueron escogidos en s1 = 1 y s2 = 1/2, lo que se puede verificar
facilmente mediante el comando eig, como se muestra a continuacion.
>> e i g (A)
ans =
0.50000
1.00000
Comando sys2tf
Ver tambien tf, tf2sys
Comando tf2zp-zp2tf
Comando c2d-d2c
El comando c2d permite obtener la funcion de transferencia discreta en el dominio z a partir de
la correspondiente funcion de transferencia continua en el domino s, mientras que el comando d2c
realiza la operacion inversa.
Ejemplo Considere un sistema de segundo orden cuya G(s) = 1/(s + 1)(2s + 1) y obtenga la
correspondiente G(z) para cuando el perodo de muestreo es de 0.1 utilizando el retenedor de orden
cero.
n = 1 ; d=conv ( [ 1 1 ] , [ 2 1 ] ) ;
gs= t f ( n , d ) ;
gz = c2d ( gs , 0 . 1 ) ; s y s o u t ( gz )
El pront de Octave nos informa el siguiente resultado:
Output(s):
1: y_1 (discrete)
34 CAPITULO 6. TOOLBOX DE CONTROL
A matrix: 2 x 2
0.997621 0.092784
-0.046392 0.858445
B matrix: 2 x 1
0.0047571
0.0927840
C matrix: 1 x 2
0.50000 0.00000
D matrix: 1 x 1
0
Note que el pront de Octave informa un resultado en variables de estado, por tanto si queremos la
expresion de G(z) debemos hacer,
Output(s):
1: y_1 (discrete)
Comando tf2sys
Finalmente, se sugiere tambien ver tf, sys2tf
Comando unitfeedback
Ver feedback
6.3. DISTINTOS TIPOS DE SENALES DE ENTRADA 35
Comando impulse
Comando step
3 0 5 34
36 CAPITULO 6. TOOLBOX DE CONTROL
Apendice: Referencia de funciones y
comandos citados
c2d
-- Function File: c2d (SYS, OPT, T)
-- Function File: c2d (SYS, T)
Converts the system data structure describing:
.
x = Ac x + Bc u
into a discrete time equivalent model:
x[n+1] = Ad x[n] + Bd u[n]
via the matrix exponential or bilinear transform.
*Inputs*
SYS
system data structure (may have both continuous time and
discrete time subsystems)
OPT
string argument; conversion option (optional argument; may be
omitted as shown above)
"ex"
use the matrix exponential (default)
"bi"
use the bilinear transformation
2(z-1)
s = -----
T(z+1)
FIXME: This option exits with an error if SYS is not
purely continuous. (The ex option can handle mixed
systems.)
"matched"
Use the matched pole/zero equivalent transformation
(currently only works for purely continuous SISO
systems).
T
sampling time; required if SYS is purely continuous.
*Output*
DSYS
Discrete time equivalent via zero-order hold, sample each T
sec.
37
38 APENDICE: REFERENCIA DE FUNCIONES Y COMANDOS CITADOS
conv
conv is a function from the file /usr/local/share/octave/3.6.1/m/polynomial/conv.m
SHAPE = "full"
Return the full convolution. (default)
SHAPE = "same"
Return the central part of the convolution with the same size
as A.
d2c
-- Function File: d2c (SYS, TOL)
-- Function File: d2c (SYS, OPT)
Convert a discrete (sub)system into a purely continuous one. The
sampling time used is sysgettsam(SYS).
*Inputs*
SYS
system data structure with discrete components
TOL
Scalar value. Tolerance for convergence of default "log"
option (see below)
OPT
conversion option. Choose from:
"log"
(default) Conversion is performed via a matrix logarithm.
Due to some problems with this computation, it is
followed by a steepest descent algorithm to identify
continuous time A, B, to get a better fit to the
original data.
"bi"
Conversion is performed via bilinear transform z = (1 +
s T / 2)/(1 - s T / 2) where T is the system sampling
39
doc
doc is a function from the file /usr/local/share/octave/3.6.1/m/help/doc.m
For example, the command doc rand starts the GNU Info browser at
the rand node in the on-line version of the manual.
exit
exit is a built-in function
feedback
## feedback(sys1,sys2)
##
## Filter the output of sys1 through sys2 and subtract it from the input.
##
## _____________
## + | |
## u --->0----->| sys1 |------->
## |- |____________| |
## | |
## | _____________ |
## | | | |
## -------| sys2 |----
## |____________|
##
## This only works for SISO systems.
40 APENDICE: REFERENCIA DE FUNCIONES Y COMANDOS CITADOS
help
help is a function from the file /usr/local/share/octave/3.6.1/m/help/help.m
The help command can give you information about operators, but not
the comma and semicolons that are used as command separators. To
get help for those, you must type help comma or help semicolon.
ischar
ischar is a built-in function
isvarname
isvarname is a built-in function
linspace
linspace is a built-in function
polyout
polyout is a function from the file /usr/local/share/octave/3.6.1/m/polyno
polyval
polyval is a function from the file /usr/local/share/octave/3.6.1/m/polyno
print
print is a function from the file /usr/share/octave/3.2.4/m/plot/print.m
OPTIONS:
-PPRINTER
Set the PRINTER name to which the graph is sent if no
FILENAME is specified.
-GGHOSTSCRIPT_COMMAND
Specify the command for calling Ghostscript. For Unix and
Windows, the defaults are gs and gswin32c, respectively.
-color
-mono
Monochrome or color lines.
-solid
-dashed
Solid or dashed lines.
-portrait
-landscape
Specify the orientation of the plot for printed output.
-dDEVICE
Output device, where DEVICE is one of:
ps
ps2
psc
psc2
Postscript (level 1 and 2, mono and color)
eps
eps2
epsc
epsc2
Encapsulated postscript (level 1 and 2, mono and color)
tex
epslatex
epslatexstandalone
pstex
pslatex
Generate a LaTeX (or TeX) file for labels, and eps/ps for
graphics. The file produced by epslatexstandalone can
be processed directly by LaTeX. The other formats are
intended to be included in a LaTeX (or TeX) document.
The tex device is the same as the epslatex device.
ill
aifm
Adobe Illustrator
cdr
corel
CorelDraw
dxf
AutoCAD
emf
meta
Microsoft Enhanced Metafile
43
fig
XFig. If this format is selected the additional options
-textspecial or -textnormal can be used to control
whether the special flag should be set for the text in
the figure (default is -textnormal).
hpgl
HP plotter language
mf
Metafont
png
Portable network graphics
jpg
jpeg
JPEG image
gif
GIF image
pbm
PBMplus
svg
Scalable vector graphics
pdf
Portable document format
quit
quit is a built-in function
residue
residue is a function from the file /usr/local/share/octave/3.6.1/m/polyno
B(s) M r(m) N
---- = SUM ------------- + SUM k(i)*s(N-i)
A(s) m=1 (s-p(m))e(m) i=1
For example,
b = [1, 1, 1];
a = [1, -5, 8, -4];
[r, p, k, e] = residue (b, a)
=> r = [-2; 7; 3]
=> p = [2; 2; 1]
=> k = [](0x0)
=> e = [1; 2; 1]
s2 + s + 1 -2 7 3
------------------- = ----- + ------- + -----
s3 - 5s2 + 8s - 4 (s-2) (s-2)2 (s-1)
The second calling form performs the inverse operation and computes
the reconstituted quotient of polynomials, B(s)/A(s), from the
partial fraction expansion; represented by the residues, poles,
and a direct polynomial specified by R, P and K, and the pole
multiplicity E.
For example:
r = [-2; 7; 3];
p = [2; 2; 1];
k = [1, 0];
[b, a] = residue (r, p, k)
=> b = [1, -5, 9, -3, 1]
=> a = [1, -5, 8, -4]
r = [7; 3; -2];
p = [2; 1; 2];
k = [1, 0];
e = [2; 1; 1];
[b, a] = residue (r, p, k, e)
=> b = [1, -5, 9, -3, 1]
=> a = [1, -5, 8, -4]
-2 7 3 s4 - 5s3 + 9s2 - 3s + 1
----- + ------- + ----- + s = --------------------------
(s-2) (s-2)2 (s-1) s3 - 5s2 + 8s - 4
45
roots
roots is a function from the file /usr/local/share/octave/3.6.1/m/polynomi
p(x) = x2 - 5.
c = [1, 0, -5];
roots (c)
=> 2.2361
=> -2.2361
Note that the true result is +/- sqrt(5) which is roughly +/-
2.2361.
ss2tf
-- Function File: [NUM, DEN] = ss2tf (A, B, C, D)
Conversion from transfer function to state-space. The state space
system:
.
x = Ax + Bu
y = Cx + Du
num(s)
G(s)=-------
den(s)
sys2tf
## -*- texinfo -*-
## @deftypefn {Function File} {[@var{num}, @var{den}, @var{tsam}, @var{innam
## Extract transfer function data from a system data structure.
##
## See @command{tf} for parameter descriptions.
##
## @strong{Example}
## @example
## octave:1> sys=ss([1 -2; -1.1,-2.1],[0;1],[1 1]);
## octave:2> [num,den] = sys2tf(sys)
## num = 1.0000 -3.0000
## den = 1.0000 1.1000 -4.3000
46 APENDICE: REFERENCIA DE FUNCIONES Y COMANDOS CITADOS
## @end example
## @end deftypefn
tf2sys
tf2ss
-- Function File: [A, B, C, D] = tf2ss (NUM, DEN)
Conversion from transfer function to state-space. The state space
system:
.
x = Ax + Bu
y = Cx + Du
is obtained from a transfer function:
num(s)
G(s)=-------
den(s)
The vector DEN must contain only one row, whereas the vector NUM
may contain as many rows as there are outputs Y of the system. The
state space system matrices obtained from this function will be in
controllable canonical form as described in Modern Control
Theory, (Brogan, 1991).
tf2zp
-- Function File: [ZER, POL, K] = tf2zp (NUM, DEN)
Converts transfer functions to poles-and-zero representations.
Returns the zeros and poles of the SISO system defined by NUM/DEN.
K is a gain associated with the system zeros.
unitfeedback
##unitfeedback(sys1)
##
## Creates the System Sys2(s) from the system Sys1(s)
## when we have a negative feedback.
## ____________
## + e | |
## u --->0----->| Sys1(s) |------------> y
## - |____________| |
## | |
## | |
## | |
## --------------<-------------
##
## and Returns :
## Y(s) Sys1(s)
## Sys2(s)= ------ = -------------------
## U(s) 1 + Sys1(s)
##
##
## the feedback is negative.
## ____________
## | |
## u ---------->| Sys2(s) |------------> y
## |____________|
##
## This only works for SISO systems.
who
who is a built-in function
-- Command: who
-- Command: who pattern ...
-- Command: who option pattern ...
-- Command: C = who ("pattern", ...)
List currently defined variables matching the given patterns.
Valid pattern syntax is the same as described for the clear
command. If no patterns are supplied, all variables are listed.
By default, only variables visible in the local scope are
displayed.
global
List variables in the global scope rather than the current
scope.
-regexp
The patterns are considered to be regular expressions when
matching the variables to display. The same pattern syntax
accepted by the regexp function is used.
-file
The next argument is treated as a filename. All variables
found within the specified file are listed. No patterns are
accepted when reading variables from a file.
whos
whos is a built-in function
-- Command: whos
-- Command: whos pattern ...
-- Command: whos option pattern ...
-- Command: S = whos ("pattern", ...)
Provide detailed information on currently defined variables
matching the given patterns. Options and pattern syntax are the
same as for the who command. Extended information about each
variable is summarized in a table with the following default
entries.
Attr
Attributes of the listed variable. Possible attributes are:
blank
Variable in local scope
a
Automatic variable. An automatic variable is one
created by the interpreter, for example argn.
c
49
f
Formal parameter (function argument).
g
Variable with global scope.
p
Persistent variable.
Name
The name of the variable.
Size
The logical size of the variable. A scalar is 1x1, a vector
is 1xN or Nx1, a 2-D matrix is MxN.
Bytes
The amount of memory currently used to store the variable.
Class
The class of the variable. Examples include double, single,
char, uint16, cell, and struct.
tf2zp
-- Function File: [NUM, DEN] = zp2tf (ZER, POL, K)
Converts zeros / poles to a transfer function.
*Inputs*
ZER
POL
Vectors of (possibly complex) poles and zeros of a transfer
function. Complex values must appear in conjugate pairs.
K
Real scalar (leading coefficient).
Indice alfabetico
d2c, 39 tf, 37
datos, vease tipos de datos tf2ss, 38
tf2sys, 40
feedback, 40 tf2zp, 39
figure, 30 tipos de datos, 7
cadenas, vease strings
graficos, 29 complejos, 7
trazado, 31 enteros, 7
impulse, 41 escalares, 7
estructuras, 12
loglog, 30 logicos, 11
matrices, 10
Octave, 3 rangos, 13
acerca de, 4 reales, 7
ayuda en lnea, 6 strings, 11
50
INDICE ALFABETICO 51
true/false, 11
vectores, 8
verdadero/falso, vease tipos de datos B true/-
false
Toolbox de Control, 37
Toolbox de Herramientas Estadsticas, 35
Toolbox de Optimizacion, 43
unitfeedback, 40
zp2tf, 39