Introducción informal a Matlab y Octave - Temas avanzados (IV)
05 de Noviembre de 2006
Encriptación
7.6.2 Diagramas de Bloques
La representación por diagramas de bloques es una parte esencial de la teoría de control. Es lo que da una idea intuitiva del sistema, un buen diagrama de bloques es una parte muy importante del problema. Podríamos pensar que para crear y manipular un diagrama de bloques es estrictamente necesario una herramienta gráfica. Esto es completamente falso como veremos a continuación. Uno de los principios de la programación es que las estructuras deben expresarse en el código pero no deben estar contenidas en él. No es difícil convertir intuitivamente un bloque en un objeto con una función de transferencia y unas entradas y salidas asociadas. Esto es precisamente lo que tenemos que intentar programando con el OCTS.Con los métodos de la sección anterior hemos aprendido a introducir la función de transferencia en un bloque pero si queremos que introducirlo en un sistema dinámico tendremos que etiquetar sus entradas y salidas convenientemente.
Supongamos que tenemos un bloque con la siguiente función de transferencia.
| dcha1(s)= |
|
>> dcha1=tf([1,0],[2,4],TSAM=0,'dcha1in','dcha1out')Evidentemente los bloques definidos por sus funciones de transferencia o por sus ceros y sus polos tendrán sólo una entrada y una salida.
Una vez hemos visto cómo crear bloques elementales pasamos a conocer las funciones que permiten a los bloques interacturar entre ellos. Son las siguientes:
- Operaciones aritméticas de bloques
- :
- sysadd
- Combina dos bloques en paralelo de modo que la salida del conjunto es la suma de ambos. Para comprender mejor el cálculo revisar la ayuda de la función
- sysmult
- Combina dos bloques en serie de modo que la salida del conjunto es el producto de ambos
- syssub
- Combina dos bloques en paralelo de modo que la salida del conjunto es la resta de ambos
- sysconnect
- Conecta dos bloques definiendo una puerta de cada uno de ellos. Una puerta es una entrada o una salida de un bloque cualquiera.
- sysgroup
- Agrupa varios bloques en uno que conserva sus entradas y salidas.
- sysdup
- Duplica las salidas y las entradas de un bloque.
- sysprune
- Elimina las entradas y las salidas espúreas del sistema
- sysidx
- Extrae los nombres de las puertas de un bloque. Muy útil cuando se utiliza con sysconnect.
- sysappend
- Introduce nuevas puertas de entrada o salida a un bloque ya existente
- buildssic
- Constructor de sistemas dinámicos. Para aprender más sobre esta función es necesario utilizar la demo de creación de sistemas, bddemo.
7.6.2.1 Ejemplo de aplicación. Un sistema realimentado simple
Las ayudas de las funciones de listadas en la sección anterior son bastante explicativas pero sin un conocimiento aproximado de un kit de análisis de sistemas dinámicos puede costarnos dar el primer paso.Una de las pocas consideraciones a tener en cuenta es que no se pueden acoplar ramas en los diagarmas de bloques, tenemos que crear las uniones duplicando las entradas y salidas en los mismos bloques. Esto es porque en cualquier kit de análisis las ramas no son más que conexiones, no tienen ninguna identidad propia. También debemos tener en cuenta que hay operaciones que se realizan entre bloques del mismo sistema y operaciones entre sistemas. Si bien sysprune, sysdup y sysconnect sólo permiten operar en el mismo sistema, sysadd o sysmult relacionan dos bloques independientes.
Para ver todo lo anterior aplicado nada mejor que un ejemplo. Supongamos que tenemos el siguiente sistema dinámico expresado por la figura 7.1 con F=10/s2(s+3) y G=s+2:
Primero construiremos el bloque de la derecha, el más cercano a la salida. Su función de transferencia es: DCHA(s)=10/s2(s+3) de modo que empezaremos definiendo su bloque básico:
Figure 7.1: Diagrama de bloques del sistema ejemplo
>> DCHA=zp([],[0,0,-3],10,TSAM=0,'DCHAIN','DCHAOUT');El paso siguiente es duplicar su salida
>> DCHAdup=sysdup(DCHA,[],'DCHAIN');
DCHAdup =
{
a =
-3 1 0
0 0 1
0 0 0
b =
0 0
0 0
1 1
c =
10 0 0
d =
0 0
inname =
{
[1,1] = DCHAIN
[1,2] = DCHAIN(dup)
}
n = 3
nz = 0
outname =
{
[1,1] = DCHAOUT
}
stname =
{
[1,1] = x_1
[1,2] = x_2
[1,3] = x_3
}
sys =
2 0 0 1
tsam = 0
yd = 0
}
Como vemos ha aparecido una nueva entrada llamada DCHAIN(dup), copia de DCHAIN. Ahora ya podemos crear la recirculación del primer estadio no sin antes cambiar el signo de la nueva puerta de salida: >> DCHAdup=sysscale(DCHAdup,[],diag([1,-1]));Este es un modo abrevidado de utilizar la función syscale, consultando la ayuda aprenderemos a utilizarla de un modo más intuitivo. Ahora conectamos la señal a la salida con la nueva puerta de entrada y finalmente simplificamos el sistema par que tenga una única entrada. Como paso final comprobaremos que el resultado es realmente el deseado escribiendo la función de transferencia del sistema.
>> DCHAend=sysconnect(DCHAdup,'DCHAOUT','DCHAIN(dup)'); >> DCHAend=sysprune(DCHAend,'DCHAOUT','DCHAIN'); >> sysout(DCHAend,'tf') Input(s) 1: DCHAIN Output(s): 1: DCHAOUT transfer function form: 10 ---------------------------------- 1*s^3 + 3*s^2 + 1.554e-15*s^1 + 10La definición del bloque de la izquierda es la única limitación del OCTS. No puede definir bloques cuyo número de ceros sea mayor a su número de polos. Esto es debido a la forma que tiene de hacer los cálculos internos para crear la estructura de datos. Para seguir con el ejemplo tendremos que romper la estructura de datos creada por el primer bloque con recirculación, multiplicarla por el polinomio del bloque de la izquierda y finalmente crear la última recirculación. Esto no significa ningún problema porque podemos pasar de la representación como estructura a función de transferencia sólo con aplicar la función sys2tf
>> [num,den]=sys2tf(DCHAend);Para multiplicar el numerador de la función de transferencia por el nuevo término utilizamos la función conv que ya vimos en la sección dedicada al cálculo con polinomios.
>> num=conv([1,2],num);El paso siguiente es reconvertir la función de transferencia en el tipo estructura.
>> TOTAL=tf(num,den,TSAM=0,'IN','OUT'); >> sysout(TOTAL,'tf') Input(s) 1: IN Output(s): 1: OUT transfer function form: 10*s^1 + 20 ---------------------------------- 1*s^3 + 3*s^2 + 1.554e-15*s^1 + 10
7.6.3 Análisis en frecuencia
De nada servirían todas las funciones de construcción de bloques si luego no podemos analizar el comportamiento de nuestro sistema. Esta parte del toolkit es sin duda su punto fuerte.Una de las pocas cosas que debemos tener en cuenta es que el sistema que se estáresolviendo cuando se hace el análisis en frecuencias no es el original sino el de la figura 7.2:
Figure 7.2: Diagrama de bloques resuelto
- bode
- Hace el análisis bode del sistema. En el caso que no se soliciten argumentos de salida se dibuja el diagrama bode
- nyquist
- Hace el análisis nyquist de sistema.
- nichols
- Hace en análisis nichols del sistema.
7.6.3.1 Ejemplo de análisis en frecuencia
Aprovechando que ya hemos creado un sistema en la sesión para hacer el diagrama de Nyquist basta con:>> nyquist(TOTAL)Lo que genera la figura (7.3).
Los diagramas de bode son igualmente sencillos de conseguir (figura 7.4):
Figure 7.3: Diagrama de Nyquist del sistema
>> bode(TOTAL)
Figure 7.4: Gráfica bode del sistema
7.7 Resolución de EDPs, formulación diferencial.
- 1
- Un nombre propio en la arquitectura de ordenadores es Seymour Cray, su biografía está íntimamente ligada al los ordenadores vectoriales. Su influencia es tremenda en el campo de la computación a gran escala.
- 2
- El ordenador con el que han sido efectuadas las pruebas es un Athlon XP 2000+ (1.662 GHz, bogomips=3301.37) con 640 Mb de RAM a 233 MHz y Octave 2.1.71. Matlab es ligeramente más rápido con el manejo de bucles aunque de ningún modo se acerca a la velocidad de los operadores matriciales. Con la optimización máxima Matlab y Octave tienen resultados equivalentes. Las pruebas se han efectuado diez veces y se da el tiempo medio de la muestra.
- 3
- Un puntero es un tipo especial de variable cuya misión es ``apuntar'' a una dirección de memoria, normalmente expresada por otra variable. El puntero no es una variable convencional, es filosóficamente algo distinto. el contenido de una variable sólo podemos cambiarlo nosotros, en cambio el valor al que apunte el puntero puede cambiar si así lo exige la ejecución. El concepto de un puntero es abstracto y requiere comprender qué es una posición en la memoria física de un ordenador. Es un concepto interesante y requiere comprenderlo.
- 4
- Este término informático proveniente de la expresión to stand alone es el adjetivo que recibe un programa que despues de ser compilado ya no tiene ninguna dependencia externa; puede tenerlas en tiempo de compilación pero no en tiempo de ejecución. En un sistema operativo tipo UNIX esto es imposible porque todo depende como mínimo de la librería estándar de C.
- 5
- gfortran es un fork del proyecto G95 por desavenencias en el desarrollo con su creador. gfortran está dentro de gcc mientras que G95 es un proyecto a parte.
- 6
- La subrutina está escrita en Fortran 77. Aunque se considere una variante obsoleta de Fortran es necesario conocer sus particularidades porque es el lenguaje en el que están escritas la mayoría de las bibliotecas de funciones. Es por ello que Octave prefiere utilizar una nomenclatura orientada a Fortran 77. Esto no genera ningún problema porque el código objeto generado por los compiladores de Fortran 77 es compatible con los de Fortran 95. Wrappers más sofisticados como f2py ya incorporan una sintaxis parecida a Fortran 95.
- 7
- Estas consideraciones no son un caso único de Matlab. El uso de un polinomio interpolante de alto orden para aproximar una función analítica es efectivo en cualquier lenguaje de programación. Es una práctica de optimización muy utilizada en los códigos antiguos escritos en fortran cuando los compiladores no eran suficientemente listos como para evaluar las funciones de un modo eficiente. Los códigos altamente optimizados no tenían ninguna función que no estuviera escrita a mano por el programador. Los tiempo en los que cada flop era valioso ya han pasado pero siempre podemos encontarnos en la necesidad de optimizar una función en concreto
- 8
- El grado de optimización en los inicios de la informática era tal que en un mismo bucle se aprovechaban los términos calculados para la evaluación de una función para evaluar a la vez su derivada; en el caso que fuera necesario.
- 9
- Octave cuenta con la función cheb.m pero está escrita en código Matlab.
- 10
- La constante TSAM no es más que el tiempo de muestreo. En el caso de sistemas continuos TSAM es igual a cero.
Valora este capítulo:
Autor y licencia de 'Introducción informal a Matlab y Octave - Temas avanzados (IV)'
|
Opiniona sobre 'Introducción informal a Matlab y Octave - Temas avanzados (IV)' (8)
Tu nombre debe tener tres caracteres como mínimo.
Es necesario que te des de alta con una cuenta de correo válida.
Es necesario que te des de alta con una cuenta de correo válida.
El contenido del título de tu opinión debe tener tres caracteres como mínimo.
Es obligatorio que selecciones una valoración del recurso.
El contenido del comentario de tu opinión debe tener tres caracteres como mínimo.
Opina sobre este tutorial |
Wikis relacionados con 'Introducción informal a Matlab y Octave - Temas avanzados (IV)'
Este artículo relaciona la recepción crítica del Portrait of the Artist as a Young Man,...
Más »
A menudo, la rapidez con la que se producen los acontecimientos en el mundo moderno...
Más »
Las ferias, congresos, conferencias o cualquier otro acto que reúna varios agentes que intervienen en...
Más »
Además de limitar la evaluación de la narrativa de García Márquez a los parámetros técnicos...
Más »
La administración de recursos humanos (personal) es el proceso administrativo aplicado al acrecentamiento y conservación...
Más »





