How can constraint varaibles in my fcn simulink block?
조회 수: 1 (최근 30일)
이전 댓글 표시
This is my block:
This is the function inside it:
function xdot = fcn(x,u)
delta=1;
x1=x(1);
x2=x(2);
xdot1=x1*x2-delta*x1;
xdot2=-x1*x2-x2+u;
xdot=[xdot1;xdot2];
end
The value is dimensionless and normalized the maximum value could be 1 for both variables. But when I control it the second variable goes to the moon and it does not have physical sense.
I try to use saturation but I am not proud of the result. Could you advise some strategy to put some constrain in my fcn block?
댓글 수: 0
채택된 답변
Sam Chak
2023년 10월 5일
The analysis shows that the constraint on control action is unnecessary. In Case 1, the control-free system () has two equilibrium points, with the stable one at the origin and the unstable one at . If the initial conditions are carefully selected such that and , then the trajectories are guaranteed to converge to the origin.
However, it is always desirable to find an easily implementable control action, denoted as u, such that the nonlinear system will converge to the equilibrium point from any possible starting non-equilibrium point. Since the control action is not provided, three types of control actions, , , and , in Case 2, are proposed, and the equilibrium at the origin is globally stable.
%% Finding equilibrium point
fun = @f; % function (refer to Nonlinear System)
x0 = [-2, 2]; % initial guess
z = fsolve(fun, x0)
[x1, x2] = meshgrid(-2:2);
delta = 1;
%% Case 1: Stream Plot of Control-free system
u = 0;
U = x1.*x2 - delta*x1;
V = - x1.*x2 - x2 + u;
figure(1)
l = streamslice(x1, x2, U, V); set(l, 'Color', '#c3829e');
xlabel({'$x_{1}$'}, 'interpreter', 'latex', 'fontsize', 12)
ylabel({'$x_{2}$'}, 'interpreter', 'latex', 'fontsize', 12)
title('Stream Plot of Control-free System')
axis tight
%% Case 2: Stream Plot of Control system
u1 = x1; % type-1 control action
u2 = x1 - x2; % type-2 control action
u3 = - (x1.^2 - x1.*x2); % type-3 control action
U = x1.*x2 - delta*x1;
V = - x1.*x2 - x2 + u3;
figure(2)
l = streamslice(x1, x2, U, V);
xlabel({'$x_{1}$'}, 'interpreter', 'latex', 'fontsize', 12)
ylabel({'$x_{2}$'}, 'interpreter', 'latex', 'fontsize', 12)
title('Stream Plot of Control System')
axis tight
%% Testing the system using Type-3 control action
tspan = [0 10];
x0 = [-2 2]; % divergent in the control-free system
[t, x] = ode45(@odefcn, tspan, x0);
figure(3)
plot(t, x, 'linewidth', 1.5), grid on
xlabel({'$t$'}, 'interpreter', 'latex', 'fontsize', 12)
ylabel({'$\mathbf{x}(t)$'}, 'interpreter', 'latex', 'fontsize', 12)
legend({'$x_{1}(t)$', '$x_{2}(t)$'}, 'interpreter', 'latex', 'fontsize', 14)
title({'Time responses under $u = - x_{1}^{2} + x_{1} x_{2}$'}, 'interpreter', 'latex', 'fontsize', 16)
%% Nonlinear System (for finding the equilibrium)
function y = f(x)
y = zeros(2, 1);
delta = 1;
y(1) = x(1)*x(2) - delta*x(1);
y(2) = - x(1)*x(2) - x(2);
end
%% Nonlinear ODEs
function dxdt = odefcn(t, x)
dxdt = zeros(2, 1);
delta = 1;
u = - (x(1)^2 - x(1)*x(2)); % Type-3
dxdt(1) = x(1)*x(2) - delta*x(1);
dxdt(2) = - x(1)*x(2) - x(2) + u;
end
댓글 수: 0
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Applications에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!