convert a level 1 M file s-function to a level 2 M file st-function

3 visualizzazioni (ultimi 30 giorni)
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;

Risposte (0)

Categorie

Scopri di più su Simulink Coder in Help Center e File Exchange

Prodotti


Release

R2018b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by