Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Scilab "Warning adding a matrix with the empty matrix will give an empty matrix result."

Tags:

scilab

  • I am a new user of Scilab (see also here).
  • I define a simple piece-wise function and get a confusing warning when I use the function ("Warning adding a matrix with the empty matrix will give an empty matrix result.").
  • Do you see where my mistake is?

function  y = myTest(t) 

// First Part
y(find(t < 0)) = 0; 

// Middle Part
y(find(0 <= t & t <= 1)) = 1; 

// Middle Part
ti3 = find(1 < t & t <= 3);
y(ti3) = -1*t(ti3) + 2; 

// Middle Part
y(find(3 < t & t <= 4)) = -1; 

// Middle Part
ti5 = find(4 < t & t <= 6);
y(ti5) = +1*t(ti5) -5;

// Middle Part
y(find(6 < t & t <= 8)) = 1; 

// Last Part
y(find(8 < t)) = 0; 

endfunction

myTest(1)

t = 0:0.1:10;

plot(t',myTest(t))

enter image description here

(Plot for myTest(t) using t = 0:0.1:10.)

enter image description here

(Confusing warning.)

like image 722
Dr. Manuel Kuehner Avatar asked Sep 07 '25 05:09

Dr. Manuel Kuehner


1 Answers

You have to remove the find() call and use logical indexing (the logical expressions yield boolean vectors with the same size as t and can be used as indexes) :

function  y = myTest(t) 

// First Part
y(t < 0) = 0; 

// Middle Part
y(0 <= t & t <= 1) = 1; 

// Middle Part
ti3 = 1 < t & t <= 3;
y(ti3) = -1*t(ti3) + 2; 

// Middle Part
y(3 < t & t <= 4) = -1; 

// Middle Part
ti5 = 4 < t & t <= 6;
y(ti5) = +1*t(ti5) -5;

// Middle Part
y(6 < t & t <= 8) = 1; 

// Last Part
y(8 < t) = 0; 

endfunction

myTest(1)

t = 0:0.1:10;

plot(t',myTest(t))

However, after reading your post on StackExchange, if your velocity is always piecewise affine, then you could use interpln, which can be further derivated (see SO other post) or integrated with ode:

function out=rhs(t,y)
  out = interpln(ty,t);
end

ty=[0 1  3 4 6 8
    1 1 -1 1 1 0]
t=linspace(0,8,1000);
h=sqrt(%eps);
d=(interpln(ty,t+h)-interpln(ty,t))/h;
p=ode(0,0,t,rhs)
plot(x,interpln(xy,x),x,d,x,p)

See ode and interpln scilab help pages for the meaning of their arguments (if not explicit enough above). enter image description here

like image 196
Stéphane Mottelet Avatar answered Sep 11 '25 01:09

Stéphane Mottelet