5. siso - primer orden lineal - :: galeón : crea tus páginas...

18
5. SISTEMAS LINEALES DE PRIMER ORDEN - SISO. Melanio Coronado**, Jonathan Cortes*, Wilfrido Ortega* Universidad del Atlántico. Simulación y Control de Procesos. Programa de Ingeniería Química Introducción. Un sistema lineal de primer orden con una variable de entrada, )" ( " t x , y una variable salida, )" ( " t y se modela matemáticamente con una ecuación que en función de parámetros de significado dinámico se escribe en la siguiente forma: () () () (1) dy t yt Kx t dt La constante K recibe la denominación de ganancia en estado estacionario del sistema, puesto que representa la relación entre la variable de salida y(t) y la variable de entrada x(t) para t∞. La constante τ que tiene una dimensión de tiempo, se llama constante de tiempo del sistema y representa un atraso dinámico. La ecuación anterior se escribe, usualmente, en términos de las variables desviación con respecto a sus valores en el estado inicial, es decir en la forma estándar para análisis dinámico o de sistemas de control: () ( ) ( ) (2) dY t Yt KX t dt Siendo, ) 0 ( ) ( ) ( y t y t Y ) 0 ( ) ( ) ( x t x t X La ecuación (2) es una ecuación diferencial lineal a la cual se le puede hallar la solución mediante un factor integrante, que para este caso es igual a exp / exp / dt t . Se desarrollan a continuación las respuestas de un sistema diferencial lineal de primer orden a cambios en la entrada que presentan especial interés en las aplicaciones como son las respuesta paso, rampa y seno.

Upload: tranphuc

Post on 17-Jul-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

5. SISTEMAS LINEALES DE PRIMER ORDEN - SISO. Melanio Coronado**, Jonathan Cortes*, Wilfrido Ortega*

Universidad del Atlántico. Simulación y Control de Procesos. Programa de Ingeniería Química

Introducción. Un sistema lineal de primer orden con una variable de entrada, )"(" tx , y una variable salida, )"(" ty se modela matemáticamente con una ecuación que en función de parámetros de significado dinámico se escribe en la siguiente forma:

( ) ( ) ( ) (1)dy t y t Kx t

dt

La constante K recibe la denominación de ganancia en estado estacionario del sistema, puesto que representa la relación entre la variable de salida y(t) y la variable de entrada x(t) para t∞. La constante τ que tiene una dimensión de tiempo, se llama constante de tiempo del sistema y representa un atraso dinámico. La ecuación anterior se escribe, usualmente, en términos de las variables desviación con respecto a sus valores en el estado inicial, es decir en la forma estándar para análisis dinámico o de sistemas de control:

( ) ( ) ( ) (2)dY t Y t KX tdt

Siendo, )0()()( ytytY

)0()()( xtxtX La ecuación (2) es una ecuación diferencial lineal a la cual se le puede hallar la solución mediante un factor integrante, que para este caso es igual a exp / exp /dt t .

Se desarrollan a continuación las respuestas de un sistema diferencial lineal de primer orden a cambios en la entrada que presentan especial interés en las aplicaciones como son las respuesta paso, rampa y seno.

Respuesta Paso De Un Sistema Lineal De Primer Orden Al considerar que en la ecuación diferencial (2), la variable de entrada es perturbada con un cambio paso constante, es decir que xtX )( , entonces se puede escribir que:

( ) ( ) (3)dY t Y t K xdt

Al resolver la ecuación (3) se obtiene como solución la siguiente respuesta para Y(t):

( ) 1 exp (4)tY t K x

La ecuación (4) se obtiene aplicando el factor integrante a la ecuación (3) y evaluando la respuesta a la condición inicial Y(0)=0. Una representación gráfica de la ecuación (4) se muestra en la Figura 1.

Fig. 1 Respuesta paso de un sistema lineal de primer orden

Respuesta Rampa De Un Sistema Lineal De Primer Orden Al considerar que en la ecuación diferencial (2), la variable de entrada es perturbada con un cambio rampa, es decir que rttX )( , entonces se puede escribir que:

( ) ( ) (5)dY t Y t Krtdt

Al resolver la ecuación (5) se obtiene como solución la siguiente respuesta para Y(t):

( ) exp (6)tY t Kr t

La ecuación (6) se obtiene aplicando el factor integrante a la ecuación (5) y evaluando la respuesta a la condición inicial Y(0)=0. Una representación gráfica de la ecuación (6) se muestra en la Figura 2

Fig. 2 Respuesta rampa de un sistema lineal de primer orden

La figura 2 muestra, gráficamente, el perfil de la respuesta rampa de un sistema lineal de primer orden. Se puede observar un comportamiento lineal y paralelo a la rampa de entrada después de un determinado tiempo, que aproximadamente es cinco veces la constante de tiempo. Respuesta Seno De Un Sistema Lineal De primer Orden Al considerar que en la ecuación diferencial (2), la variable de entrada es perturbada con un cambio seno, es decir que )()( wtASentX , entonces se puede escribir que:

( ) ( ) ( ) (7)dY t Y t KASen wtdt

Al resolver la ecuación (7) se obtiene como solución la siguiente respuesta para Y(t):

2 2( ) exp (8)

1 ( ) 1 ( )KAw t KAY t Sen wt

w w

Siendo, )(tan 1 w La ecuación (8) se obtiene aplicando el factor integrante a (7) y evaluando la solución a la condición inicial Y(0)=0

La figura 3 muestra el perfil gráfico de la respuesta seno de un sistema lineal de primer orden. Se observa una corta región inicial con una ligera inflexión que se explica por la influencia del término exponencial en la expresión (8). Cuando este primer término exponencial es de un valor despreciable, la respuesta muestra un perfil definidamente sinusoidal que se distingue por las siguientes características:

Su frecuencia es igual a la del seno de entrada Su amplitud es el coeficiente del término sinusoidal y, por lo tanto, se calcula

con la ecuación

2)(1 wKAArespuesta

Se observa que el valor de la amplitud depende de la frecuencia de la función sinusoidal de entrada, además de los parámetros dinámicos del sistema.

Es atrasada con respecto a la función seno de entrada, lo que se mide mediante un ángulo fase que también es un valor que depende de la frecuencia del seno de entrada.

Fig. 3 Respuesta seno de un sistema lineal de primer orden

Tiempo Muerto El tiempo muerto es un atraso adicional al dinámico, que se observa en la respuesta de un sistema y que se atribuye al tiempo que se requiere para transportar el efecto de la perturbación del sistema hasta puntos localizados a una cierta distancia. En el dominio de Laplace este atraso se observa en la inclusión de un término exponencial en la función de transferencia. Para sistemas SISO de primer y segundo orden lineal, las funciones de transferencia con tiempo muerto corresponden a las siguientes ecuaciones

Primer Orden: )(1

)( sXs

KesYost

Segundo Orden: )(12

)( 22 sXss

KesYost

Las respuestas gráficas muestran claramente el atraso en la respuesta del sistema cuando se observa un tiempo muerto. La Figura 4 muestra las respuestas sin y con tiempo muerto para un sistema de primer orden ante una perturbación paso en la variable de entrada

Figura 4 Respuesta Paso de un Sistema de Primer Orden con Tiempo Muerto

En forma similar, se pueden observar las respuestas con tiempo muerto para otras perturbaciones y para sistemas de orden dos o mayor Solución numérica con Matlab GUI A continuación se describe la elaboración de una interfaz gráfica que facilite, al usuario de Matlab, la solución gráfica de una ecuación diferencial lineal de primer

orden SISO mediante la introducción de los parámetros dinámicos y las condiciones iniciales de un sistema, el tipo de perturbación en la variable de entrada con sus correspondientes especificaciones y la verificación de la consideración de un tiempo muerto en el transporte dinámico. Para ello se instalan en el GUIDE un conjunto de elementos (o controles) que o muestran leyendas (Static Text) o capturen datos (Edit Text) o seleccionan procedimientos (Radio Button, Check Box) o ejecutan procedimientos (Push Button) o despliegan gráficos (Axes) Instalación de los controles en la interfaz de usuario GUI:

Una vez iniciado GUIDE, en el área de diseño se instalan los diferentes controles y se observa una interfaz con la configuración que muestra la Figura 5. Para todos los controles se deja la propiedad Tag con sus asignaciones por defecto. Al archivo se le asigna el nombre LPORDENSISO.

Figura 5. Interfaz gráfica de usuario

1. Controles Axes: Se instalan dos controles de esta clase para desplegar imágenes. En el axes3 se despliega la imagen de la ecuación diferencial de

primer orden lineal y en el axes1 se despliega la respuesta gráfica a la solución solicitada por el usuario. El código para el axes3 se incluye de tal manera que la imagen se observe al desplegarse la interfaz para su ejecución.

2. Controles Radio Button: Se instalan tres controles de esta clase para seleccionar el tipo de respuesta que se quiere simular. Se asignan las propiedades String con las leyendas que se observan en la Figura 4, es decir, “Cambio Paso”, “Cambio Rampa” y “Cambio Seno”. Para el botón “Cambio Paso”, la propiedad “Value” se asigna con el valor de uno y para los otros dos botones se asigna con el valor de cero. Esto hace que, por defecto, al desplegarse la interfaz el botón que aparezca como seleccionado sea el “Cambio Paso”

3. Controles Check Box: Se instalan dos controles de esta clase para especificar si se quiere la respuesta con o sin tiempo muerto. Se asignan las propiedades ¨String¨ con las leyendas “Sin Tiempo Muerto” y “Con Tiempo Muerto”

4. Controles Static Text: Se instalan ocho controles de esta clase para anexar leyendas a los botones (Edit Text) donde se introducen datos requeridos para la solución de la ecuación diferencial. Se asignan las propiedades “String” con las leyendas que se observan en la Figura 4, es decir, “Constante de Tiempo”, “Ganancia Estacionaria”, “Condición Inicial”, “Tiempo Inicial”, “Tiempo Final”, “Cambio Paso”, “Frecuencia”, “Tiempo Muerto”. Para los botones Frecuencia y Tiempo Muerto la propiedad “Visible” se ajusta al valor “off”. La propiedad “Visible” para los otros Static Text se deja en su valor por defecto, es decir, “on”. Esto quiere decir, que al desplegarse la interfaz los botones Frecuencia y Tiempo Muerto no se observan; el primero se nota cuando se seleccione el radio botón “Cambio Seno” y el segundo cuando se verifique el botón “Tiempo Muerto”. El código elaborado hace que cuando se seleccione el Radio Button denominado “Cambio Rampa”, la propiedad “String” del botón “Cambio Paso” cambie al valor “Pendiente”

5. Controles Edit Text: Se instalan ocho controles de esta clase para que el usuario introduzca los parámetros requeridos para la solución de la ecuación diferencial (constante de tiempo, ganancia, condición inicial, tiempo inicial, tiempo final, cambio paso, frecuencia, y tiempo muerto). Se asigna a todos ellos la propiedad “String” con un valor de cero. La propiedad “Visible” de los botones donde se editan la frecuencia y el tiempo muerto se ajustan al valor “off” y se hacen visibles cuando se seleccionan el Radio Button “Cambio Seno” y el Check Box “Tiempo Muerto”, respectivamente.

6. Controles Push Button: Se instalan tres botones de esta clase para ejecutar, reiniciar o cancelar la simulación. Se asignan las propiedades ¨String¨ a los nombres “Solución”, “Reinicio” y “Cancelar”. Al presionar el botón “Solución” se resuelve la ecuación diferencial y se despliega la respuesta grafica en el control axes1. Al presionar el botón “Reinicio” todos los

controles toman los valores iniciales asignados por defecto. Al presionar el botón ¨Cancelar¨ se cierra la ventana de la interfaz

7. Controles Panel: Se instalan cuatro botones de esta clase para encerrar los botones en cuadros separados para observarlos como dentro de un marco. Se asignan las propiedades “String” para cada uno de ellos con los nombres “Parámetros”, “Perturbación”, “Entradas” y “Respuesta”. La propiedad “ForegroundColor” se ajusta a color rojo y la propiedad “TitlePosition” a “centertop”

Concluida la instalación y distribución de los componentes del GUI se procede a construir la codificación para el funcionamiento de este programa. Para ello presione el botón M-File Editor de la barra de herramientas para acceder al código hasta ahora construido por MatLab para su modificación

Programación del GUI Antes de empezar a codificar los callbacks de cada uno de los controles se procede a definir las ecuaciones que se utilizaran para el desarrollo del programa que en este caso se declararan como funciones para que no sea necesario crear archivos adicionales. Funciones Definición de las Respuestas function dy = paso2(t,y)

global K X tspan Inicio tau dy = (K*X - y)/tau;

function dy = rampa(t,y)

global K r tau dy = (K*r*t - y)/tau;

function dy = seno(t,y)

global K w tau A dy = (A*sin(w*t) - y)/tau;

Imagen Ecuación Diferencial En este ejercicio se construyó una imagen con la ecuación diferencial de primer orden lineal SISO de la siguiente manera:

Se digita la ecuación con el editor de Microsoft Office en un archivo de Word, se toma una imagen de la pantalla y se copia en la misma página. Se hace un recorte de tal manera que el archivo de imagen se reduzca a la sola ecuación y se pega dentro de la página de trabajo de Paint. Se guarda el archivo con extensión jpg y nombre “ecuación” en la misma carpeta donde se encuentra guardado el archivo punto eme correspondiente a la interfaz grafica de usuario A continuación se digita el siguiente código dentro de la función de apertura (“Opening”) del GUI para que en su despliegue inicial se observe la ecuación diferencial de primer orden que se quiere resolver en este programa. function LPORDENSISO_OpeningFcn(hObject, eventdata, handles, varargin) % Choose default command line output for LPORDENSISO handles.output = hObject; % Update handles structure guidata(hObject, handles); axes(handles.axes3) im = imread('ecuacion.jpg') axis off; imshow(im); El renglón axes(handles.axes3) selecciona el axes donde se despliega la imagen correspondiente a la ecuación diferencial. En el siguiente renglón, la palabra clave “imread” copia la imagen correspondiente al archivo “ecuacion.jpg” que debe archivarse dentro de la misma carpeta en que se encuentra el archivo LPORDENSISO. El renglón, axis off, inactiva la numeración de los ejes del axes y mediante la palabra clave imshow se muestra la imagen que se quiere, es decir, im Radio Boton “Cambio Paso” El código que se muestra a continuación se cumple cuando se selecciona el radio buton “Cambio Paso” function radiobutton5_Callback(hObject, eventdata, handles) % Hint: get(hObject,'Value') returns toggle state of radiobutton5

set(handles.radiobutton6,'Value',0); set(handles.radiobutton7,'Value',0); set(handles.text5,'String','Cambio Paso'); set(handles.edit5,'Visible','on'); set(handles.text6,'Visible','off'); set(handles.edit6,'Visible','off'); Se deduce de los renglones anteriores, que se inactivan los otros dos radio botones denominados “Cambio Rampa” y “Cambio Seno”, se mantienen invisibles los controles “text6” y “edit6” y se ajusta la propiedad “String” del control “text5” al valor “Cambio Paso” Radio Boton “Cambio Rampa” El código que se muestra a continuación se cumple cuando se selecciona el radio buton “Cambio Paso” function radiobutton6_Callback(hObject, eventdata, handles) Hint: get(hObject,'Value') returns toggle state of radiobutton6 set(handles.radiobutton5,'Value',0); set(handles.radiobutton7,'Value',0); set(handles.text5,'String','Pendiente'); set(handles.edit5,'Visible','on'); set(handles.text6,'Visible','off'); set(handles.edit6,'Visible','off'); Es similar al anterior inactivandose, en este caso, los radio botones “Cambio Paso” y “Cambio Seno”. La propiedad “String” del botón “text5” toma el valor “Pendiente” Radio Boton “Cambio Seno” El código que se muestra a continuación se cumple cuando se selecciona el radio buton “Cambio seno” function radiobutton7_Callback(hObject, eventdata, handles)

% Hint: get(hObject,'Value') returns toggle state of radiobutton7 set(handles.radiobutton5,'Value',0); set(handles.radiobutton6,'Value',0); set(handles.text5,'String','Amplitud'); set(handles.edit5,'Visible','on'); set(handles.text6,'Visible','on'); set(handles.edit6,'Visible','on'); En este caso, se inactivan los radio botones “Cambio Paso” y “Cambio Rampa”; la propiedad “String” del boton “text5” se ajusta con el valor “Amplitud” y se hacen visible los botones “edit5”, “text6” y “edit” con los valores por defecto de su propiedad “String” (cero, “Frecuencia” y cero, respectivamente). Botón de Verificación “Con Tiempo Muerto” El siguiente código es el procedimiento que se desarrolla cuando se verifica el cuadro denominado “Con Tiempo Muerto” function checkbox2_Callback(hObject, eventdata, handles) % Hint: get(hObject,'Value') returns toggle state of checkbox2 if (get(handles.checkbox2,'Value') == 1) set(handles.text7,'Visible','on'); set(handles.edit7,'Visible','on'); else set(handles.text7,'Visible','off'); set(handles.edit7,'Visible','off'); set(handles.edit7,'String',0); end La primera parte del lazo hace que sean visibles los controles “text7” y “edit7”, si se verifica el cuadro de “checkbox2” denominado “Con Tiempo Muerto”. Lo anterior, se logra mediante el ajuste de la propiedad “Visible” a un valor “on”. En el primero se despliegue la leyenda “Tiempo Muerto” y en el segundo se introduce el valor del mismo. En caso contrario, es decir, si se desactiva el botón “checkbox2”, no se observan dichos controles y la propiedad “String” del control “edit7” se ajusta a cero

Botón Push Button “Solución” El siguiente código es el procedimiento que se desarrolla cuando se presiona el botón denominado “Solución”. Se convierten los parámetros a carácter numérico y se resuelve la ecuación diferencial para cada uno de los casos que incluye el diseño de la interfaz. Los resultados se muestran gráficamente en el axes1 function pushbutton1_Callback(hObject, eventdata, handles) global K tau X w tspan Inicio a b den h h1 to % Captura de Parámetros para la solución de la ecuación diferencial tau = str2double(get(handles.edit1,'String')); K = str2double(get(handles.edit2,'String')); Inicio = str2double(get(handles.edit4,'String')); tspan(2)= str2double(get(handles.edit9,'String')); tspan(1)= str2double(get(handles.edit8,'String')); % Selección del axes1 para la graficación de las respuestas axes(handles.axes1) % Selección del tipo de cambio paso en la variable de entrada if (get(handles.radiobutton5,'Value')==1) X = str2double(get(handles.edit5,'String')); % Selección del Tiempo Muerto if (get(handles.checkbox1,'Value') == 1)& (get(handles.checkbox2,'Value') == 0) cla; % Borra las gráficas desplegadas en el axes1 [t,y] = ode45(@paso2,tspan,Inicio); plot(t,y,'k'); xlabel('Tiempo','FontSize',12); ylabel('Respuesta','FontSize',12); title('Respuesta Paso','Fontsize',14); elseif (get(handles.checkbox2,'Value') == 1) & (get(handles.checkbox1,'Value') == 0) cla; to = str2double(get(handles.edit7,'String'));

h = tf([K*X],[tau 1],'inputdelay',to); [y1,t] = step(h,tspan(2)); plot(t,y1,'r') xlabel('Tiempo','FontSize',12); ylabel('Respuesta','FontSize',12); title('Respuesta Paso','Fontsize',14); elseif (get(handles.checkbox1,'Value') == 1) & (get(handles.checkbox2,'Value') == 1) cla; [t,y] = ode45(@paso2,tspan,Inicio); plot(t,y,'k'); hold on to = str2double(get(handles.edit7,'String')); h = tf([K*X],[tau 1],'inputdelay',to); [y1,t] = step(h,tspan(2)); plot(t,y1,'r'); xlabel('Tiempo','FontSize',12); ylabel('Respuesta','FontSize',12); title('Respuesta Paso','Fontsize',14); legend('Sin Tiempo Muerto','Con Tiempo Muerto',4); end end % Selección del tipo de cambio rampa en la variable de entrada if (get(handles.radiobutton6,'Value') == 1) X = str2double(get(handles.edit5,'String')); if (get(handles.checkbox1,'Value') == 1)& (get(handles.checkbox2,'Value') == 0) cla; [t,y] = ode45(@rampa,tspan,Inicio); plot(t,X*t,'r',t,y/K,'k') xlabel('Tiempo','FontSize',12); ylabel('Respuesta','FontSize',12); title('Respuesta Rampa','Fontsize',14); legend('Entrada','Salida',1); elseif (get(handles.checkbox2,'Value') == 1) & (get(handles.checkbox1,'Value') == 0) cla; to = str2double(get(handles.edit7,'String'));

h = tf([X],[tau 1 0],'inputdelay',to); [y1,t] = step(h,tspan(2)); plot(t,X*t,'r',t,y1,'b'); xlabel('Tiempo','FontSize',12); ylabel('Respuesta','FontSize',12); title('Respuesta Rampa','Fontsize',14); legend('Entrada','Salida','Tiempo Muerto',1); elseif (get(handles.checkbox1,'Value') == 1) & (get(handles.checkbox2,'Value') == 1) cla; [t,y] = ode45(@rampa,tspan,Inicio); plot(t,X*t,'r',t,y/K,'k'); hold on to = str2double(get(handles.edit7,'String')); h = tf([X],[tau 1 0],'inputdelay',to); [y1,t] = step(h,tspan(2)); plot(t,y1,'b'); xlabel('Tiempo','FontSize',12); ylabel('Respuesta','FontSize',12); title('Respuesta Rampa','Fontsize',14); legend('Sin Tiempo Muerto','Con Tiempo Muerto',1); end end % Selección del tipo de cambio seno en la variable de entrada if (get(handles.radiobutton7,'Value') == 1) X = str2double(get(handles.edit5,'String')); w = str2double(get(handles.edit6,'String')); if (get(handles.checkbox1,'Value') == 1) & (get(handles.checkbox2,'Value') == 0) cla; [t,y] = ode45(@seno,tspan,Inicio); plot(t,X*sin(w*t),'r',t,y,'k') xlabel('Tiempo','FontSize',12); ylabel('Respuesta','FontSize',12); title('Respuesta Seno','Fontsize',14); legend('Entrada','Salida',1); elseif (get(handles.checkbox2,'Value') == 1) & (get(handles.checkbox1,'Value') == 0)

cla; to = str2double(get(handles.edit7,'String')); a = [1 0 w^2]; b = [tau 1]; den = conv(a,b); h = tf([K*X*w],den,'inputdelay',to); [y1,t] = impulse(h,tspan(2)); plot(t,X*sin(w*t),'r',t,y1,'b') xlabel('Tiempo','FontSize',12); ylabel('Respuesta','FontSize',12); title('Respuesta Seno','Fontsize',14); legend('Entrada','Salida',1); elseif (get(handles.checkbox2,'Value') == 1) & (get(handles.checkbox1,'Value') == 1) cla; [t,y] = ode45(@seno,tspan,Inicio); plot(t,X*sin(w*t),'r',t,y,'k'); hold on to = str2double(get(handles.edit7,'String')); a = [1 0 w^2]; b = [tau 1]; den = conv(a,b); h1 = tf([K*X*w],den,'inputdelay',to); [y,t] = impulse(h1,tspan(2)); plot(t,y,'b'); xlabel('Tiempo','FontSize',12); ylabel('Respuesta','FontSize',12); title('Respuesta Seno','Fontsize',14); legend('Entrada','Salida','Tiempo Muerto',1); end end Botón Push Button “Reinicio” El siguiente código es el procedimiento que se desarrolla cuando se presiona el botón denominado “Reinicio”. Todos los controles se especifican de acuerdo a las propiedades introducidas inicialmente function pushbutton2_Callback(hObject, eventdata, handles)

cla reset; axes(handles.axes3); im = imread('ecuacion.jpg'); axis off; imshow(im); set(handles.radiobutton5,'Value',1); set(handles.radiobutton6,'Value',0); set(handles.radiobutton7,'Value',0); set(handles.edit1,'String',0); set(handles.edit2,'String',0); set(handles.edit4,'String',0); set(handles.edit8,'String',0); set(handles.edit9,'String',0); set(handles.edit5,'String',0); set(handles.edit6,'String',0); set(handles.edit7,'String',0); set(handles.checkbox1,'Value',0); set(handles.checkbox2,'Value',0); set(handles.text5,'String','Cambio Paso'); set(handles.text7,'Visible','off'); set(handles.edit7,'Visible','off'); set(handles.text6,'Visible','off'); set(handles.edit6,'Visible','off'); Botón Push Button “Cancelar” El siguiente código es el procedimiento que se desarrolla cuando se presiona el botón denominado “Cancelar”. Se borra toda la memoria y se cierran todas las figuras previo despliegue de un cuadro de diálogo modal para confirmar el deseo de cerrar la figura function pushbutton3_Callback(hObject, eventdata, handles) selection = questdlg(['¿Desea cerrar ' get(handles.figure1,'Name') '?'],... ['Cerrar ' get(handles.figure1,'Name') '...'],... 'Yes','No','No'); if strcmp(selection,'No') return; end clear, close all;

Ejecución del Programa Al ejecutar el programa se despliega la interfaz elaborada. La Figura 6 muestra la respuesta seno para los parámetros y especificaciones observadas (Constante de tiempo = 2, Ganancia Estacionaria = 3, Condición Inicial = 0, Tiempo Inicial = 0, Tiempo Final = 50, Amplitud = 2, Frecuencia = 0.5, Tiempo Muerto = 3). El código muestra la función seno de entrada y las respuestas sin y con tiempo muerto

Figura 6. Interfaz Respuesta Seno Sistema de Primer Orden Lineal