You are on page 1of 57

Gua Simple de Octave para Estudiantes de Ingenieras

Eduardo J. Adam1 Alejandro A. Regodesebes2

27 de marzo de 2012

1
Catedra de Instrumentacion y Control de Procesos, Facultad de Ingeniera Qumica, Universidad Nacional
del Litoral - e-mail: eadam@fiq.unl.edu.ar
2
Catedra de Instrumentacion y Control de Procesos, Facultad de Ingeniera Qumica, Universidad Nacional
del Litoral - e-mail: arego@fiq.unl.edu.ar
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

3. Operaciones con polinomios 17


3.1. Definir polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.1.1. Imprimir un polinomio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
3.2. Evaluar polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.3. Races de un polinomio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.4. Producto de dos polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3.5. Division de polinomios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.6. Expansion en fracciones parciales del cociente de polinomios . . . . . . . . . . . . . 20
3.6.1. Calculo de los residuos de una expansion en fracciones simples . . . . . . . 20
3.7. Calculo de races del polinomio caracterstico . . . . . . . . . . . . . . . . . . . . . 20

4. Operaciones con strings 23


4.1. Identificacion de strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.2. Secuencias de escape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.3. Concatenacion de strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24

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

Apendice: Referencia de funciones y comandos citados 37


Prefacio

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 .

1.2. Software libre en la Educacion Universitaria


La libertad del software asume un rol de especial importancia en el ambito educativo. Las in-
stituciones educativas de todos los niveles deben utilizar y ensenar exclusivamente software libre
porque es el unico que les permite cumplir con sus misiones fundamentales: difundir el conocimien-
to y ensenar a los estudiantes a ser buenos miembros de su comunidad. El codigo fuente y los
metodos del software libre son parte del conocimiento humano. Al contrario, el software privati-
vo es conocimiento secreto y restringido y, por lo tanto, se opone a la mision de las instituciones
educativas. El software libre favorece la ensenanza, mientras el software privativo la prohbe.
El software libre no es simplemente un asunto tecnico, es un asunto etico,social y poltico. Es
una cuestion de derechos humanos que los usuarios de software deberan tener. La libertad y la
cooperacion son valores esenciales del software libre. El sistema GNU pone en practica estos valores
y el principio del compartir, pues compartir es bueno y util para el progreso de la humanidad.
Textualmente citamos a continuacion las definiciones impartidas por Stallman () respecto a
definiciones, derechos y obligaciones del software libre. El software libre es una cuestion de lib-
ertad, no de precio. Para entender el concepto, debera pensar en ((libre)) como en libre expresion, no
como en barra libre.
El software libre es una cuestion de la libertad de los usuarios de ejecutar, copiar, distribuir,
estudiar, cambiar y mejorar el software. Mas precisamente, significa que los usuarios de programas
tienen las cuatro libertades esenciales.

1. La libertad de ejecutar el programa, para cualquier proposito (libertad 0).

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.

2.1. Instalacion de Paquetes


2.1.1. Usuarios de Linux
Es muy comun trabajar con la version de Octave que viene para instalar desde el centro de control
de Linux. Sin embargo, si es necesario paquetes mas actualizados, estos se encuentran en, Octave-
Forge es un sitio donde se centraliza los paquetes suministrados por los desarrolladores para GNU
Octave.
http://octave.sourceforge.net/index.html

La forma de instalarlo es muy sencilla,

Buscar el paquete en http://octave.sourceforge.net/packages.php o click-


eando en Packages si uno se encuentra en la pagina.

Bajar el paquete deseado.

Ejecutar el siguiente comando:

pkg install package_file_name.tar.gz

2.1.2. Usuarios de Windows


Seguir las recomendaciones de http://www.gnu.org/octave para usarios de windows.

2.2. GNU Octave1


((Octave fue pensado originalmente para ser un software complementario para un libro
de texto de nivel de pregrado sobre el diseno de reactores qumicos, escrito por James B.
Rawlings, de la Universidad de Wisconsin-Madison y John G. Ekerdt de la Universidad
de Texas.
Claramente, Octave es ahora mucho mas que un simple paquete de software para un
curso de limitada utilidad fuera del aula. Pese a que nuestros objetivos iniciales fueron
un tanto vagos, sabamos que queramos crear algo que permitiera a los estudiantes
resolver problemas reales, y que podran utilizar para muchas otras cosas ademas de
los problemas de diseno de reactores qumicos. Encontramos que la mayora de los
estudiantes aprenden las primeras nociones de la Octave rapidamente, y en unas pocas
horas lo utilizan con confianza.
1 El contenido de esta seccion es una traduccion de parte del manual de Octave.

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.))

El equipo desarrollador de Octave.

2.2.1. Acerca de Octave


GNU Octave es un lenguaje de alto nivel, destinado principalmente al calculo numerico. Ofrece
una conveniente interfaz de lnea de comandos interactiva para resolver numericamente problemas
lineales y no lineales, y para realizar otros experimentos numericos. Tambien puede utilizarse como
un lenguaje de procesamiento por lotes para procesamiento de datos.
GNU Octave es un software de libre distribucion. Puede redistribuirlo y/o modificarlo bajo los
terminos de la Licencia Publica General GNU publicada por la Free Software Foundation.

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.

2.3. El entorno de trabajo de Octave


Siendo Octave un software disenado para ser operado mediante comandos, y teniendo en cuenta
que su prioridad es la eficiencia de calculo y por lo tanto el ahorro de recursos del sistema no es
de extranar que su entorno de trabajo sea una espartana consola de texto.
Para ejecutar Octave, debe abrirse una terminal y ejecutar el comando octave:
alejandro@ivangelion : $ octave

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

programa en ejecucion esta a la espera de ordenes.


2.3. EL ENTORNO DE TRABAJO DE OCTAVE 5

Figura 2.1: El interprete de comandos de Octave.

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
 

2.3.1. Respuesta a los comandos


Cuando se le ordena realizar alguna operacion, Octave precede la respuesta con ((ans =)) (abre-
viatura de answer). ans es una variable que contiene el ultimo resultado no asignado explcitamente
a otra variable, y puede utilizarse en el siguiente comando como un alias para al ultimo resultado
conseguido:

Ejemplo: Utilizacion de ans:


 
o c t a v e : 2 4> 2+3
ans = 5
o c t a v e : 2 5> a n s 7
a n s = 35
 
La variable ans se trata con mas detalle en la seccion Variables, mas adelante.
Si se desea anular la salida de un comando, simplemente escribiremos un punto y coma al final
del mismo. El comando se ejecutara, pero Octave no emitira ningun mensaje. Esto es particularmente
util para los comandos que emiten mensajes muy largos, como la definicion de matrices con miles
de elementos (tema que veremos mas adelante).

Ejemplo: Anulacion de salida de comandos. Se efectua el calculo de 60 2, pero se oculta el


resultado, que se pone de manifiesto cuando se invoca a la variable ans:
 
o c t a v e : 2 8> 6 0 2 ;
o c t a v e : 2 9> a n s
a n s = 120
 
6 CAPITULO 2. CONCEPTOS BASICOS

2.3.2. Interrupcion de comandos


La combinacion de teclas CONTROL+C sirve para interrumpir la ejecucion de un comando, en
caso que el mismo demore en terminar. Octave devuelve el promtp.

2.3.3. Lista de comandos y funciones disponibles


Para obtener un listado de los comandos y funciones disponibles, se utiliza el comando

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.

2.3.4. Ayuda sobre comandos


Para consultar el manual de referencia de comandos en lnea para un comando en particular, se
utiliza el comando help:

help comando

donde comando es el comando que se quiere consultar.

Ejemplo: Consulta de la ayuda en lnea para el comando exit.


 
o c t a v e :1> h e l p e x i t
e x i t i s a b u i l t i n f u n c t i o n

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 .

Help and i n f o r m a t i o n a b o u t O c t a v e i s a l s o a v a i l a b l e on t h e WWW


a t h t t p : / / www. o c t a v e . o r g and v i a t h e h e l p @ o c t a v e . o r g
mailing l i s t .
 

2.3.5. Manual en lnea


El manual de Octave se encuentra disponible a traves del comando doc:

doc

Es posible consultar un tema en particular con el comando:

doc tema

donde tema es el tema de interes.

Ejemplo: Consultar en el manual en lnea el tema variables.


 
o c t a v e : 1> doc v a r i a b l e s
 
El manual se recorre con las teclas de cursor. Para seguir un hiperenlace, se coloca el cursor
sobre el mismo y se pulsa la barra espaciadora. Para salir del manual, se presiona la tecla ((Q)).
3 Muchos de los paquetes disponibles se encuentran en http://octave.sourceforge.net/packages.php
2.4. TIPOS DE DATOS 7

2.4. Tipos de datos


Conocer los tipos de datos disponibles para trabajar resulta vital para los programadores. Si
bien este documento no pretende ser una gua exhaustiva de Octave, es conveniente presentar una
introduccion a los tipos de datos mas utilizados para conocer con que estamos trabajando.
En Octave los datos constantes se pueden clasificar, desde el punto de vista practico, en:
Numericos
Escalares
Enteros
Reales
Complejos
Vectores
Matrices
Logicos
true
false
Strings
Contenedores de datos
Estructuras
Cell arrays
Listas separadas por comas
Sin embargo, internamente Octave define solo ocho tipos de datos estandares: escalares reales,
escalares complejos, matrices, rangos, strings, estructuras, y cell arrays.

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.

Ejemplo: Introducir el entero 27:


 
o c t a v e : 1> 27
a n s = 27
 

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.

Ejemplo: Introducir el real 0, 00389657:


 
o c t a v e : 2> 0.00389657
a n s = 0.0038966
o c t a v e : 3> 3.89657 e3
a n s = 0.0038966
 

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

Ejemplo: Introducir el complejo 3+2. Intencionalmente colocaremos un espacio entre la cantidad


imaginaria y la constante imaginaria pura, para generar un mensaje de error:
 
o c t a v e : 4> 3 + 2 j
parse error :

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.

Ejemplo: Introducir el complejo 3104 2. Notemos como la parte imaginaria es promocionada


de entero a real:
 
o c t a v e : 5> 3 e42 j
a n s = 3 . 0 0 0 0 e 04 2 . 0 0 0 0 e +00 i
 

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.

Ejemplo: Introducir el vector [2 4 6]:


 
o c t a v e : 6> [ 2 4 6 ]
ans =

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 =

3.9700 + 0.0000 i 1.0000 + 0.0000 i 7.0100 + 3.0000 i


 

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.

Ejemplo: Definir el vector [1 1, 3 1, 6 1, 9].


 
o c t a v e : 3> [ 1 : 0 . 3 : 2 ]
ans =

1.0000 1.3000 1.6000 1.9000


 

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.

Ejemplo: Definir un vector con siete elementos, entre 1 y 2:


 
o c t a v e : 5> l i n s p a c e ( 1 , 2 , 7 )
ans =

1.0000 1.1667 1.3333 1.5000 1.6667 1.8333 2.0000


 
Podemos definir un vector cuyos elementos aparezcan en en orden descendente, y no estamos
limitados a trabajar con numeros reales. En el caso de los numeros complejos, linspace espa-
ciara linealmente tanto la parte real como la parte imaginaria.

Ejemplo: Definir un vector con cinco elementos, entre (10 + 6) y (1 3):


 
o c t a v e : 4> l i n s p a c e ( 10 +6 j ,1 3 j , 5 )
ans =

Columns 1 t h r o u g h 3 :

10.0000 + 6.0000 i 7.7500 + 3.7500 i 5.5000 + 1.5000 i

Columns 4 and 5 :

3.2500 0.7500 i 1.0000 3.0000 i


 
4 Los rangos se explican en la seccion 2.4.10, de la pagina 13
10 CAPITULO 2. CONCEPTOS BASICOS

Si omitimos el parametro cantidad, linspace asumira un vector de 100 elementos.

Referencia a elementos de un vector


Si asignamos un vector a una variable5 , cada uno de sus elementos puede ser accedido con la
estructura
variable(ndice)
donde variable es el nombre asignado al vector e ndice es el numero o posicion del elemento de-
seado.

Ejemplo: Seleccion del tercer elemento de un vector.


 
o c t a v e : 8> a = [ 2 4 6 8 1 0 ]
a =

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

5 El tema variables se desarrolla en la seccion 2.5 de la pagina 14.


2.4. TIPOS DE DATOS 11

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 =

1.00000 + 0.00000 i 2.05000 + 0.00000 i


0.00000 + 0.00000 i 5.00000 + 2.00000 i
 

Referencia a elementos de una matriz

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).

Ejemplo: Seleccion del elemento ubicado en la primera fila y segunda columna.


 
o c t a v e : 1> a = [ 1 , 2 , 3 ; 4 , 5 , 6 ; 7 , 8 , 9 ]
a =

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.6. Logicos: true/false


Las constantes logicas true y false pueden utilizarse tanto en comparaciones logicas como en
operaciones aritmeticas, razon por la cual se las puede considerar un tipo numerico especial. Inter-
namente, para Octave ambas son constantes reales: en operaciones aritmeticas, true se evalua como
el numero real 1,0, y false como el numero real 0,0.

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

Ejemplo: Introducir el string Control de Procesos:


 
o c t a v e : 1 2> "Control de Procesos"
a n s = C o n t r o l de P r o c e s o s
o c t a v e : 1 3> Control de Procesos
a n s = C o n t r o l de P r o c e s o s
 
Debido a que la comilla simple cumple en Octave la funcion de operador de transposicion de
matrices, los creadores de Octave recomiendan utilizar comillas dobles para definir strings, de modo
de evitar confusiones.
Internamente, Octave representa a los strings como vectores de caracteres, por lo tanto, muchas
de las operaciones con vectores pueden aplicarse tambien a los strings. Octave ademas cuenta con
un gran numero de funciones especficamente disenadas para manipulacion de strings, algunas de
las cuales veremos en el captulo 4.
Puede que nos resulte extrano que en un software destinado al calculo numerico se le otorgue
tanta importancia al manejo de texto; sin embargo, las operaciones sobre texto son importantes a la
hora de programar bajo Octave, y resultan vitales para ciertas aplicaciones, como en minera de texto
y minera de datos, por ejemplo.

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

Ejemplo: Definir una estructura que contenga los datos de un controlador.


Utilizaremos el nombre controlador para la estructura, que contendra dos elementos: un
string llamado tipo que expresara el tipo de controlador y un vector llamado valores que con-
tendra los valores de las acciones Proporcional, Integral y Derivativa. Una vez definida la estructura,
la mostraremos y a continuacion llamaremos al tercer elemento del vector:
 
o c t a v e : 1 4> c o n t r o l a d o r . t i p o =PID
controlador =

scalar s t r u c t u r e containing the f i e l d s :

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 =

scalar s t r u c t u r e containing the f i e l d s :

t i p o = PID
valores =

2.2000 1.0000 4.7000

o c t a v e : 1 6> c o n t r o l a d o r
controlador =

scalar s t r u c t u r e containing the f i e l d s :

t i p o = PID
valores =
2.4. TIPOS DE DATOS 13

2.2000 1.0000 4.7000

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.9. Cell arrays y listas separadas por comas


Estos tipos de datos son mas especficos del ambito de la programacion. Su tratamiento queda
fuera de los alcances de este documento, pero hay abundante informacion disponible en el manual
en lnea de Octave.

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:

inicio : incremento : tope

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.

Ejemplo: Definir el rango 3 3, 3 3, 6 3, 9:


 
o c t a v e : 1 7> 3 : 0 . 3 : 4
ans =

3.0000 3.3000 3.6000 3.9000


 
El incremento puede ser un numero negativo, es decir, un decremento.

Ejemplo: Definir el rango 4 3, 7 3, 4 3, 1:


 
o c t a v e : 1 8> 4 : 0 . 3 : 3
ans =

4.0000 3.7000 3.4000 3.1000


 
Como puede verse en los ejemplos anteriores, el valor tope no siempre se incluye en el rango,
porque depende del valor inicio y del valor del incremento. Estos dos parametros definen tambien el
numero de elementos del rango.
Si lo que se desea es obtener un vector de elementos equidistanciados definido a partir de sus
valores mnimo, maximo, y cantidad de elementos, debe utilizarse la funcion linspace.
Si se omite el incremento, Octave asumira un incremento de +1:

Ejemplo: Definir el rango 1 2 3 4 5:


 
o c t a v e : 1 9> 1 : 5
ans =

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 senial = setpoint:


 
o c t a v e : 1> s e n i a l ="setpoint"
senial = setpoint
 
En una asignacion de variables, primero se evalua el termino derecho, y el resultado es asignado
a la 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 con un dgito;

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.

Ejemplo: Listar las variables en uso.


 
o c t a v e : 5> who
V a r i a b l e s in the c u r r e n t scope :

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.

Name contiene el nombre de cada variable.

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.

Bytes contiene la cantidad de memoria utilizada para almacenar cada variable.

Class contiene la clase de variable, que puede ser double, single, char, logical, uint16, cell, o struct.

Ejemplo: Listar las variables en uso y sus caractersticas.


 
o c t a v e : 6> whos
V a r i a b l e s in the c u r r e n t scope :

A t t r Name Size Bytes Class


==== ==== ==== ===== =====
a 1 x1 8 double
ans 1 x1 1 logical
senial 1 x8 8 char

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

Ejemplo: Comportamiento de la variable ans:


 
o c t a v e : 3 8> 332
a n s = 66
o c t a v e : 3 9> a =11+5
a = 16
o c t a v e : 4 0> a n s
a n s = 66
 
Captulo 3

Operaciones con polinomios

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.1. Definir polinomios


En Octave, un polinomio de grado n es representado como un vector con (n + 1) elementos,
donde los elementos son los coeficientes del polinomio ordenados en forma descendente segun el
grado.

Ejemplo: Introducir el polinomio 34 + 5 s 3 s3 :


 
o c t a v e : 3> [3 0 5 3 4 ]
ans =

3 0 5 34
 

3.1.1. Imprimir un polinomio


La funcion polyout genera un string con el polinomio descrito por el vector:

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:

Ejemplo: Imprimir el polinomio 34 + 5 s 3 s3 :


 
o c t a v e : 7> p o l y o u t ([ 3 0 5 3 4 ] )
3 s 3 + 0 s 2 + 5 s 1 + 34
 

Ejemplo: Imprimir el polinomio 34 + 5 x 3 x3 :


 
o c t a v e : 8> p o l y o u t ([ 3 0 5 3 4 ] , "x" )
3x 3 + 0 x 2 + 5 x 1 + 34
 
No debemos perder de vista que la salida del comando polyout es un string, y como tal no
tiene funcionalidad numerica para el calculo.

17
18 CAPITULO 3. OPERACIONES CON POLINOMIOS

3.2. Evaluar polinomios


Puede evaluarse un polinomio, es decir, computar un polinomio para un valor dado de su variable,
mediante la funcion polyval.

polyval(polinomio, valor)

donde polinomio es el polinomio que se desea evaluar y valor es el valor de la variable.

Ejemplo: Evaluar el polinomio 34 + 5 s 3 s3 en s = 2 5:


 
o c t a v e : 1> p o l y v a l ([ 3 0 5 34] ,2 5 i )
a n s = 470 220 i
 
Si deseamos evaluar un polinomio en varios puntos (evaluarlo para distintos valores de su vari-
able), valor tomara la forma de un vector, cuyos elementos corresponden a los valores de la variable
para los que queremos evaluar el polinomio:

Ejemplo: Evaluar el polinomio 34 + 5 s 3 s3 en s = 2; s = 0 y s = 2:


 
o c t a v e : 2> p o l y v a l ([ 3 0 5 34] ,[ 2 0 2 ] )
ans =

48 34 20
 

3.3. Races de un polinomio


El comando roots encuentra las races de un polinomio:

roots(polinomio)

donde polinomio es el polinomio cuyas races se quieren calcular.

Ejemplo: Encontrar las races del polinomio 34 + 5 s 3 s3 :


 
o c t a v e : 3> r o o t s ([ 3 0 5 3 4 ] )
ans =

2.4927 + 0.0000 i
1.2463 + 1 . 7 3 0 1 i
1.2463 1 . 7 3 0 1 i
 

3.4. Producto de dos polinomios


Para calcular el producto de dos polinomios se utiliza la funcion conv, que devuelve un vector
con los coeficientes del polinomio resultado de la convolucion:

conv(polinomio1, polinomio2)

donde polinomio1 y polinomio2 son los vectores con los coeficientes de los polinomios a multiplicar.

Ejemplo: Calcular el producto de los polinomios (5 s + 1) y (s2 + 2 s + 1):


 
o c t a v e : 1 7> conv ( [ 5 1 ] , [ 1 2 1 ] )
ans =

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

3.5. Division de polinomios


Dada la ecuacion Y (s) = A(s) B(s) + R(s) donde Y (s), A(s), B(s) y R(s) son polinomios,
la operacion de deconvolucion permite determinar los polinomios B(s) y R(s) si se conocen los
polinomios Y (s) y A(s). Para esto de utiliza la funcion deconv:

[B, R] = deconv(Y, A)

donde A, B, R e Y son vectores de coeficientes de polinomios.


Dicho de otra forma, dados el dividendo (Y) y el divisor (A), deconv calcula el cociente (B) y
el resto (R) de una division de polinomios.
[B, R] indica que la salida de la funcion es un vector con dos elementos, cada uno de los cuales
a su vez es un vector de coeficientes de polinomio.
Esta operacion es particularmente util a la hora de descomponer un polinomio en un producto de
polinomios de menor grado.

Ejemplo: Transformar el polinomio (30 s4 + 91 s3 + 72 s2 + 21 s + 2) en un producto entre un


binomio y un polinomio. Para esto, comenzaremos por averiguar las races del polinomio, para luego
calcular la deconvolucion entre un binomio surgido de las races y el polinomio dato:
 
o c t a v e : 3> p =[ 30 91 72 21 2 ]
p =

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:

Ejemplo: Salidas de la funcion deconv:


 
o c t a v e : 6> [ B , R] = deconv ( [ 1 , 2 , 3 , 4 ] , [ 1 , 2 ] )
B =

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

3.6. Expansion en fracciones parciales del cociente de polinomios


La funcion residue calcula el desarrollo en fracciones simples del cociente de dos polinomios:

[r, p, k, e] = residue(num, den)


donde num es el vector con los coeficientes del polinomio numerador y num es el vector con los
coeficientes del polinomio denominador.
[r, p, k, e] indica que la funcion genera cuatro resultados: r es un vector que contiene
los residuos, p es un vector que contiene los polos, k es un vector que contiene los coeficientes del
polinomio directo (el polinomio con denominador 1), y e es un vector que contiene la multiplicidad
de cada uno de los polos respectivos del vector p.

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)

3.6.1. Calculo de los residuos de una expansion en fracciones simples


Si solo se desea conocer los residuos de una expansion, puede utilizarse la funcion residue
sin asignar su salida a un vector de variables. De esta forma, residue emirira solo un vector con
los residuos:

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
 

3.7. Calculo de races del polinomio caracterstico


En muchos problemas de ingeniera es comun el calculo de las races del determinante del poli-
nomio caractertico, det(zI A). Para ello esta la el comando poly
3.7. CALCULO DE RAICES DEL POLINOMIO CARACTERISTICO 21

 
A= [1 4 ; 9 7 ] ;
s = p o l y (A)
 
AGREGAR TAMBIEN COMANDO EIG
22 CAPITULO 3. OPERACIONES CON POLINOMIOS
Captulo 4

Operaciones con strings

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.

4.1. Identificacion de strings


Para determinar si una variable esta asignada a un string, se utiliza la funcion ischar:

ischar(variable)

donde variable es el nombre de la variable que estamos investigando.


ischar devuelve 1 (true), si variable esta asignada a un string, o 0 (false), en caso contrario.

Ejemplo: Utilizacion de la funcion ischar.


 
o c t a v e : 1> a =33;
o c t a v e : 2> b="este es un string" ;
o c t a v e : 3> ischar (a)
ans = 0
o c t a v e : 4> ischar (b)
ans = 1
 
Un error muy comun es confundir strings con numeros, cuando una variable contiene un numeral;
aqu la funcion ischar puede ayudarnos. Aclararemos esto en el siguiente ejemplo.

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
 

4.2. Secuencias de escape


Una secuencia de escape es un codigo que se inserta en un string para indicarle a Octave que haga
alguna operacion especial; generalmente representa una orden para imprimir un caracter especial.
Las secuencias de escape se componen de dos caracteres: comienzan por una barra invertida
(\), que indica que se trata de una secuencia de escape, y terminan con un caracter que indica la
operacion a realizar.
El cuadro 4.2 muestra las secuencias de escape mas utilizadas. Algunas son obvias, como \\,
necesaria para mostrar una barra invertida (ya que la barra invertida sola indica una secuencia de
escape), o \ y \, necesarias para mostrar comillas, que de otra manera indicaran el final del
string.

Secuencia de escape Representacion Codigo ASCII


\\ barra invertida (\) 92
\ comillas dobles () 22
\ comillas simples () 27
\0 caracter nulo 0
\a alerta 7
\b retroceso (backspace) 8
\f salto de pagina 12
\n salto de lnea 10
\r retorno de carro 13
\t tabulacion horizontal 9
\v tabulacion vertical 11

Cuadro 4.1: Secuencias de escape usuales.

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 .

Ejemplo: Utilizacion de la secuencia de escape \n.


 
o c t a v e : 3 7> "Este es un unico string\npero con dos lneas de texto."
a n s = E s t e e s un u n i c o s t r i n g
p e r o con d o s l n e a s de t e x t o .
 
Cada secuencia de escape ocupa el lugar de un solo caracter.

4.3. Concatenacion de strings


Dos o mas strings pueden concatenarse para generar un nuevo string. Para esto se escriben entre
corchetes los strings a concatenar separados por comas, segun la sintaxis:
[string1,string2, ... ]
2 Los conceptos de salto de lnea, salto de pagina y retorno de carro se originaron en la epoca en que las primitivas
computadoras eran electromecanicas, no posean monitor, e impriman la salida en papel. El salto pagina (\f), era la operacion
mediante la cual una hoja era expulsada y una nueva hoja se colocaba en posicion para ser impresa. El retorno de carro (\r),
era la operacion mediante la cual el papel se mova hasta el comienzo de la lnea de escritura, mientras que el salto de lnea
(\n), era la operacion mediante la cual el papel se mova una lnea hacia arriba. Para escribir una nueva lnea, era necesario la
combinacion de un salto de lnea y un retorno de carro (\n\r), secuencia que se ilustra en la tecla ((Enter)) (o Return) mediante
la flecha . En los sistemas Unix de hoy esta operacion combinada, en pantalla, la realiza el salto de lnea por s solo, pero
todas las secuencias de escape se mantienen por razones de compatibilidad y para permitir un control mas exacto de algunos
perifericos.
4.3. CONCATENACION DE STRINGS 25

donde string1, string2 y (...) son una lista de los strings que se quieren concatenar.

Ejemplo: Concatenacion de strings.


 
o c t a v e : 1> a="texto" ;
o c t a v e : 2> b="concatenados" ;
o c t a v e : 3> [ "dos " , a , "s " , b ]
ans = dos textos concatenados
 
26 CAPITULO 4. OPERACIONES CON STRINGS
Captulo 5

Graficos

5.1. Comandos para Realizar Graficos 2D


Hay distintos tipos de comandos para realizar graficos de todo tipo, esto es, x-y, log-log, semilog,
etc. Los comandos mas conocidos son los que se listan a continuacion.

5.1.1. Graficos x-y


Comando plot

El comando plot es muy conocido y su funcion basica es realizar graficos x-y.


Ejemplo.
 
x = l i n s p a c e ( pi , pi , 1 0 0 ) ;
p l o t ( x , sinh ( x ) , x , cosh ( x ) ) ;
 

Tambien es posible agregar leyendas al grafico de acuerdo con el siguiente ejemplo.


 
x = l i n s p a c e ( pi , pi , 1 0 0 ) ;
p l o t ( x , sinh ( x ) , x , cosh ( x ) ) ;
l e g e n d ( seno hiperbolico , coseno hiperbolico ) ;
 

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

5.1.2. Graficos logartmos y semilogartmicos


Comando loglog
Comando semilogx

5.1.3. Nombrando Figuras


Comando figure
Este comando es mas comunmente usado para designar el nombre de una figura. Tiene otros
usos mas especfcos como por ejemplo disenar una figura de un tamano en particular.
Ejemplo.
 
t = [ 0 : . 1 : 2 pi ] ;
y1=e . ( t ) . s i n ( t );
y2=e . ( t ) . c o s ( t );
figure (1) , plot ( t , y1 ) ;
figure (2) , plot ( t , y1 , t , e . ( t ) , t , e . ( t ) ) ;
 

5.1.4. Imprimiendo Figuras


Comando print
El comando print esta muy bien documentado sin embargo no muchos conocen como grabar
un archivo correspondiente a una figura para que posteriormente se pueda editar con softwar libre
como Inkscape oc Libre Office .c La opcion para esto es,

print -dext figname.ext

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.

5.2. Comandos para Realizar Graficos 3D


5.2.1. Comando surf
Permite realizar graficos en 3D a partir de la terna (x,y,z).
 
[ x , y , z ] = peaks ( 5 0 ) ;
surf (x , y , z )
 
Note que apoyando el mouse sobre la grafica y presionando el boton izquierdo es posible rotar
la figura.

5.3. Comandos para Mejorar el Aspecto de los Graficos


5.3.1. axis
El comando axis es muy conocido por quienes alguna vez hemos hecho graficos en Octave.
Sin embargo, una opcion no muy conocida es la siguiente:
a x i s ( "square" )
Con esta opcion es posible forzar a un grafico de dos dimensiones a un aspecto cuadrado pasan-
dole el argumento "square" al comando axis. De esta forma, quitamos el formato rectangular
tpico del comando plot.
Ejemplo.
5.4. COMO TRAZAR GRAFICOS 29

 
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

5.4. Como trazar graficos


En Octave, un polinomio de grado n es representado como un vector con (n + 1) elementos,
donde los elementos son los coeficientes del polinomio ordenados en forma descendente segun el
grado.

Ejemplo: Introducir el polinomio 34 + 5 s 3 s3 :


 
o c t a v e : 3> [3 0 5 3 4 ]
ans =

3 0 5 34
 
30 CAPITULO 5. GRAFICOS
Captulo 6

Toolbox de Control

6.1. Instalando el toolbox de control


Ante todo instalar el toolbox de control que se encuentra en http://octave.sourceforge.
net/index.html. De esta manera vamos a contar con la version mas actualizada disponible.
Otra posibilidad, para usuarios de Ubuntu, es ejecutando el siguiente comando desde una conso-
la,

sudo apt-get install octave-control

pero de este modo es muy probable que no instalemos la ultima version.

6.2. Definiendo Sistemas


6.2.1. Sistemas a Lazo Abierto
Comando tf
Permite obtener la funcion de transferencia de un sistema. La sintaxis es,
tf (NUM, DEN, TSAM, INNAME, OUTNAME)

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

transfer function form:

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)

Sampling interval: 0.1


transfer function form:
2*z1 + 1
-----------------
1*z2 + 2*z1 + 1

sysout
Muestra la estructura de un sistema con distintos formatos de acuerdo con la siguiente sintaxis:

sysout (SYS, OPT)

donde OPT puede ser,


1. [ ] (o nada): muestra el default del programa
2. ss: muestra la forma de espacio de estados
3. tf: muestra la forma de funcion de transferencia
4. all: muestra toda la informacion posible bajo la forma de espacios de estado y funcion de
transferencia.
Note que todos los comandos deben ser escritos con comillas simples.
Finalmente, se sugiere tambien ver tf2sys, sys2tf

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

transfer function form:


1
-----------------
2*s2 + 3*s1 + 1

>> [A, B, C, D] = tf2ss (n, d)


A =

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:

>> gz=c2d(gs,0.1); sysout(gz)


Input(s)
1: u_1

Output(s):
1: y_1 (discrete)
34 CAPITULO 6. TOOLBOX DE CONTROL

Sampling interval: 0.1


state-space form:
0 continuous states, 2 discrete states
State(s):
1: x_1_d (discrete)
2: x_2_d (discrete)

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,

>> gz=c2d(gs,0.1); sysout(gz,tf)


Input(s)
1: u_1

Output(s):
1: y_1 (discrete)

Sampling interval: 0.1


transfer function form:
0.0023786*z1 + 0.0022626
----------------------------
1*z2 - 1.8561*z1 + 0.86071

6.2.2. Sistemas Realimentados


Comando feedback
Permite armar un sistema realimentado negativamente a partir de dos estructuras predefinidas.
Se trata de la tpica funcion Glc = GH/1 + GH. Los dos sistemas que defines a G y H son sys1 y
sys2 donde sys1 y sys2 son las funciones de transferencia en el dominio continuo o discreto de
la cadena de lazo abierto GH y tienen el formato de estructura de Octave. Tanto sys1 como sys2
se deben ser obtenidas previamente con el comando tf.
 
nsys1 = [ 1 ] ; dsys1 =[1 1 1 ] ;
nsys2 = [ 2 ] ; dsys2 = [ 1 ] ;
sys1 = t f ( nsys1 , dsys1 ) ;
sys2 = t f ( nsys2 , dsys2 ) ;
g c l = feedback ( sys1 , sys2 ) ;
s y s o u t ( g c l , tf )
 
Finalmente, se recomienda ver unitfeedback.

Comando tf2sys
Finalmente, se sugiere tambien ver tf, sys2tf

Comando unitfeedback
Ver feedback
6.3. DISTINTOS TIPOS DE SENALES DE ENTRADA 35

6.3. Distintos tipos de Senales de Entrada


Es posible someter a un sistema a distintos tipos de entradas, las que estan predefinidas son el
impulso (impulse) y el escalon (step).

Comando impulse
Comando step

6.4. Analisis de Sistemas Realimentados


Comando bode
Comando margin
Comando nyquist
Comando rlocus
En Octave, un polinomio de grado n es representado como un vector con (n + 1) elementos,
donde los elementos son los coeficientes del polinomio ordenados en forma descendente segun el
grado.

Ejemplo: Introducir el polinomio 34 + 5 s 3 s3 :


 
o c t a v e : 3> [3 0 5 3 4 ]
ans =

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.

*Note* that if the second argument is not a string, c2d()


assumes that the second argument is T and performs
appropriate argument checks.

*Output*
DSYS
Discrete time equivalent via zero-order hold, sample each T
sec.

37
38 APENDICE: REFERENCIA DE FUNCIONES Y COMANDOS CITADOS

This function adds the suffix _d to the names of the new


discrete states.

conv
conv is a function from the file /usr/local/share/octave/3.6.1/m/polynomial/conv.m

-- Function File: conv (A, B)


-- Function File: conv (A, B, SHAPE)
Convolve two vectors A and B.

The output convolution is a vector with length equal to length


(A) + length (B) - 1. When A and B are the coefficient vectors
of two polynomials, the convolution represents the coefficient
vector of the product polynomial.

The optional SHAPE argument may be

SHAPE = "full"
Return the full convolution. (default)

SHAPE = "same"
Return the central part of the convolution with the same size
as A.

See also: deconv, conv2, convn, fftconv

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.

If called as d2c (SYS, TOL), with TOL positive scalar,


the "log" option is used. The default value for TOL
is 1e-8.

"bi"
Conversion is performed via bilinear transform z = (1 +
s T / 2)/(1 - s T / 2) where T is the system sampling
39

time (see sysgettsam).

FIXME: bilinear option exits with an error if SYS is not


purely discrete
*Output*
CSYS
continuous time system (same dimensions and signal names as
in SYS).

doc
doc is a function from the file /usr/local/share/octave/3.6.1/m/help/doc.m

doc is a function from the file /usr/local/share/octave/3.6.1/m/help/doc.m

-- Command: doc FUNCTION_NAME


Display documentation for the function FUNCTION_NAME directly from
an on-line version of the printed manual, using the GNU Info
browser. If invoked without any arguments, the manual is shown
from the beginning.

For example, the command doc rand starts the GNU Info browser at
the rand node in the on-line version of the manual.

Once the GNU Info browser is running, help for using it is


available using the command C-h.

See also: help

exit
exit is a built-in function

-- Built-in Function: exit (STATUS)


-- Built-in Function: quit (STATUS)
Exit the current Octave session. If the optional integer value
STATUS is supplied, pass that value to the operating system as the
Octaves exit status. The default value is zero.

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

## Author: Ben Sapp <bsapp@lanl.gov>

help
help is a function from the file /usr/local/share/octave/3.6.1/m/help/help.m

-- Command: help NAME


-- Command: help --list
Display the help text for NAME. For example, the command help
help prints a short message describing the help command.

Given the single argument --list, list all operators, keywords,


built-in functions, and loadable functions available in the
current session of Octave.

If invoked without any arguments, help display instructions on


how to access help from the command line.

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.

See also: doc, lookfor, which

ischar
ischar is a built-in function

-- Built-in Function: ischar (X)


Return true if X is a character array.

See also: isfloat, isinteger, islogical, isnumeric, iscellstr, isa

isvarname
isvarname is a built-in function

-- Built-in Function: isvarname (NAME)


Return true if NAME is a valid variable name.

See also: iskeyword, exist, who

linspace
linspace is a built-in function

-- Built-in Function: linspace (BASE, LIMIT)


-- Built-in Function: linspace (BASE, LIMIT, N)
Return a row vector with N linearly spaced elements between BASE
and LIMIT. If the number of elements is greater than one, then
the endpoints BASE and LIMIT are always included in the range. If
BASE is greater than LIMIT, the elements are stored in decreasing
order. If the number of points is not specified, a value of 100
is used.

The linspace function always returns a row vector if both BASE


41

and LIMIT are scalars. If one, or both, of them are column


vectors, linspace returns a matrix.

For compatibility with MATLAB, return the second argument (LIMIT)


if fewer than two values are requested.

polyout
polyout is a function from the file /usr/local/share/octave/3.6.1/m/polyno

-- Function File: polyout (C)


-- Function File: polyout (C, X)
-- Function File: STR = polyout (...)
Write formatted polynomial

c(x) = c(1) * xn + ... + c(n) x + c(n+1)

and return it as a string or write it to the screen (if NARGOUT is


zero). X defaults to the string "s".

See also: polyreduce

polyval
polyval is a function from the file /usr/local/share/octave/3.6.1/m/polyno

-- Function File: Y = polyval (P, X)


-- Function File: Y = polyval (P, X, [], MU)
Evaluate the polynomial P at the specified values of X. When MU
is present, evaluate the polynomial for (X-MU(1))/MU(2). If X is
a vector or matrix, the polynomial is evaluated for each of the
elements of X.

-- Function File: [Y, DY] = polyval (P, X, S)


-- Function File: [Y, DY] = polyval (P, X, S, MU)
In addition to evaluating the polynomial, the second output
represents the prediction interval, Y +/- DY, which contains at
least 50% of the future predictions. To calculate the prediction
interval, the structured variable S, originating from polyfit,
must be supplied.

See also: polyvalm, polyaffine, polyfit, roots, poly

print
print is a function from the file /usr/share/octave/3.2.4/m/plot/print.m

-- Function File: print ()


-- Function File: print (OPTIONS)
-- Function File: print (FILENAME, OPTIONS)
-- Function File: print (H, FILENAME, OPTIONS)
Print a graph, or save it to a file

FILENAME defines the file name of the output file. If no filename


is specified, the output is sent to the printer.

H specifies the figure handle. If no handle is specified the


handle for the current figure is used.
42 APENDICE: REFERENCIA DE FUNCIONES Y COMANDOS CITADOS

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

NOTE: The gnuplot binary as shipped by Debian cannot


create PDF files, see http://bugs.debian.org/478677

If the device is omitted, it is inferred from the file


extension, or if there is no filename it is sent to the
printer as postscript.

quit
quit is a built-in function

-- Built-in Function: exit (STATUS)


-- Built-in Function: quit (STATUS)
Exit the current Octave session. If the optional integer value
STATUS is supplied, pass that value to the operating system as the
Octaves exit status. The default value is zero.

residue
residue is a function from the file /usr/local/share/octave/3.6.1/m/polyno

-- Function File: [R, P, K, E] = residue (B, A)


-- Function File: [B, A] = residue (R, P, K)
-- Function File: [B, A] = residue (R, P, K, E)
The first calling form computes the partial fraction expansion for
the quotient of the polynomials, B and A.
44 APENDICE: REFERENCIA DE FUNCIONES Y COMANDOS CITADOS

B(s) M r(m) N
---- = SUM ------------- + SUM k(i)*s(N-i)
A(s) m=1 (s-p(m))e(m) i=1

where M is the number of poles (the length of the R, P, and E),


the K vector is a polynomial of order N-1 representing the direct
contribution, and the E vector specifies the multiplicity of the
m-th residues pole.

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]

which represents the following partial fraction expansion

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.

If the multiplicity, E, is not explicitly specified the


multiplicity is determined by the function mpoles.

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]

where mpoles is used to determine e = [1; 2; 1]

Alternatively the multiplicity may be defined explicitly, for


example,

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]

which represents the following partial fraction expansion

-2 7 3 s4 - 5s3 + 9s2 - 3s + 1
----- + ------- + ----- + s = --------------------------
(s-2) (s-2)2 (s-1) s3 - 5s2 + 8s - 4
45

See also: mpoles, poly, roots, conv, deconv

roots
roots is a function from the file /usr/local/share/octave/3.6.1/m/polynomi

-- Function File: roots (V)


For a vector V with N components, return the roots of the
polynomial

v(1) * z(N-1) + ... + v(N-1) * z + v(N)

As an example, the following code finds the roots of the quadratic


polynomial

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.

See also: poly, compan, fzero

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

is converted to a transfer function:

num(s)
G(s)=-------
den(s)

used internally in system data structure format manipulations.

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

## Author: R. Bruce Tenison <btenison@eng.auburn.edu>


## Created: June 24, 1994
## modified to make sys2tf by A. S. Hodel Aug 1995
## modified again for updated system format by John Ingram July 1996

tf2sys

## -*- texinfo -*-


## @deftypefn {Function File} {} tf2sys (@var{num}, @var{den}, @var{tsam}, @var{inname}, @v
## Build system data structure from transfer function format data.
##
## @strong{Inputs}
## @table @var
## @item num
## @itemx den
## Coefficients of numerator/denominator polynomials.
## @item tsam
## Sampling interval; default: 0 (continuous time).
## @item inname
## @itemx outname
## Input/output signal names; may be a string or cell array with a single string
## entry.
## @end table
##
## @strong{Output}
## @table @var
## @item sys
## System data structure.
## @end table
##
## @strong{Example}
## @example
## octave:1> sys=tf2sys([2 1],[1 2 1],0.1);
## octave:2> sysout(sys)
## Input(s)
## 1: u_1
## Output(s):
## 1: y_1 (discrete)
## Sampling interval: 0.1
## transfer function form:
## 2*z1 + 1
## -----------------
## 1*z2 + 2*z1 + 1
## @end example
## @end deftypefn

## Author: R. Bruce Tenison <btenison@eng.auburn.edu>


## Created: July 29, 1994
## Name changed to TF2SYS July 1995
## updated for new system data structure format July 1996
## name changed to tf Feb 2004
47

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.

## Author: Zyed El Hidri <zyedm79@yahoo.com>


48 APENDICE: REFERENCIA DE FUNCIONES Y COMANDOS CITADOS

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.

The following are valid options but may not be combined.

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.

If called as a function, return a cell array of defined variable


names matching the given patterns.

See also: whos, isglobal, isvarname, exist, regexp

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

Variable of complex type.

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.

The table can be customized to display more or less information


through the function whos_line_format.

If whos is called as a function, return a struct array of defined


variable names matching the given patterns. Fields in the
structure describing each variable are: name, size, bytes, class,
global, sparse, complex, nesting, persistent.

See also: who, whos_line_format

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

ans, 5 cerrar sesion, vease salir


seevariables B ans, 15 comandos, 6
axis, 30 distribucion, 4
ayuda en lnea, 6 entorno de trabajo, 4
interrupcion de comandos, 6
c2d, 39 manual en lnea, 6
clf, 31 salir, 5
color, 31
comandos, 45 plot, 29
, 57 plotyy, 29
c2d, 45 polinomios, 17, 27
conv, 18, 46 convolucion, 18
d2c, 46 deconvolucion, 19
deconv, 19 definicion, 17
doc, 6, 47 division, vease deconvolucion
exit, 5, 47 evaluacion, 18
feedback, 47 expansion en fracciones parciales, 20
help, 6, 48 imprimir, 17
ischar, 23, 48 polinomio caracterstico, 21
isvarname, 14, 48 producto, vease convolucion
linspace, 9, 48 races, 18
polyout, 17, 49 residuos, 20
polyval, 18, 49 poly, 21
print, 49 print, 30
quit, 5, 51
residue, 20, 51 sedumi, 43
roots, 18, 53 semilogx, 30
ss2tf, 53 ss2tf, 38
sys2tf, 53 step, 41
tf2ss, 55 strings, 23
tf2sys, 54 concatenacion de, 24
tf2zp, 55, 57 identificacion de, 23
unitfeedback, 55 secuencias de escape, 24
who, 15, 56 surf, 30
whos, 15, 56 sys2tf, 39
control toolbox, vease toolbox de control sysout, 38

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

valores logicos, vease tipos de datos B logicos


variables, 14
ans, 15
tamanos de variables asignadas, 15
variables asignadas, 15
vectores, vease tipos de datos B vectores

zp2tf, 39

You might also like