Post on 17-Jul-2022
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
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.
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.
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
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
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
Í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
Í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
Í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
Í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
CAPÍTULO I
INTRODUCCIÓN
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.
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.
CAPÍTULO II
REVISIÓN DE PAQUETES 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.
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.
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.
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.
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
�
�
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
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®
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.
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).
CAPÍTULO III
GNU OCTAVE
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
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.
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.
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.
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:
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)