convert a level 1 M file s-function to a level 2 M file st-function
3 views (last 30 days)
Show older comments
how can I convert a level 1 M file s-function given below into a level 2 M file st-function?
function [sys,x0,str,ts] = potential_field(t,x,u,flag)
switch flag,
case 0,
[sys,x0,str,ts]=mdlInitializeSizes;
case 1,
sys=mdlDerivatives(t,x,u);
case 3,
sys=mdlOutputs(t,x,u);
case { 2, 4, 9 },
sys = [];
otherwise
DAStudio.error('Simulink:blocks:unhandledFlag', num2str(flag));
end
function [sys,x0,str,ts]=mdlInitializeSizes(~,~,~,~)
sizes = simsizes;
sizes.NumContStates = 0;
sizes.NumDiscStates = 0;
sizes.NumOutputs = 5;
sizes.NumInputs = 6;
sizes.DirFeedthrough = 0;
sizes.NumSampleTimes = 1;
sys = simsizes(sizes);
x0 = [];
str = [];
ts = [0 0];
function sys=mdlOutputs(~,~,u,~,~,~,~)
%%% Paramètres de contrôle :
a0=0;
av=100;
c=0;
b1=0;
b2=0;
yub=u(4).*sin(u(4))+10; %upper boundary
ylb=u(4).*sin(u(4))-10; %lower boundary
y=.5*(yub+ylb); %center line
Urep_1=zeros(1,1);Urep_2=zeros(1,1);
if (ylb<=u(5))&&(yub>=u(5))
Urep_1=b1/(u(5)-yub)^2;
Urep_2=b2/(u(5)-ylb)^2;
end
J=@(X)(a0*(X(1)-u(1))^2 + av*(u(1)*tan(X(2))-u(6))^2 + Urep_1 + Urep_2 + c*(X(2)-u(3))^2);
X0=[1,15]; %Initial point for X
A = [];
b = [];
Aeq=[]; %Matrix for linear equality constraints
beq=[]; %Vector for linear equality constraints
lb=[0,-pi/2]; %Vector of lower bounds
ub=[90,pi/2]; %Vector of upper bounds
Q=fmincon(J,X0,A,b,Aeq,beq,lb,ub); %% les valeurs réelles retournées sont la vitesse désirée et l'angle de lacet désiré
sys(1)= Q(1);
sys(2)= Q(2);
sys(3)= yub;
sys(4)= ylb;
sys(5)= y;
0 Comments
Answers (0)
See Also
Categories
Find more on Simulink Coder in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!