[Scilab-users] Code optimization by avoiding Xcos recompilation and others

AnaCastro ana.diazcastro at alum.uca.es
Sat May 1 11:43:54 CEST 2021


Hi everyone! I'm an aerospace engineering student and my professors and I are
working on a project to addapt a subject's assignments to Scilab, so that
students have easier access to the software. Now we are trying to reproduce
the actuation of an aircraft depending on some variables. This is my first
time using this software so there are many things I ignore.

And here is the question: How could I optimize this code? Currently it's way
too slow and we need to make it a bit faster. I tried using
/scicos_simulate()/ and saving the Xcos compilation information to a
/list()/ called /Info /in order to avoid recompiling the diagram every time
- since the code calls the Xcos diagram nine times and that takes a while -
but I don't know if there is a better way or even if it worked properly.

Also the values for /u_ini, w_ini/ and /pospalanca /change depending on the
compilation. Is there a way to make this part run faster?

Any help is greatly appreciated!

Here's the code:

// Scilab code
loadXcosLibs(); loadScicos();
importXcosDiagram("Trabajo.zcos");

controltotal = 0;
preci = 1 ;

while controltotal == 0

controlV = 0;

V1 = 1 ;
V = V1 ;
u_ini = V*cos(alfa);
w_ini = V*sin(alfa);
Context.Tf=0.1;
Info = scicos_simulate(scs_m, list(), Context, 'nw'); 
Fuerzas=FuerzasStruct.values;
Fz1 = Fuerzas(3);

V2 = 340 ;
V = V2 ;
u_ini = V*cos(alfa);
w_ini = V*sin(alfa);
Context.Tf=0.1;
scicos_simulate(scs_m, Info, Context, 'nw'); 
Fuerzas=FuerzasStruct.values;
Fz2 = Fuerzas(3);

while controlV == 0
  peso1 = 1-abs(Fz1)/abs(Fz2-Fz1);
  peso2 = 1-abs(Fz2)/abs(Fz2-Fz1);
  V_med = sqrt(V1*V1*peso1 + V2*V2*peso2) ;
  V = V_med;
  u_ini = V*cos(alfa);
  w_ini = V*sin(alfa);
  Context.Tf=0.1;
  scicos_simulate(scs_m, Info, Context, 'nw');  
  Fuerzas=FuerzasStruct.values;
  Fz_med = Fuerzas(3);

  if abs(Fz_med) < preci
    controlV = 1;
  elseif Fz_med*Fz1<0
    V2 = V_med;
    Fz2 = Fz_med;
  elseif Fz_med*Fz2<0
    V1 = V_med;
    Fz1 = Fz_med;
  end
end
V = V_med ;

controlpospalanca=0;

pospalanca1 = 0 ;
pospalanca = pospalanca1 ;
Context.Tf=0.1;
scicos_simulate(scs_m, Info, Context, 'nw'); 
Fuerzas=FuerzasStruct.values;
Fx1 = Fuerzas(1);

pospalanca2 = 1 ;
pospalanca = pospalanca2 ;
Context.Tf=0.1;
scicos_simulate(scs_m, Info, Context, 'nw'); 
Fuerzas=FuerzasStruct.values;
Fx2 = Fuerzas(1);

while controlpospalanca == 0
  peso1 = 1-abs(Fx1)/abs(Fx2-Fx1);
  peso2 = 1-abs(Fx2)/abs(Fx2-Fx1);
  pospalanca_med = (pospalanca1*peso1 + pospalanca2*peso2) ;
  pospalanca = pospalanca_med;
  Context.Tf=0.1;
  scicos_simulate(scs_m, Info, Context, 'nw'); 
  Fuerzas=FuerzasStruct.values;
  Fx_med = Fuerzas(1);

  if abs(Fx_med) < preci
    controlpospalanca = 1;
  elseif Fx_med*Fx1<0
    pospalanca2 = pospalanca_med;
    Fx2 = Fx_med;
  elseif Fx_med*Fx2<0
    pospalanca1 = pospalanca_med;
    Fx1 = Fx_med;
  end
end
pospalanca = pospalanca_med ;

controldelta=0;

delta1 = -30*%pi/180 ;
delta = delta1 ;
Context.Tf=0.1;
scicos_simulate(scs_m, Info, Context, 'nw');  
Fuerzas=FuerzasStruct.values;
My1 = Fuerzas(2);

delta2 =  30*%pi/180 ;
delta = delta2 ;
Context.Tf=0.1;
scicos_simulate(scs_m, Info, Context, 'nw'); 
Fuerzas=FuerzasStruct.values;
My2 = Fuerzas(2);

while controldelta == 0
  peso1 = 1-abs(My1)/abs(My2-My1);
  peso2 = 1-abs(My2)/abs(My2-My1);
  delta_med = (delta1*peso1 + delta2*peso2) ;
  delta = delta_med;
  Context.Tf=0.1;
  scicos_simulate(scs_m, Info, Context, 'nw');    
  Fuerzas=FuerzasStruct.values;
  My_med = Fuerzas(2);

  if abs(My_med) < preci
    controldelta = 1;
  elseif(My_med*My1<0)
    delta2 = delta_med;
    My2 = My_med;
  elseif(My_med*My2<0)
    delta1 = delta_med;
    My1 = My_med;
  end
end
delta = delta_med ;

Fuerzas=FuerzasStruct.values;

if (abs(Fuerzas(1)) < preci) & (abs(Fuerzas(2)) < preci) & (abs(Fuerzas(3))
< preci)
  controltotal = 1;
end
end // while controltotal

V
pospalanca
delta
deltagrados = delta*180/%pi


Thank you all so much for your help and time!



--
Sent from: http://mailinglists.scilab.org/Scilab-users-Mailing-Lists-Archives-f2602246.html



More information about the users mailing list