Ejercicios de espacio de estado

Siguiendo los lineamientos planteados en la guía de usuario del toolbox gsua-csb

Preparación del modelo en simulink

clear;clc
model='Pendulo';% nombre del modelo
ParIn={'g','l','m','f','x10','x20'}; %nombres de los parámetros (tal y como aparecen en la máscara del sistema)
Ranges=[9.5 10.5; 2 4; 3 7; 0 1; -1 1;-1 1]; % Rangos para los parámetros
out_names={'theta','dtheta'};%nombres de las salidas del modelo
[T,time] = gsua_dataprep(model,Ranges,ParIn,'out_names',out_names)%Creación de la tabla que controla el sistema

Preparación del modelo en matemática simbólica

Ahora crearemos el mismo modelo del péndulo pero en matemática simbólica
clear;clc
syms x_1(t) x_2(t) m f g l u(t) %symbolic state variables and parameters
u(t)=1;
%Defining the system of differential equations
ode1 = diff(x_1) == x_2;
ode2 = diff(x_2) == -f*x_2/m - g*sin(x_1)/l + u(t)/(m*l);
%Array with the system
odes=[ode1; ode2]
odes(t) = 
%choose an order for state variables
vars = [x_1 x_2];
domain=[0 100];%rango numérico en el que se solucionará el sistema
modelName='pend';%nombre para el archivo de modelo
gsua_dataprep(odes,vars,domain,modelName);%consultamos el orden para introducir los parámetros
Setting environment to work with symbolic Matlab Introduce ranges in the following order:
ans(t) = 
Ranges=[-1 1;-1 1;0 1; 9.5 10.5; 2 4; 3 7];%generamos rangos para dicho orden
[T,solver] = gsua_dataprep(odes,vars,domain,modelName,'range',Ranges)%generamos la tabla del sistema
Setting environment to work with symbolic Matlab Introduce ranges in the following order:
ans(t) = 
T = 6×2 table
 RangeNominal
1 x_10-110
2 x_20-110
3 f010.5000
4 g9.500010.500010
5 l243
6 m375
solver = function_handle with value:
@(init,pars)ode45(@(t,Y)odefun(t,Y,pars),domain,[Table.Range(fixvars,1)',init],opt)

Análisis de incertidumbre

M=gsua_dmatrix(T,10000);
Y=gsua_ua(M,T);
Progress: 100% Estimated processing time (h:m:s): 0:0:5 Remaining time (h:m:s): 0:0:0 Elapsed time (h:m:s): 0:0:5 Estimated stop time (h:m:s): 14:46:2 Number of simulations: 1000

Manipulación de propiedades del modelo

T.Properties.CustomProperties.output=1:2;%cambiar las salidas del sistema
%cambiar valores de la tabla
T{'x_10','Nominal'}=-3.8;
T{'x_20','Nominal'}=3;
T{'f','Nominal'}=2;
T
T = 6×2 table
 RangeNominal
1 x_10-11-3.8000
2 x_20-113
3 f012
4 g9.500010.500010
5 l243
6 m375
ymodel=gsua_eval(T.Nominal,T,0:0.01:100);%obtener los resultados al simular el modelo
%EJEMPLO DE CAMPOS DIRECCIONALES
[x,y]=meshgrid(-5:.4:5,-10:.4:10);
m=2.5; f=2; g=10; l=2.5; u=1;
dy = -f/m - g*sin(x)./(y*l) + u./(m*l*y);
dx = y.*sign(x).^2;
dxu=dx./(dx.^2+dy.^2).^(1/2);
dyu=dy./(dx.^2+dy.^2).^(1/2);
figure(2)
clf
quiver(x,y,dxu,dyu)
xlabel('x_1')
ylabel('x_2')
hold on
plot(ymodel(1,:),ymodel(2,:))