Documentos de Académico
Documentos de Profesional
Documentos de Cultura
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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
17
17
17
18
18
18
19
20
20
20
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
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.
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
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
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.
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.3.1.
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
2.3.3.
2.3.4.
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 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
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
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
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
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
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
CAPITULO
2. CONCEPTOS BASICOS
10
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
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
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
CAPITULO
2. CONCEPTOS BASICOS
12
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.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.
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
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
o c t a v e : 2> a =2+3
a = 5
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.
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
3.1.
Definir polinomios
o c t a v e : 3> [3 0 5 3 4 ]
ans =
3.1.1.
34
Imprimir un polinomio
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
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.
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.
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.
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.
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)
22
CAPITULO
3. OPERACIONES CON POLINOMIOS
Captulo 4
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
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
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.
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 ) ) ;
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.
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.
5.2.1.
Comando surf
Note que apoyando el mouse sobre la grafica y presionando el boton izquierdo es posible rotar
la figura.
5.3.
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
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 ] )
5.4.
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.
6.2.
Definiendo Sistemas
6.2.1.
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)
El pront de Octave nos informa el siguiente resultado:
>>sysout(gs)
Input(s)
1: u_1
33
Output(s):
1: y_1
transfer function form:
1
----------------2*s2 + 3*s1 + 1
>>
A =
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 )
CAPITULO
6. TOOLBOX DE CONTROL
34
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.
6.3. DISTINTOS TIPOS DE SENALES
DE ENTRADA
6.3.
35
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.
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
38
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
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
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
polyval
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
If no filename
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
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
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
[-2; 7; 3];
[2; 2; 1];
[1, 0];
a] = residue (r, p, k)
=> b = [1, -5, 9, -3, 1]
=> a = [1, -5, 8, -4]
[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]
45
roots
ss2tf
-- Function File: [NUM, DEN] = ss2tf (A, B, C, D)
Conversion from transfer function to state-space.
system:
.
x = Ax + Bu
y = Cx + Du
sys2tf
##
##
##
##
##
##
##
##
##
##
##
##
APENDICE:
REFERENCIA DE FUNCIONES Y COMANDOS CITADOS
46
## @end example
## @end deftypefn
##
##
##
##
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
##
##
##
##
##
@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).
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
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
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