Está en la página 1de 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

1. Introduccion
1.1. Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2. Software libre en la Educacion Universitaria . . . . . . . . . . . . . . . . . . . . . .

1
1
1

2. Conceptos basicos
2.1. Instalacion de Paquetes . . . . . . . . . . . . . . .
2.1.1. Usuarios de Linux . . . . . . . . . . . . .
2.1.2. Usuarios de Windows . . . . . . . . . . .
2.2. GNU Octave . . . . . . . . . . . . . . . . . . . .
2.2.1. Acerca de Octave . . . . . . . . . . . . . .
2.2.2. Distribucion . . . . . . . . . . . . . . . . .
2.3. El entorno de trabajo de Octave . . . . . . . . . . .
2.3.1. Respuesta a los comandos . . . . . . . . .
2.3.2. Interrupcion de comandos . . . . . . . . .
2.3.3. Lista de comandos y funciones disponibles
2.3.4. Ayuda sobre comandos . . . . . . . . . . .
2.3.5. Manual en lnea . . . . . . . . . . . . . . .
2.4. Tipos de datos . . . . . . . . . . . . . . . . . . . .
2.4.1. Enteros . . . . . . . . . . . . . . . . . . .
2.4.2. Reales . . . . . . . . . . . . . . . . . . . .
2.4.3. Complejos . . . . . . . . . . . . . . . . .
2.4.4. Vectores . . . . . . . . . . . . . . . . . . .
2.4.5. Matrices . . . . . . . . . . . . . . . . . . .
2.4.6. Logicos: true/false . . . . . . . . . . . . .
2.4.7. Strings . . . . . . . . . . . . . . . . . . .
2.4.8. Estructuras . . . . . . . . . . . . . . . . .
2.4.9. Cell arrays y listas separadas por comas . .
2.4.10. Rangos . . . . . . . . . . . . . . . . . . .
2.5. Variables . . . . . . . . . . . . . . . . . . . . . .
2.5.1. ans . . . . . . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.

3
3
3
3
3
4
4
4
5
6
6
6
6
7
7
7
7
8
10
11
11
12
13
13
14
15

3. Operaciones con polinomios


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

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.

17
17
17
18
18
18
19
20
20
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


INDICE
GENERAL

IV

5. Graficos
5.1. Comandos para Realizar Graficos 2D . . . . . . . .
5.1.1. Graficos x-y . . . . . . . . . . . . . . . . .
5.1.2. Graficos logartmos y semilogartmicos . .
5.1.3. Nombrando Figuras . . . . . . . . . . . .
5.1.4. Imprimiendo Figuras . . . . . . . . . . . .
5.2. Comandos para Realizar Graficos 3D . . . . . . . .
5.2.1. Comando surf . . . . . . . . . . . . . . . .
5.3. Comandos para Mejorar el Aspecto de los Graficos
5.3.1. axis . . . . . . . . . . . . . . . . . . . . .
5.3.2. clf . . . . . . . . . . . . . . . . . . . . . .
5.3.3. color . . . . . . . . . . . . . . . . . . . .
5.4. Como trazar graficos . . . . . . . . . . . . . . . .

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

.
.
.
.
.
.
.
.
.
.
.
.

27
27
27
28
28
28
28
28
28
28
29
29
29

6. Toolbox de Control
6.1. Instalando el toolbox de control . . .
6.2. Definiendo Sistemas . . . . . . . .
6.2.1. Sistemas a Lazo Abierto . .
6.2.2. Sistemas Realimentados . .
6.3. Distintos tipos de Senales de Entrada
6.4. Analisis de Sistemas Realimentados

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

31
31
31
31
34
35
35

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

.
.
.
.
.
.

Apendice: Referencia de funciones y comandos citados

.
.
.
.
.
.

.
.
.
.
.
.

37

Prefacio

VI

PREFACIO

Captulo 1

Introduccion
1.1.

Introduccion

Mucho se ha escrito sobre el tema en este captulo incorporamos y adherimos a algunos comentarios 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 a mbito educativo. Las instituciones educativas de todos los niveles deben utilizar y ensenar exclusivamente software libre
porque es el u nico que les permite cumplir con sus misiones fundamentales: difundir el conocimiento 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 privativo 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 e tico,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 u til 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 libertad, 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

CAPITULO
1. INTRODUCCION

La libertad de ejecutar el programa significa la libertad para cualquier tipo de persona u organizacion 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. (Distribuir 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 caracterstica, 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 Ubuntu. 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, OctaveForge 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 clickeando 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.

CAPITULO
2. CONCEPTOS BASICOS

A pesar de que inicialmente estaba destinado a ser usado para ensenar diseno del reactor, 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 diferenciales y a lgebra 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 u til, 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 hacer a Octave mas u til escribiendo y contribuyendo con funciones adicionales para e l, 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 redistribuirlo 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 redistribuir 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 car


acter o conjunto de caracteres que se muestran en una lnea de comandos para indicar que el
programa en ejecucion esta a la espera de o rdenes.

2.3. EL ENTORNO DE TRABAJO DE OCTAVE

Figura 2.1: El interprete de comandos de Octave.


El prompt de Octave lleva un numero correlativo, que contabiliza el numero de comandos introducidos 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 =)) (abreviatura de answer). ans es una variable que contiene el u ltimo resultado no asignado explcitamente
a otra variable, y puede utilizarse en el siguiente comando como un alias para al u ltimo 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
u til 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

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 extenderse 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

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 precision, 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 correspondientes 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 respuestas. 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.

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


6]:

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

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

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

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 u ltimo 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 extremos como dato
Si lo que buscamos es crear un vector fila con un numero determinado de elementos equidistanciados y donde tanto el primer como el u ltimo 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 u ltimo 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 espaciara 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

1.0000

3.0000 i

5.5000 +

1.5000 i

Columns 4 and 5 :

3.2500
4 Los

0.7500 i

rangos se explican en la seccion 2.4.10, de la pagina 13

CAPITULO
2. CONCEPTOS BASICOS

10

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 deseado.
Ejemplo: Seleccion del tercer elemento de un vector.


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

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, diferenciandose 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
Ejemplo: Introducir la matriz 21
31


12
22
32

13
23:
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
21
31

12
22
32

13
23
33

o c t a v e : 9> [ 1 1 12 13
> 21 22 23
> 31 32 3 3 ]
ans =

11
21
31

12
22
32

13
23
33

Una matriz puede pensarse tambien como una coleccion de vectores fila.

1
Ejemplo: Introducir la matriz 3
7
mente:


2
5
8

3
7, donde la fila central es un vector b definido previa9

o c t a v e : 1 0> b = [3 5 7 ]
b =
3
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
3
7

2
5
8

3
7
9

Al igual que ocurre con los vectores (que en realidad son matrices de una fila), todos los elementos 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
Ejemplo: Introducir la matriz
3 1032



2, 05
:
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
0.00000 + 0.00000 i

2.05000 + 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
4
7

2
5
8

3
6
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. Internamente, 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

CAPITULO
2. CONCEPTOS BASICOS

12

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 contendra 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

2.2000

13

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 a mbito 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 e l 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 u ltimo 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, 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


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


5:

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

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.

CAPITULO
2. CONCEPTOS BASICOS

14

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 ingeniero 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 concentracion 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 e l. 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 variables 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 contener 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
==== ====
a
ans
senial

Size
====
1 x1
1 x1
1 x8

Bytes
=====
8
1
8

Class
=====
double
logical
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 u ltimo resultado computado
que no fue explcitamente asignado a una variable.

16
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

CAPITULO
2. CONCEPTOS BASICOS


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

34

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 identificara 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


CAPITULO
3. OPERACIONES CON POLINOMIOS

18

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 variable), 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

3.3.

34

20

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

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

DE POLINOMIOS
3.5. DIVISION

3.5.

19

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 u til 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

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

R =

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

R =
2

o c t a v e : 7> deconv ( [ 1 , 2 , 3 , 4 ] , [ 1 , 2 ] )
ans =


CAPITULO
3. OPERACIONES CON POLINOMIOS

20

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.
Ejemplo: Calcular la expansion en fracciones simples de


s4 5 s3 + 9 s2 3 s + 1
:
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

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:
Ejemplo: Determinar los residuos de la expansion en fracciones simples de


s4 5 s3 + 9 s2 3 s + 1
:
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 polinomio 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 u tiles para manipular strings, y
aunque la utilidad de muchas de ellas recien se pone de manifiesto a la hora de programar, es conveniente 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>
o c t a v e : 2>
o c t a v e : 3>
ans = 0
o c t a v e : 4>
ans = 1

a =33;
b="este es un string" ;
ischar (a)
ischar (b)

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 Tambi
en

podramos utilizar la funcion whos que describimos en la seccion 2.5.

23


CAPITULO
4. OPERACIONES CON STRINGS

24


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
\\
\
\
\0
\a
\b
\f
\n
\r
\t
\v

Representacion
barra invertida (\)
comillas dobles ()
comillas simples ()
caracter nulo
alerta
retroceso (backspace)
salto de pagina
salto de lnea
retorno de carro
tabulacion horizontal
tabulacion vertical

Codigo
ASCII
92
22
27
0
7
8
12
10
13
9
11

Cuadro 4.1: Secuencias de escape usuales.


Otras secuencias de escape son mas Un ejemplo comun es el salto de lnea. Si queremos almacenar 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 u nico 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 e poca 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.

DE STRINGS
4.3. CONCATENACION

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>
o c t a v e : 2>
o c t a v e : 3>
ans = dos

a="texto" ;
b="concatenados" ;
[ "dos " , a , "s " , b ]
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

CAPITULO
5. GRAFICOS

28

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
figure (2) , plot ( t

5.1.4.

);
);
, y1 ) ;
, y1 , t , e . ( t ) , t , e . ( t ) ) ;

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
c Libre Office .
c La opcion para esto es,
como Inkscape o
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 pasandole 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 =

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 consola,
sudo apt-get install octave-control

pero de este modo es muy probable que no instalemos la u ltima 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


CAPITULO
6. TOOLBOX DE CONTROL

32
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 =

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

0.00000
-0.50000

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


CAPITULO
6. TOOLBOX DE CONTROL

34

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

6.3.

35

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 =

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


APENDICE:
REFERENCIA DE FUNCIONES Y COMANDOS CITADOS

38

This function adds the suffix


discrete states.

_d to the names of the new

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
-- Function File: d2c
Convert a discrete
sampling time used

(SYS, TOL)
(SYS, OPT)
(sub)system into a purely continuous one.
is sysgettsam(SYS).

The

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


APENDICE:
REFERENCIA DE FUNCIONES Y COMANDOS CITADOS

40

## 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
Function
Function
Function
Print a

File:
File:
File:
File:
graph,

print ()
print (OPTIONS)
print (FILENAME, OPTIONS)
print (H, FILENAME, OPTIONS)
or save it to a file

FILENAME defines the file name of the output file.


is specified, the output is sent to the printer.

If no filename

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


handle for the current figure is used.


APENDICE:
REFERENCIA DE FUNCIONES Y COMANDOS CITADOS

42

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.


APENDICE:
REFERENCIA DE FUNCIONES Y COMANDOS CITADOS

44

B(s)
M
r(m)
---- = SUM ------------A(s)
m=1 (s-p(m))e(m)

N
+ SUM k(i)*s(N-i)
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 =
p =
k =
[b,

[-2; 7; 3];
[2; 2; 1];
[1, 0];
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 =
p =
k =
e =
[b,

[7; 3; -2];
[2; 1; 2];
[1, 0];
[2; 1; 1];
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.
system:
.
x = Ax + Bu
y = Cx + Du

The state space

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


APENDICE:
REFERENCIA DE FUNCIONES Y COMANDOS CITADOS

46

## @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{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

@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

47

tf2ss
-- Function File: [A, B, C, D] = tf2ss (NUM, DEN)
Conversion from transfer function to 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
may contain as many rows as
state space system matrices
controllable canonical form
Theory, (Brogan, 1991).

The state space

only one row, whereas the vector NUM


there are outputs Y of the system. The
obtained from this function will be in
as described in Modern Control

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>


APENDICE:
REFERENCIA DE FUNCIONES Y COMANDOS CITADOS

48

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.
blank
Variable in local scope

Possible attributes are:

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
seevariables B ans, 15
axis, 30
ayuda en lnea, 6

cerrar sesion, vease salir


comandos, 6
distribucion, 4
entorno de trabajo, 4
interrupcion de comandos, 6
manual en lnea, 6
salir, 5

c2d, 39
clf, 31
color, 31
comandos, 45
, 57
c2d, 45
conv, 18, 46
d2c, 46
deconv, 19
doc, 6, 47
exit, 5, 47
feedback, 47
help, 6, 48
ischar, 23, 48
isvarname, 14, 48
linspace, 9, 48
polyout, 17, 49
polyval, 18, 49
print, 49
quit, 5, 51
residue, 20, 51
roots, 18, 53
ss2tf, 53
sys2tf, 53
tf2ss, 55
tf2sys, 54
tf2zp, 55, 57
unitfeedback, 55
who, 15, 56
whos, 15, 56
control toolbox, vease toolbox de control

plot, 29
plotyy, 29
polinomios, 17, 27
convolucion, 18
deconvolucion, 19
definicion, 17
division, vease deconvolucion
evaluacion, 18
expansion en fracciones parciales, 20
imprimir, 17
polinomio caracterstico, 21
producto, vease convolucion
races, 18
residuos, 20
poly, 21
print, 30
sedumi, 43
semilogx, 30
ss2tf, 38
step, 41
strings, 23
concatenacion de, 24
identificacion de, 23
secuencias de escape, 24
surf, 30
sys2tf, 39
sysout, 38

d2c, 39
datos, vease tipos de datos

tf, 37
tf2ss, 38
tf2sys, 40
tf2zp, 39
tipos de datos, 7
cadenas, vease strings
complejos, 7
enteros, 7
escalares, 7
estructuras, 12
logicos, 11
matrices, 10
rangos, 13
reales, 7
strings, 11

feedback, 40
figure, 30
graficos, 29
trazado, 31
impulse, 41
loglog, 30
Octave, 3
acerca de, 4
ayuda en lnea, 6
50

INDICE
ALFABETICO
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

51

También podría gustarte