uso de gnu octave para simulación de sistemas no lineales

30
Uso de GNU Octave para simulación de Sistemas No Lineales Autor: Br. Andy Mar Ramírez Gómez Tutor: Prof. Richard Márquez Proyecto de Grado presentado ante la ilustre UNIVERSIDAD DE LOS ANDES como requisito final para optar al Título de INGENIERO DE SISTEMAS. Mérida, Venezuela Octubre 2006 Universidad de Los Andes © Derechos Reservados 2006

Upload: others

Post on 17-Jul-2022

8 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Uso de GNU Octave para simulación de Sistemas No Lineales

Uso de GNU Octave para simulación de Sistemas No Lineales

Autor: Br. Andy Mar Ramírez Gómez

Tutor: Prof. Richard Márquez

Proyecto de Grado presentado ante la ilustre UNIVERSIDAD DE LOS

ANDES como requisito final para optar al Título de INGENIERO DE

SISTEMAS.

Mérida, Venezuela

Octubre 2006

Universidad de Los Andes © Derechos Reservados 2006

Page 2: Uso de GNU Octave para simulación de Sistemas No Lineales

AGRADECIMIENTO

- ii -

AGRADECIMIENTOS

Doy Gracias a Dios y a la Santísima Virgen por iluminar y guiar mi vida.

A mis padres Paola y Antonio; seres de los cuales he recibido apoyo, dedicación y

confianza durante toda mi vida.

A mis hermanos Anyi y Antonio por su apoyo incondicional.

A mis amigas Yaneth, Maritté y Maritza por su paciencia, confianza y estímulo en el

transcurso de mi carrera.

A mi tutor Richard Márquez a quien le agradezco por impartirme sus conocimientos y

dedicarme su tiempo para ver plasmada la culminación de esta meta.

Page 3: Uso de GNU Octave para simulación de Sistemas No Lineales

RESUMEN

- iii -

RESUMEN

En este trabajo se analiza el desempeño de GNU Octave para simular sistemas no

lineales. Se simulan mediante GNU Octave dos métodos de control basados en el

diseño de controladores y observadores tanto lineales como no lineales: la

linealización aproximada y la linealización extendida. Se presentan algunos ejemplos

del libro de Control de Sistemas no Lineales (Sira Ramírez y otros, 2005). Los

resultados de las simulaciones utilizando GNU Octave para cada ejemplo se

comparan con MATLAB®. Algunos ejemplos se realizan, además, en Scilab.

Asimismo, el desarrollo de las simulaciones son presentadas vía Web mediante una

plataforma de diseño ya preparada para ello.

PALABRAS CLAVES

• Sistemas de control no lineales.

• Controlador – Observador.

• Simulación.

• GNU Octave.

Page 4: Uso de GNU Octave para simulación de Sistemas No Lineales

TABLA DE CONTENIDOS

- iv -

TABLA DE CONTENIDOS

AGRADECIMIENTO….…………………………………………………….

RESUMEN…………………………………………………………………….

TABLA DE CONTENIDOS………………………………………………....

ÍNDICE DE FIGURAS……………………………………………………….

ÍNDICE DE SCRIPTS…………………………………………………………

I. INTRODUCCIÓN…………………………………………………………..

I.1. OBJETIVOS…………………………………………………………….

I.1.1. Objetivo General……………………………………………………

I.1.2. Objetivos Específicos………………………………………………

I.2. ORGANIZACIÓN………………………………………………………

II. REVISIÓN DE PAQUETES PARA SIMULACIÓN DE SISTEMAS

NO LINEALES………………………………………………………………...

II.1. SCILAB…………………………………………………………………

II.2. EASY JAVA SIMULATIONS....................................................................

II.3. GNU OCTAVE…………………………………………………............

II.4. MATLAB®……………………………………………………………..

III. GNU OCTAVE…………………………………………………………….

III.1. INTRODUCCIÓN……………………………………………………

III.2. HISTORIA DE GNU OCTAVE……..……………………………….

III.3. SIMULACIÓN DE ECUACIONES DIFERENCIALES EN GNU

OCTAVE. CON APLICACIONES A CIRCUITOS ELÉCTRICOS…

III.4 SIMULACIÓN DE UN CIRCUITO RC………………………………

III.5. ALGORITMOS DE INTEGRACIÓN………………………………..

IV. CONTROL LINEAL DE SISTEMAS NO LINEALES:

LINEALIZACIÓN APROXIMADA…………………….................................

IV.1. LINEALIZACIÓN APROXIMADA………………………………….

IV.1.1. Ejemplos………………………………………………………….

ii

iii

iv

vii

ix

1

2

2

3

3

4

5

6

8

8

14

15

15

16

22

31

38

39

39

39

Page 5: Uso de GNU Octave para simulación de Sistemas No Lineales

TABLA DE CONTENIDOS

- v -

IV.1.1.1. Control de la orientación de un artefacto espacial……….

IV.1.1.2. Manipulador robótico de una sola unión rígida…………..

IV.1.1.3. Posición de un anillo sobre un aro rotatorio……………...

IV.1.1.4. Sistema de levitación magnética…………………………

IV.2. DISEÑOS DE CONTROLADORES MEDIANTE LINEALIZACIÓN

APROXIMADA……………………………………………………….

IV.2.1. Ejemplos………………………………………………………….

IV.2.1.1. Realimentación del vector de estados: control de la

orientación de un artefacto espacial………………………

IV.2.1.2. Realimentación del vector de estados: Manipulador

robótico de una sola unión rígida…………………………

IV.2.1.3. Realimentación del vector de estados: Posición de un

anillo sobre un aro rotatorio..……………………………..

IV.2.1.4. Realimentación del vector de estados: Sistema de

levitación magnética……………………………………...

IV.3. DISEÑO DEL OBSERVADOR LUENBERGER (DE ORDEN

COMPLETO) MEDIANTE LINEALIZACIÓN APROXIMADA……

IV.3.1. Ejemplos………………………………………………………….

IV.3.1.1. Diseño de un observador para el control de la orientación

de un artefacto espacial…………………………………..

IV.3.1.2. Diseño de un observador para el manipulador robótico de

una sola unión rígida……………………………………...

IV.3.1.3. Diseño de un observador para un anillo sobre un aro

rotatorio…………………………………………………..

IV.3.1.4. Diseño de un observador para el sistema de levitación

magnética…………………………………………………

V. CONTROLADOR Y OBSERVADOR NO LINEAL:

LINEALIZACIÓN EXTENDIDA…………………………………………….

V.1. LINEALIZACIÓN EXTENDIDA……………………………………..

V.2. DISEÑOS DE CONTROLADORES MEDIANTE LINEALIZACIÓN

39

42

44

46

48

49

49

54

57

61

66

67

67

71

75

79

83

84

Page 6: Uso de GNU Octave para simulación de Sistemas No Lineales

TABLA DE CONTENIDOS

- vi -

EXTENDIDA…………………………………………………………...

V.2.1. Ejemplos…………………………………………………………...

V.2.1.1. Control de la posición angular de un satélite monoaxial….

V.2.1.2. Conductores acoplados magnéticamente. ………………..

V.2.1.3. Control de un manipulador robótico de una sola unión

rígida……………………………………………………...

V.3. DISEÑO DEL OBSERVADOR DINÁMICO NO LINEAL

MEDIANTE LINEALIZACIÓN EXTENDIDA……………………….

V.3.1. Ejemplos…………………………………………………………..

V.3.1.1. Diseño de un observador dinámico no lineal para el

Control de la posición angular de un satélite monoaxial….

V.3.1.2. Diseño de un observador dinámico no lineal para

conductores acoplados magnéticamente por medio de

linealización extendida……………………………………

V.3.1.3. Control de un manipulador robótico de una sola unión

rígida………………………………………………………

VI. CONCLUSIONES Y RECOMENDACIONES………………………….

BIBLIOGRAFÍA……………………………………………………………….

86

86

86

92

97

101

102

102

106

111

117

119

Page 7: Uso de GNU Octave para simulación de Sistemas No Lineales

ÍNDICE DE FIGURAS

- vii -

ÍNDICE DE FIGURAS

Figura 2.1: Solución de una ecuación diferencial de segundo orden en Scilab…

Figura 2.2: Solución de una ecuación diferencial de segundo orden en

MATLAB®……………………………………………………………………

Figura 2.3: Solución de una ecuación diferencial de segundo orden en GNU

Octave……………………………………………………………………………

Figura 3.1: Función seno de x……………………………………………………

Figura 3.2: Solución de la ecuación diferencial de primer orden………………

Figura 3.3: Solución de la ecuación diferencial de primer orden y una

exponencial………………………………………………………………………

Figura 3.4: Solución de un sistema de ecuaciones no lineal de segundo orden….

Figura 3.5: Representación de la tensión en el capacitor y la tensión en la fuente

Figura 3.6: Representación de la tensión en el capacitor y la tensión en la fuente

Figura 3.7: Representa la tensión en el capacitor y el generador de señales……

Figura 3.8: Representa la tensión en el capacitor y el generador de señales……

Figura 3.9: Respuesta de la tensión, de la corriente en la bobina y de la fuente…

Figura 4.1: Esquema de un artefacto espacial……………………………………

Figura 4.2: Manipulador robótico de unión rígida……………………………….

Figura 4.3: Aro rotatorio sobre el que se desliza un anillo………………………

Figura 4.4: Sistema de levitación magnética……………………………………..

Figura 4.5: Comportamiento en lazo cerrado del control de la orientación de un

artefacto espacial…………………………………………………………………

Figura 4.6: Repuesta del manipulador robótico de una sola unión rígida. ………

Figura 4.7: Comportamiento de la posición de un anillo sobre un aro rotatorio...

Figura 4.8: Respuesta del sistema de levitación magnética……………………...

Figura 4.9: Respuesta de orientación de un artefacto espacial mediante

realimentación lineal de la salida utilizando un observador dinámico…………..

Figura 4.10: Comportamiento del manipulador robótico de una sola unión

10

11

12

17

19

20

21

25

26

28

28

30

40

42

44

46

53

57

61

66

70

Page 8: Uso de GNU Octave para simulación de Sistemas No Lineales

ÍNDICE DE FIGURAS

- viii -

rígida mediante realimentación lineal de la salida utilizando un observador

dinámico………………………………………………………………………….

Figura 4.11: El comportamiento de un anillo sobre un aro rotatorio para un

observador dinámico……………………………………………………………

Figura 4.12: Respuesta del sistema de levitación magnética a través de un

observador dinámico de Luenberger……………………………………………..

Figura 5.1: Satélite monoaxial: Representación de Cayley – Rodrigues………...

Figura 5.2: Comportamiento del satélite monoaxial controlado mediante

linealización extendida…………………………………………………………...

Figura 5.3: Conductores acoplados magnéticamente…………………………….

Figura 5.4: Comportamiento del conductor acoplado magnéticamente mediante

linealización extendida…………………………………………………………...

Figura 5.5: Comportamiento del manipulador robótico controlado por

linealización extendida…………………………………………………………...

Figura 5.6: Comportamiento del satélite monoaxial mediante un controlado y

un observado no lineal por linealización extendida……………………………...

Figura 5.7: Comportamiento del observador y controlador no lineal de

conductores acoplados magnéticamente mediante linealización extendida……...

Figura 5.8: Comportamiento del manipulador robótico de una sola unión rígida

para el observador dinámico no lineal y controlador no lineal………………….

75

78

82

86

91

92

97

101

106

111

116

Page 9: Uso de GNU Octave para simulación de Sistemas No Lineales

ÍNDICE DE SCRIPTS

- ix -

ÍNDICE DE SCRIPTS

Script 2.1: Programa de simulación elaborado en Scilab. pruebascilab.sce…….

Script 2.2: Programa de simulación elaborado en MATLAB®. prueba1.m…….

Script 2.2.1: Programa de simulación elaborado en MATLAB®. prueba.m……

Script 2.3: Programa de simulación elaborado en GNU Octave.

pruebaoctave.m………………………………………………………………….

Script 3.1: Programa de simulación de la función seno de x. primer.m………

Script 3.2: Simula una ecuación diferencial de primer orden. priorden.m………

Script 3.3: Simula una ecuación diferencial de primer orden y una ecuación

exponecial. priorden1.m…………………………………………………………

Script 3.4: Programa de simulación de un sistema no lineal de segundo orden

segorde.m ………………………………………………………………………..

Script 3.5: Programa de simulación de un sistema una ecuación diferencial de

primer orden. ec1.m……………………………………………………………...

Script 3.6: Programa de simulación de un Circuito RC para una señal de onda

cuadrada usando la función mod (). simuedif.m…………………………………

Script 3.7: Simulación de una ecuación diferencial de segundo orden. seg.m….

Script 4.1: Programa de simulación del control de la orientación de un artefacto

espacial. artefactocontrol.m……………………………………………………

Script 4.2: Programa de simulación del manipulador robótico de una sola unión

rígida. manicontrolaprox.m………………………………………………………

Script 4.3: Programa de simulación de la posición de un anillo sobre un aro

rotatorio. anillocontrol.m………………………………………………………...

Script 4.4: Programa de simulación del sistema de levitación magnética.

levicontrolaprox.m ………………………………………………………………

Script 4.5: Programa de simulación del control de orientación de un artefacto

espacial mediante un observador dinámico de Luenberger. artefactobs.m………

Script 4.6: Programa de simulación del manipulador robótico mediante un

10

11

11

12

16

18

20

20

24

27

29

51

56

60

64

69

Page 10: Uso de GNU Octave para simulación de Sistemas No Lineales

ÍNDICE DE SCRIPTS

- x -

observador dinámico de Luenberger. maniobsaprox.m………………………….

Script 4.7: Programa de simulación de un anillo sobre un aro rotatorio mediante

un observador dinámico de Luenberger. anilloobs.m……………………………

Script 4.8: Programa de simulación del sistema de levitación magnética a través

de un observador dinámico de Luenberger. leviobsaprox.m……………………

Script 5.1: Programa de simulación del satélite monoaxial, controlado mediante

linealización extendida. satelitecontrol.m………………………………………..

Script 5.2: Programa de simulación del Conductores acoplados

magnéticamente, mediante linealización extendida. conductorcontrol.m……..

Script 5.3: Programa de simulación del Control de un manipulador robótico de

una sola unión rígida, mediante linealización extendida. manicontroex.m……...

Script 5.4: Programa de simulación del satélite monoaxial, para un controlador

y observador mediante linealización extendida. sateliteobs.m………………..

Script 5.5: Programa de simulación para conductores acoplados

magnéticamente, para un observador no lineal. conductorobs.m……………….

Script 5.6: Programa de simulación del manipulador robótico de una sola unión

rígida para el observador. maniobsex.m…………………………..……………..

73

77

80

90

95

99

104

109

114

Page 11: Uso de GNU Octave para simulación de Sistemas No Lineales

CAPÍTULO I

INTRODUCCIÓN

Page 12: Uso de GNU Octave para simulación de Sistemas No Lineales

CAPÍTULO I: INTRODUCCIÓN

- 2 -

CAPÍTULO I

I. INTRODUCCIÓN

En este trabajo se presenta una breve revisión de algunos paquetes de simulación

numérica, así como algunos métodos de diseño y análisis de sistemas de control no

lineal, del libro de control de sistemas no lineales de Sira Ramírez y col. (2005).

Asimismo se realizan comparaciones entre varios paquetes de simulación: Scilab,

MATLAB y GNU Octave para observar que tan diferentes o similares son dichos

paquetes.

Generalmente en la Escuela de Ingeniería de Sistemas, se ha utilizado MATLAB®

para realizar trabajos de este tipo. Debido a que este paquete es comercial, es decir, su

uso incurre en costos; en este trabajo se eligió GNU Octave para la realización de

simulaciones de sistemas de control no lineal, ya que es un software libre y puede ser

utilizado y distribuido libremente.

Por tal razón, en este trabajo se pretende mostrar el funcionamiento de las

herramientas de GNU Octave para realizar simulaciones de sistemas de control no

lineales para observar que su modo de empleo y desempeño es equivalente al de

MATLAB®.

I.1. OBJETIVOS

I.1.1 OBJETIVO GENERAL

• Simular sistemas no lineales (controlados o no) mediante GNU Octave.

Page 13: Uso de GNU Octave para simulación de Sistemas No Lineales

CAPÍTULO I: INTRODUCCIÓN

- 3 -

I.1.2. OBJETIVOS ESPECÍFICOS

• Elaborar comparaciones entre diferentes paquetes como Scilab, MATLAB® y

GNU Octave.

• Realizar la implementación Web de los ejemplos tomados como base.

I.2. ORGANIZACIÓN

En esta sección se hace una breve descripción de la organización del trabajo:

Capítulo II: Revisión de paquetes para simulación de sistemas no lineales. Se realiza

el estudio de cuatro paquetes de software, donde se describe la utilización de Scilab,

Easy Java Simulation, GNU Octave y MATLAB®.

Capítulo III: GNU Octave. Se muestra el funcionamiento de GNU Octave para

simular ecuaciones diferenciales y funciones. Además se estudian algunos algoritmos

de integración para llevar a cabo dichas simulaciones.

Capítulo IV: Control lineal de sistemas no lineales: linealización aproximada. Se

desarrollan algunos ejemplos de sistemas no lineales para el diseño del controlador –

observador lineal, a través del método de linealización aproximada, observando su

comportamiento por medio de simulaciones en GNU Octave.

Capítulo V: Controlador y observador no lineal: linealización extendida. Se

desarrollan algunos ejemplos de sistemas no lineales para el diseño del controlador –

observador no lineal, a través del método de linealización extendida, observando su

comportamiento por medio de simulaciones en GNU Octave.

Capitulo VI: Conclusiones y recomendaciones. Se analiza el trabajo realizado y se

comentan las posibles mejoras y futuros trabajos que pudieran surgir a partir de éste.

Page 14: Uso de GNU Octave para simulación de Sistemas No Lineales

CAPÍTULO II

REVISIÓN DE PAQUETES PARA

SIMULACIÓN DE SISTEMAS NO

LINEALES

Page 15: Uso de GNU Octave para simulación de Sistemas No Lineales

CAPÍTULO II: REVISIÓN DE PAQUETES

- 5 -

CAPÍTULO II

II. REVISIÓN DE PAQUETES PARA SIMULACIÓN DE

SISTEMAS NO LINEALES

En este capítulo se realiza la comparación entre paquetes de simulación, donde se

describe la utilización de Scilab, Easy Java Simulation, GNU Octave y MATLAB®.

Los tres primeros paquetes son alternativas libres (o gratuitas) a MATLAB®, lo que

anima y justifica su uso.

Con cada paquete se pueden elaborar múltiples tareas. La sintaxis puede ser muy

similar entre ellos, por tal razón se realizará un breve resumen de cada paquete para

hacer notar las diferencias o semejanzas que puede existir entre ellos.

II.1. SCILAB

Scilab es un lenguaje de programación de alto nivel para cálculo científico,

interactivo de libre uso, con la condición de siempre hacer referencia a sus autores y

disponible en múltiples sistemas operativos (Unix, GNU/Linux, Windows, Sun,

Alpha). Desarrollado por INRIA (Institut National de Recherche en Informatique et

Automatique) y la colaboración de la escuela de ingenieros ENPC (École Nationale

des Ponts et Chaussées) desde 1990. Scilab fue creado para hacer cálculos numéricos

aunque también ofrece la posibilidad de hacer algunos cálculos simbólicos como

derivadas de funciones polinomiales y racionales. Posee cientos de funciones

matemáticas y la posibilidad de integrar programas en los lenguajes más usados

(FORTRAN, Java y C y C++). Scilab fue hecho para ser un sistema abierto donde el

usuario puede definir nuevos tipos de datos y operaciones entre los mismos.

Page 16: Uso de GNU Octave para simulación de Sistemas No Lineales

CAPÍTULO II: REVISIÓN DE PAQUETES

- 6 -

Scilab contiene numerosas herramientas: gráficos 2-D y 3-D, animación, álgebra

lineal, matrices dispersas, polinomios y funciones racionales, simulación: programas

de resolución de sistemas de ecuaciones diferenciales (explícitas e implícitas).

Contiene a “scicos”: simulador por diagramas en bloque de sistemas dinámicos

híbridos, control clásico, robusto, optimización LMI, optimización diferenciable y no

diferenciable, tratamiento de señales, grafos y redes, Scilab paralelo empleando PVM

(máquina paralela virtual), estadísticas, interfase con el cálculo simbólico (Maple,

MuPAD), interfase con TCL (Tool Command Language) /TK (Tool Kit).

Además incluye un editor de texto llamado SciPad para la creación de archivos de

funciones y de scripts.

Para la instalación se requiere de la versión fuente que necesita como máximo 75 Mb

de memoria en el disco duro para descomprimir el fichero e instalar la aplicación.

Puede ser instalada perfectamente en un PC con sistemas operativos Windows 95 ó

98, Linux, Unix-Xwindows; también sobre estaciones de trabajo Sun Sparc (Sun OS

4.1.3.), Sun Sparc (Sun Solaris 2.3), HP 9000 ( HP-UX 9.01 ), IBM-RS6000 ( AIX

3.2), etc.

II.2. EASY JAVA SIMULATIONS

Easy Java Simulations es una herramienta de software diseñada para la creación de

simulaciones discretas por computador.

Una simulación discreta por computador, es un programa de computador que intenta

reproducir, con fines pedagógicos o científicos, un fenómeno natural a través de la

visualización de los diferentes estados que éste puede presentar. Cada uno de estos

estados está descrito por un conjunto de variables que cambia en el tiempo debido a la

iteración de un cierto algoritmo. Todo esto significa que Easy Java Simulations es un

programa que le ayuda a crear otros programas; más precisamente, simulaciones

científicas.

Page 17: Uso de GNU Octave para simulación de Sistemas No Lineales

CAPÍTULO II: REVISIÓN DE PAQUETES

- 7 -

Existen muchos programas que ayudan a crear otros programas. Lo que hace a Easy

Java Simulations diferente de la mayoría de los otros productos es que no ha sido

diseñado para hacer la vida más sencilla a los programadores profesionales, sino que

ha sido concebido por profesores de ciencias para ser usado por profesores y

estudiantes de ciencias. Esto es, para personas que están más interesadas en el

contenido de la simulación, en el fenómeno mismo que se simula, que en los aspectos

técnicos necesarios para construir la simulación.

Easy Java Simulations es propiedad exclusiva de su autor, Francisco Esquembre,

que lo distribuye bajo licencia GNU GPL.

Easy Java Simulations y sus archivos JAR de librería pueden copiarse y distribuirse

sin límite alguno y sin solicitar permiso previo, siempre que se trate de fines no

comerciales. En cualquier caso, debe mantenerse siempre la referencia al autor que

aparece en el programa.

Easy Java Simulations, y las simulaciones creadas con él, pueden usarse como

programas independientes en diferentes sistemas operativos, o ser distribuidas por

Internet y ejecutadas en páginas Web por los navegadores más conocidos.

Easy Java Simulations es un programa Java que compila programas Java, por ello

requiere que se instale el denominado Kit de Desarrollo de Java 2 Edición Estándar

(JDK). Requiere poco espacio de disco duro para sí, unos 4 Mb. (aunque los ejemplos

pueden añadir espacio extra). Sin embargo, el JDK requiere unos 30 Mb. Siempre se

recomienda toda la memoria que se pueda, pero Easy Java Simulations debe

funcionar bien con 64 Mb.

Page 18: Uso de GNU Octave para simulación de Sistemas No Lineales

CAPÍTULO II: REVISIÓN DE PAQUETES

- 8 -

II.3. GNU OCTAVE

GNU Octave es un programa de software libre para realizar cálculos numéricos.

Como indica su nombre es parte del proyecto GNU (GNU es un acrónimo recursivo

para "GNU No es Unix").

El proyecto fue creado alrededor del año 1988 pero con una finalidad diferente: ser

utilizado en un curso de diseño de reactores químicos. Posteriormente en el año 1992,

se decide extenderlo y comienza su desarrollo a cargo de John W. Eaton. La primera

versión alpha fue lanzada el 4 de enero de 1993. Un año más tarde, el 17 de febrero,

de 1994 aparece la versión 1.0.

El nombre surge del nombre de un profesor de uno de los autores conocido por sus

buenas aproximaciones por medio de cálculos mentales a problemas numéricos.

GNU Octave está escrito en C++ usando la librería STL, permite una ejecución

interactiva, puede extenderse el lenguaje con funciones y procedimientos por medio

de módulos dinámicos, utiliza otros programas GNU para ofrecer al usuario crear

gráficos para luego imprimirlos o guardarlos (Gnuplot), además de correr en

plataformas Unix, también lo hace en Windows y se pueden generar scripts.

Al ser su licencia GNU General Public License (GPL), puede ser copiado,

modificado y utilizado libremente.

II.4. MATLAB®

MATLAB® es la abreviatura de Matrix Laboratory. Es un programa de cálculo

numérico y científico creado por The MathWorks en 1984. Está disponible para las

plataformas Unix, Windows y Mac OSX.

Page 19: Uso de GNU Octave para simulación de Sistemas No Lineales

CAPÍTULO II: REVISIÓN DE PAQUETES

- 9 -

MATLAB® es un programa de cálculo numérico, orientado a matrices y vectores.

Por tanto desde el principio hay que pensar que todo lo que se pretenda hacer con él,

será mucho más rápido y efectivo si se piensa en términos de matrices y vectores.

MATLAB® es un gran programa de cálculo técnico y científico. Para ciertas

operaciones es muy rápido, cuando puede ejecutar sus funciones en código nativo con

los tamaños más adecuados para aprovechar sus capacidades de vectorización.

Es un software muy usado en universidades, centros de investigación y por

ingenieros. En los últimos años ha incluido muchas más capacidades, como la de

programar directamente procesadores digitales de señal, crear código VHDL y otras.

MATLAB® es un paquete de software comercial bastante costoso.

Con MATLAB® se finaliza la comparación entre los paquetes y se observa que

todos los software son poderosas herramientas para ser utilizadas aunque se presentas

algunas limitaciones.

Nota: Uso de Easy Java Simulations. En este trabajo este paquete no será empleado,

ya que fue utilizado por Leticia Torres en su proyecto de grado (Torres, 2006) para

simular en tiempo real en la Web sistemas de control no lineales.

Un ejemplo de comparación entre Scilab, MATLAB® y GNU Octave.

Para observar gráficamente la semejanza entre los paquetes Scilab, MATLAB® y

GNU Octave, se presenta a continuación la simulación de una ecuación diferencial

ordinaria de segundo orden:

1 1 21 1

1

1 22 2

1

a(t) = r 1 - -

k 1+b

ca(t) = -d

1+b

x x xx x

x

x xx x

x

Page 20: Uso de GNU Octave para simulación de Sistemas No Lineales

CAPÍTULO II: REVISIÓN DE PAQUETES

- 10 -

Script 2.1: Programa de simulación elaborado en Scilab. pruebascilab.sce

x0 = [1;2];

function xdot = f (t,x)

r = 0.25;

k = 1.4;

a = 1.5;

b = 0.16;

c = 0.9;

d = 0.8;

xdot(1) = r*x(1)*(1 - x(1)/k) - a*x(1)*x(2)/(1 + b*x(1));

xdot(2) = c*a*x(1)*x(2)/(1 + b*x(1)) - d*x(2);

endfunction

t = linspace (0, 50, 200)';

x = ode(x0,0,t,f);

y = x';

plot2d(t,y);

xtitle('Solución de la ecuación diferencial');

xs2gif(0,'prueba.gif')

exit

Figura 2.1: Solución de una ecuación diferencial de segundo orden en Scilab

Page 21: Uso de GNU Octave para simulación de Sistemas No Lineales

CAPÍTULO II: REVISIÓN DE PAQUETES

- 11 -

Script 2.2: Programa de simulación elaborado en MATLAB®. prueba1.m

function dx= prueba(t, x)

r = 0.25;

k = 1.4;

a = 1.5;

b = 0.16;

c = 0.9;

d = 0.8;

dx1 = r*x(1)*(1 - x(1)/k) - a*x(1)*x(2)/(1 + b*x(1));

dx2 = c*a*x(1)*x(2)/(1 + b*x(1)) - d*x(2);

dx = [dx1;dx2];

Script 2.2.1: Programa de simulación elaborado en MATLAB®. prueba.m

clear all

close all

r = 0.25;

k = 1.4;

a = 1.5;

b = 0.16;

c = 0.9;

d = 0.8;

[t,x] = ode45('prueba1',[0 50],[1 2]);

figure(1)

plot(t,x(:,1),'r',t,x(:,2),'b')

title('Solucion de la ecuacion diferencial')

Figura 2.2: Solución de una ecuación diferencial de segundo orden en MATLAB®

Page 22: Uso de GNU Octave para simulación de Sistemas No Lineales

CAPÍTULO II: REVISIÓN DE PAQUETES

- 12 -

Script 2.3: Programa de simulación elaborado en GNU Octave. pruebaoctave.m

x0 = [1;2];

function xdot = f (x, t)

r = 0.25;

k = 1.4;

a = 1.5;

b = 0.16;

c = 0.9;

d = 0.8;

xdot(1) = r*x(1)*(1 - x(1)/k) - a*x(1)*x(2)/(1 + b*x(1));

xdot(2) = c*a*x(1)*x(2)/(1 + b*x(1)) - d*x(2);

endfunction

t = linspace (0, 50, 200)';

x = lsode ("f", x0, t);

_ _gnuplot_set_ _ terminal png

_ _gnuplot_set_ _ output "prueba.png"

plot(t,x(:,1),'r',t,x(:,2),'b')

title('Solución de la ecuación diferencial');

Figura 2.3: Solución de una ecuación diferencial de segundo orden en GNU Octave

Como puede apreciarse, todos los paquetes ofrecen la alternativa de simulación que

es la parte esencial de este proyecto. Además, se requiere que dichos paquetes posean

una interacción gráfica de usuario entre PHP (acrónimo recursivo de "PHP: Hypertext

Preprocessor", inicialmente PHP tools, o, Personal Home Page Tools) y ellos

mismos, ya que será utilizada en un capítulo posterior.

Page 23: Uso de GNU Octave para simulación de Sistemas No Lineales

CAPÍTULO II: REVISIÓN DE PAQUETES

- 13 -

Luego de realizar exhaustivos estudios sobre los cuatros paquetes de software se

concluye que:

Scilab: no será utilizado porque no se encontró la manera de realizar la interacción

con PHP (puede que exista). Si se desea este paquete puede emplearse como una

alternativa de simulación que se usa desde cualquier máquina en la cual esté

previamente instalado.

MATLAB®: es el software por excelencia en lo que a cálculo numérico y

simulaciones se refiere en asignaturas de automatización y control de procesos. Sin

embargo, tiene una gran desventaja: es demasiado costoso, su uso es comercial.

Por último se escoge a GNU Octave porque es un programa auspiciado por la GNU,

liberado bajo licencia GPL y es probablemente el lenguaje de alto nivel libre más

parecido a MATLAB®. Aunque todavía no tiene interfaz gráfica, interactúa

excelentemente y de manera fácil con PHP debido a que puede ser ejecutado por

líneas de comando, como ha sido demostrado en el trabajo de Godoy (2006).

Page 24: Uso de GNU Octave para simulación de Sistemas No Lineales

CAPÍTULO III

GNU OCTAVE

Page 25: Uso de GNU Octave para simulación de Sistemas No Lineales

CAPÍTULO III: GNU OCTAVE

- 15 -

CAPITULO III

III. GNU OCTAVE

III.1. INTRODUCCIÓN

GNU Octave es un lenguaje de alto nivel poderoso y flexible diseñado para realizar

cálculos numéricos en el ordenador, y también es un programa capaz de interpretar

este lenguaje y realizar los cálculos. GNU Octave ofrece una interfaz de usuario

interactiva, orientada a línea de comandos, pero también puede ser utilizado en modo

no interactivo, leyendo sus órdenes de fichero.

Aunque la documentación no lo especifique GNU Octave está destinado a ser un

programa parecido a MATLAB®. GNU Octave es probablemente el lenguaje de alto

nivel libre más parecido a MATLAB®.

Se va a mostrar en este trabajo que GNU Octave es tan sencillo de usar como

MATLAB® y que, además, presenta muchas de las potencialidades de este programa.

GNU Octave presenta una alternativa viable y gratuita a MATLAB®.

Asimismo se utiliza la versión 2.1.73 (i686-pc-linux-gnu) de GNU Octave para

realizar las simulaciones.

III.2. HISTORIA DE GNU OCTAVE

El programa fue concebido alrededor de 1988 como un software de ayuda para un

libro de texto sobre diseño de reactores químicos escrito por James B. Rawlings de la

Universidad de Wisconsin-Madison y John G. Ekerdt de la Universidad de Texas.

Posteriormente, al ver sus limitaciones, se optó por desarrollar una herramienta

Page 26: Uso de GNU Octave para simulación de Sistemas No Lineales

CAPÍTULO III: GNU OCTAVE

- 16 -

mucho más flexible. El nombre de GNU Octave corresponde a uno de los autores

que era profesor de Ingeniería Química. El desarrollo a tiempo completo comenzó en

la primavera de 1992. La primera versión alfa se produjo el 4 de enero de 1993, y la

versión 1.0 el 17 de febrero de 1994. Desde entonces ha habido algunas revisiones

grandes y se ha incluido con las distribuciones Debían, GNU y SuSE de Linux

(Eaton, 1997).

III.3. SIMULACIÓN DE ECUACIONES DIFERENCIALES EN GNU

OCTAVE. CON APLICACIONES A CIRCUITOS ELÉCTRICOS

GNU Octave se basa en el uso de scripts y funciones de usuario para simular

ecuaciones diferenciales.

Los scripts son archivos que se ejecutan línea a línea y que pueden a su vez llamar a

funciones de GNU Octave o funciones definidas por el usuario. Considere por

ejemplo, graficar la función sin(x) en el intervalo [0 6]. Se puede escribir el

código necesario en el archivo primer.m

Script 3.1: Programa de simulación de la función seno de x. primer.m

x = [0:0.1:6];

_ _gnuplot_set_ _ terminal png

_ _gnuplot_set_ _ output "primer.png"

plot(x,sin(x),'r')

title('Función seno de x');

xlabel('x [seg]');

ylabel('sin(x)');

Para poder, crear gráficas en GNU Octave es necesario colocar los siguientes

comandos:

_ _gnuplot_set_ _ terminal png: gnuplot soporta muchos recursos para

diferentes gráficos. Gnuplot usa set_ _terminal para generar la salida de un gráfico,

en éste caso la salida es una imagen de tipo PNG.

Page 27: Uso de GNU Octave para simulación de Sistemas No Lineales

CAPÍTULO III: GNU OCTAVE

- 17 -

_ _gnuplot_set_ _output "primer.png": Por defecto, la salida estándar son

mostradas por pantalla. El comando set_ _output muestra al archivo especificado, en

éste caso primer.png.

Cuando set_ _ terminal como set_ _output son usados juntos, lo mejor es

colocar a set_ _ terminal primero, porque algunos terminales ponen una

bandera que es necesaria en algunos sistemas operativos.

plot: es el comando primario para dibujar plots con gnuplot. Esto crea los plots de

muchas funciones y datos. El plot es usado para dibujar funciones y datos en dos

dimensiones.

title: coloca el título a la gráfica.

xlabel y ylabel: coloca etiquetas en los ejes x e y respectivamente

Desde la ventana de comandos de GNU Octave sólo se escribe primer, si es por línea

de comando desde el terminal de GNU Linux se debe escribir así: octave primer.m, es

decir; octave y el nombre del script.

Al ejecutar el código (3.1) anterior se genera la siguiente gráfica

Figura 3.1: Función seno de x.

Page 28: Uso de GNU Octave para simulación de Sistemas No Lineales

CAPÍTULO III: GNU OCTAVE

- 18 -

El siguiente script permite simular la ecuación diferencial xdt

dx−= , con condición

inicial ( ) 5.10x −= .

Script 3.2: Simula una ecuación diferencial de primer orden. priorden.m.

%Condición inicial

x0 = -1.5;

function xdot = f(x,t)

a = -1;

xdot = a*x;

endfunction

t = linspace(0,6);

x = lsode("f",x0,t);

_ _gnuplot_set_ _ terminal png

_ _gnuplot_set_ _ output "priorden.png"

plot(t,x,'b')

La ecuación diferencial es simulada mediante el comando lsode, esta función

devuelve una matriz de x como función de t, dado la condición inicial del sistema. En

el ejemplo, este comando llama a la función (f) donde debe estar escrita la ecuación

diferencial. La condición inicial es x0 = -1.5 y el tiempo de simulación es entre

[0 5] seg.

Para poder ejecutar este código, debe estar creada la ecuación diferencial (es decir, la

derivada dx

dt) de forma que GNU Octave la entienda. Esta función se puede crear en

un archivo el cual debe llevar el nombre de la función con extensión .m ó dentro del

programa principal, como se observar en el script (3.2).

function xdot = f(x,t)

a = 1;

xdot = -a*x;

endfunction

donde f es el nombre de la función. La ecuación diferencial depende de (t,x). La

ecuación xdot = -a*x; representa la ecuación diferencial con coeficiente

constante a = 1.

Page 29: Uso de GNU Octave para simulación de Sistemas No Lineales

CAPÍTULO III: GNU OCTAVE

- 19 -

Al ejecutar el script (3.2) en GNU Octave, se obtiene la gráfica siguiente:

Figura 3.2: Solución de la ecuación diferencial de primer orden.

La solución analítica 1.5e- x(t) -t= se puede sobre escribir en la gráfica anterior

usando la siguiente línea de código plot(t,x,'b',t,-1.5*exp(-t),'r+').

Las opciones 'r+' significan que va a graficar cada punto con una 'x' y en color

rojo. Como se muestra en el script 3.3 y el resultado es:

Page 30: Uso de GNU Octave para simulación de Sistemas No Lineales

CAPÍTULO III: GNU OCTAVE

- 20 -

Figura 3.3: Solución de la ecuación diferencial de primer orden y una exponencial.

Script 3.3: Simula una ecuación diferencial de primer orden y una ecuación

exponencial. priorden1.m.

x0 = -1.5;

function xdot = h(x,t)

a = -1;

xdot = a*x;

endfunction

t = linspace(0,6);

x = lsode("h",x0,t);

_ _gnuplot_set_ _ terminal png

_ _gnuplot_set_ _ output "priorden1.png"

plot(t,x,'b',t,-1.5*exp(-t),'r+')

Considere el siguiente ejemplo de un sistema no lineal de segundo orden (dos

ecuaciones diferenciales de primer orden):

Script 3.4: Programa de simulación de un sistema no lineal de segundo orden.

segorde.m

x0 = [0.1 3]; %condiciones iniciales

function dx = f(x,t)