convert a level 1 M file s-function to a level 2 M file st-function
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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 commentaires
Réponses (0)
Voir également
Catégories
En savoir plus sur Simulink Coder dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!