Presentation is loading. Please wait.

Presentation is loading. Please wait.

SCILAB and SCICOS- Emerging Open Source Alternative to MATLAB

Similar presentations


Presentation on theme: "SCILAB and SCICOS- Emerging Open Source Alternative to MATLAB"— Presentation transcript:

1 SCILAB and SCICOS- Emerging Open Source Alternative to MATLAB
Compiled by Dr. PISUPATI SADASIVA SUBRAMANYAM SENIOR MEMBER,I.E.E.E. VIGNANA BHARATHI INSTITUE OF TECHNOLOGY, HYDERABAD

2 What is Scilab? Scilab is a mathematical software
Similar software: Matlab, Mathematica, Octave, Euler Math Toolbox, Maxima, … What is special about Scilab: free, highly supported, powerful, many users, … Home page of Scilab: A short introduction of Scilab:

3 What is Scilab? (Contd.) Scilab is matrix-oriented, just like Matlab
It allows matrix manipulations, 2D/3D plotting, animation, etc. It is an open programming environment that allows users to create their own functions and libraries Its editor has a built-in, though elementary, debugger

4 What is Scilab ? (Contd.) Main components of Scilab are:
An interpreter Libraries of functions (procedures, macros) Interfaces for Fortran, Tcl/Tk, C, C++, Java, Modelica, and LabVIEW—but not for Python and/or Ruby Which is “better,” Matlab or Scilab? Matlab outperforms Scilab in many respects, but Scilab is catching up. The use of Matlab is motivated only in special circumstances due to its high cost

5 2. Installing and Running Scilab
First, you must have the software. Go to the download section in the Scilab homepage, find a right version for your operating system (platform), and then click to download. For easy installation, it is advisable to download the installer (for binary version). Then double click the downloaded file and follow the instructions to complete the installation. To run Scilab, type scilex in the command prompt in the folder bin under the installation directory, or click the shortcut in the start menu if you use Windows. To exit the program, type exit or close the window of the main program.

6 3. Documentation and Help
To find the usage of any function, type help function_name For example: help sum If you want to find functions that you do not know, you may just type help and search for the keywords of the functions. Finally, if you want more information, you may visit the Scilab homepage. There is a section called documentation. It is very resourceful

7 4. Scilab Basics Common Operators + addition - subtraction
* multiplication / division ^ power ' conjugate transpose Here is a list of common operators in Scilab:

8 FUNCTIONS IN SCILAB The term “function” in Scilab to (at least):
Mathematical functions in general Scilab’s built-in functions User defined functions (UDF)

9 Common Functions: Some common functions in Scilab are:
sin, cos, tan, asin, acos, atan, abs, min, max, sqrt, sum Eg., when we enter: sin(0.5) then it displays: ans = Another example: max(2, 3, abs(-5), sin(1)) 5

10 SCILAB-ADVANTAGES Numeric computing is better suited for complex tasks than symbolic computing Not all mathematical problems have closed form solutions, numeric computing will therefore always be needed Scilab is similar to Matlab and keeps developing even closer. It is quite easy to step from one to the other Scilab requires less disk space than Matlab and GNU Octave It includes a Matlab-to-Scilab translator (.m files to .sci files) Data plotting is said to be simpler than with GNU Octave (but the trend is toward more complex handle structures) The Xcos toolbox installs automatically with Scilab, be it, that Xcos is not compatible with Simulink Scilab installs without immediate problems on Windows computers Scilab is free—if your wasted time and frustrations are worth nothing. The fight for a limited number of expensive licenses (Matlab, Mathematica, etc.) is not an issue in professional life

11 Special Constants We may wish to enter some special constants like, i (sqrt(-1)) and e. It is done by entering %pi %i %e respectively. There are also constants %t %f which are Boolean constants representing true and false, respectively. Boolean variables would be introduced later.

12 The Command Line Multiple commands, separated by commas, can be put on the same command line: A = [1 2 3], s = tan(%pi/4) + %e A = s = Entering a semi-colon at the end of a command line suppresses showing the result (the answer of the expression): A = [1 2 3]; s = tan(%pi/4) + %e;

13 Here the vector [1 2 3] is stored in the variable A, and the expression tan(%pi/4) + %e is evaluated and stored in s, but the results are not shown on the screen. A long command instruction can be broken with line-wraps by using the ellipsis (...) at the end of each line to indicate that the command actually continues on the next line: s = 1 -1/2 + 1/3 -1/4 + 1/5 - 1/6 + 1/7 ... - 1/8 + 1/9 - 1/10 + 1/11 - 1/12; Anything that is typed after a pair of slashes // will be ignored, and hence can serve as comments or code annotations: %e^(%pi * %i) + 1 // should equal 0, as in the Euler's identity ans = 1.225D-16i Using the up and down arrow in the command line can recall previous commands

14 Data Structures Scilab supports many data structures. Examples are: (real or complex) matrix, polynomial, Boolean, string, function, list, tlist, sparse, library. Please read the Scilab documentation for details. To query for the type of an object, type: typeof(object)

15 Strings To enter a string, enclose it with either single or double quotations. For example: 'This is a string' or "this is also a string" To concatenate strings, use the operator + : "Welcome " + "to " + "Scilab!" ans = Welcome to Scilab! There are some basic string handling functions such as strindex strsplit strsubst part Please refer to Scilab's documentation for details

16 Saving and Loading Variables
To save and to load variables, we use the save and load functions: save('file_name', var1, var2, ...); load('file_name', 'var1', 'var2', ...); where file_name is the name of the file to be saved or loaded, and var1, var2, ..., are variable names. Notice that the variable name has to match when it is to be saved. Here are some illustrations

17 a = 3; b = %f; s = 'scilab'; save('save.dat', a, b, s); clear a; // delete the variable a clear b; clear s; load('save.dat', 'a', 'b', 's'); // load all the saved variables load('save.dat','b'); // It loads only variable b, but not // variable a in the name of b

18 load('save.dat','b'); // It loads only variable b, but not // variable a in the name of b load('save.dat','d'); // It will not show any error messages. // Variable d is undefined, not empty. listvarinfile('save.dat'); // list variables in a file saved by // the function save

19 Name Type Size Bytes a constant by b boolean by s string by

20 5. Dealing with Matrices Entering Matrices
There are many ways to enter a matrix. Here is the simplest method: Separate each element in a row by a blank space or a comma, Separate each row of elements with a semi- colon, and Put the whole list of elements in a pair of square brackets. For example, to enter a 3 x 3 magic square and assign to the variable M :

21 M = [8 1 6; 3 5 7; 4 9 2] M =

22 Calculating Sums For a magic square, we may wish to check for its column sums and row sums and the sum of diagonals. This is done by entering: sum(M,'c') // column sums ans = 15. sum(M,'r') // row sums The sum of the main diagonal is easily done with the help of the function diag. diag(M) 8. 5. 2.

23 Subscripts It is a bit more difficult to find the sum of the other diagonal. We will show two ways to accomplish it. One method is to find the sum manually, i.e., to read the specified elements and then to sum them up. M(1,3) + M(2,2) + M(3,1) ans = 15. It is possible to access elements in a matrix using a single index. This by treating a matrix as a long vector formed by stacking up the columns of the matrix. E.g., the values of M(1), M(2), M(3), M(4), M(5) are 8, 3, 4, 1, 5, respectively.

24 Accessing out-of-bound elements will result in an error, like entering:
invalid index A smarter way to get the sum of the other diagonal is to use the function mtlb_fliplr, where mtlb stands for Matlab. This is to flip a matrix left-to-right (lr): mtlb_fliplr(M) ans = The desired result would then be obtained by typing sum(diag(mtlb_fliplr(M))).

25 The Colon Operator The colon operator is one of the most important operators in Scilab. The expression 1:10 results in a row matrix with elements 1, 2, ..., 10, i.e.: 1:10 ans = To have non-unit spacing we specify the increment: 10 : -2 : 2 Notice that expressions like 10:-2:1, 10:-2:0.3 would produce the same result while 11:-2:2 would not. Subscript expressions involving colons refer to parts of a matrix. M(i:j, k) shows the i- th row to j-th row of column k. Similarly, M(3,2:3) 9. 2.

26 Some more examples: M(3,[3,2]) ans = M([2,1], 3:-1:1) The operator $, which gives the largest value of an index, is handy for getting the last entry of a vector or a matrix. For example, to access all elements except the last of the last column, we type: M(1:$-1, $)

27 We sometimes want a whole row or a column
We sometimes want a whole row or a column. For example, to obtain all the elements of the second row of M, enter: M(2,:) ans = Now we have a new way to perform operations like mtlb_fliplr(M). It is done by entering M(:, $:-1:1). However the function mtlb_fliplr(M) would obtain result faster (in computation time) than using the subscript expression.

28 Simple Matrix Generation
Some basic matrices can be generated with a single command: zeros all zeros ones all ones eye Identity matrix (having 1 in the main diagonal and 0 elsewhere) rand random elements (follows either normal or uniform distribution)

29 Some illustrations: zeros(2,3) ans = 8 * ones(2,2) eye(2,3) rand(1,3,'uniform') // same as rand(1,3)

30 Concatenation Concatenation is the process of joining smaller size matrices to form bigger ones. This is done by putting matrices as elements in the bigger matrix: a = [1 2 3]; b = [4 5 6]; c = [7 8 9]; d = [a b c] d = e = [a; b; c] e =

31 Concatenation must be row/column consistent:
x = [1 2]; y = [1 2 3]; z = [x; y] !-error 6 inconsistent row/column dimensions We can also concatenate block matrices, e.g.: [eye(2,2) 5*ones(2,3); zeros(1,3) rand(1,2)] ans =

32 Remember that it is an error to access out-of-bound element of a matrix. However, it is okay to assign values to out-of-bound elements. The result is a larger size matrix with all unspecified entries 0: M = matrix(1:6, 2, 3); M(3,1) = 10 M = It is remarked that this method is slow. If the size of the matrix is known beforehand, we should use pre-allocation: M = zeros(3,3); // pre-allocation M([1 2], :) = matrix(1:6, 2, 3); M(3,1) = 10;

33 Deleting Rows and Columns
A pair of square brackets with nothing in between represents the empty matrix. This can be used to delete rows or columns of a matrix. To delete the 1st and the 3rd rows of a 4x4 identity matrix, we type: A = eye(4,4); A([1 3],:) = [] A = If we delete a single element from a matrix, it results in an error, e.g.:

34 A(1,2) = [] !-error 15 submatrix incorrectly defined If we delete elements using single index expression, the result would be a column vector: B=[1 2 3; 4 5 6]; B(1:2:5)=[] B = 4. 5. 6.

35 Matrix Inverse and Solving Linear Systems
The command inv(M) gives the inverse of the matrix M. If the matrix is badly scaled or nearly singular, a warning message will be displayed: inv([1 2; ]) warning matrix is close to singular or badly scaled. rcond = D-09 ans = Solving a system of linear equations Ax = b, i.e., to find x that satisfies the equation, when A is a square, invertible matrix and b is a vector, is done in Scilab by entering A\b :

36 A = rand(3,3), b = rand(3,1) A = b = x = A \ b x = Another method is to type inv(A) * b. Although it gives the same result, it is slower than A\b because the first method mainly uses Gaussian Elimination which saves some computation effort. Please read the Scilab help file for more details about the slash operator when A is non-square. A / b solves for x in the equation xb = A.

37 Entry-wise operations, Matrix Size
To add 4 to each entry of a matrix M, using M + 4 * ones(M) is correct but troublesome. Indeed this can be done easily by M + 4. Subtraction of a scalar from a matrix entry-wise is done similarly. Multiplying 2 to the second column and 3 to the third column of M can be achieved by using the entry-wise multiplication operator .* : M .* [1:3; 1:3] Entry-wise arithmetic operations for arrays are:

38 addition subtraction .* multiplication .^ power ./ right division .\ left division Thus, instead of typing s = 1 -1/2 + 1/3 -1/4 + 1/5 - 1/6 + 1/7 ... - 1/8 + 1/9 - 1/10 + 1/11 - 1/12; one may simply type s = sum((1:2:12) .\ 1) - sum((2:2:12) .\ 1) or

39 s = sum(1 ./ (1:2:12)) - sum(1 ./ (2:2:12))
Note that 1./1:2:12 is interpreted as (1./1):2:12. Similarly, 1:2:12.\1 is interpreted as 1:2:(12.)\1. To enter the matrix M = [ ; ], one may use: M = zeros(2,5); M(:) = 1:10; Yet an almost effortless method is to use the function matrix, which reshapes a matrix to a desired size: M = matrix(1:10,5,2)' How to enter N = [1 2; 3 4; 5 6; 7 8; 9 10] easily? Hint: think of some simple operations on a matrix.

40 A handy function in Scilab called size returns the dimensions of the matrix in query:
size(M) ans = while size(M,1) returns 2 (number of rows) and size(M,2) returns 5 (number of columns).

41 6. The Programming Environment
Creating Functions Scilab has an open programming environment that enables users to build their own functions and libraries. It is done by using the built-in editor SciPad. To call the editor, type scipad() or editor(), or click Editor at the menu bar. The file extensions used by scilab are .sce and .sci. To save a file, click for the menu File and choose Save. To load a file, choose Load under the same menu. To execute a file, type

42 exec('function_file_name');
in the command line, or click for load into Scilab under the menu Execute. To begin writing a function, type: function [out1, out2, ...] = name(in1, in2, ...) where function is a keyword that indicates the start of a function, out1, out2 and in1, in2, ..., are variables that are outputs and inputs, respectively, of the function; the variables can be Boolean, numbers, matrices, etc., and name is the name of the function. Then we can enter the body of the function. At the end, type: endfunction

43 to indicate the end of the function.
Comment lines begin with two slashes //. A sample function is given as below: function [d] = distance(x, y) // this function computes the distance // between the origin and the point (x, y) d = sqrt(x^2 + y^2); endfunction A Scilab function can call upon itself recursively. Here is an example. Unlike Matlab, Scilab allows multiple function declaration (with different function names) within a single file. Also Scilab allows overloading (it is not recommended for beginners). Please refer to the chapter overloading in its help file for details.

44 Flow Control A table of logical expressions is given below: == equal
~= not equal >= greater than or equal to <= less than or equal to > greater than < less than ~ not If a logical expression is true, it returns a Boolean variable T (true), otherwise F (false).

45 The if statement It has the basic structure: if condition body end The body will be executed only when the condition statement is true. Nested if statements have the structure: if condition_1 body_1 elseif condition_2 body_2 elseif condition_3 body_3 elseif ... ...

46 As an example, we make use of the fact that a Scilab function can call upon itself recursively to write a function which gives the n-th Fibonacci number in the sequence 0, 1, 1, 2, 3, 5, 8, 13, ... : function [K] = fibonacci(n) //function [K] = fibonacci(n) //Gives the n-th term of the Fibonacci sequence 0,1,1,2,3,5,8,13,... if n==1 K = 0; elseif n==2 K = 1; elseif n>2 & int(n)==n // check if n is an integer greater than 2 K = fibonacci(n-1) + fibonacci(n-2); else disp('error! -- input is not a positive integer'); end endfunction Note that this is not an efficient way to find the n-th Fibonacci number when n is large

47 The for loop It has the basic structure: for variable = initial_value : step : final_value body end The loop will be executed a fixed number of times specified by the number of elements in the array variable. A slightly modified version is: str = 'abcdr'; s = ''; // an empty string for i = [ ] s = s + part(str, i); disp(s); s = abracadabra

48 The while loop It has the basic structure: while condition body end The loop will go on as long as the condition statement is true. Here we give an example of the Euclidean Algorithm.

49 function [n1] = hcf(n1, n2) // n1 and n2 are positive integers if n2 > n1 tem = n2; n2 = n1; n1 = tem; // to ensure n1>=n2 end r = pmodulo(n1, n2); // remainder when n2 divides n1 n1 = n2; n2 = r; while r ~= 0 r = pmodulo(n1, n2); endfunction

50 The break and continue commands
They are for ending a loop and to immediately start the next iteration, respectively. For example: // user has to input 10 numbers and for those which // are integers are summed up, the program are // prematurely once a negative number is entered. // It is not well written but just to illustrate the // use of the "break" and "continue" commands result = 0; for i = 1:10 tem = input('please input a number'); if tem < 0 break; end if tem ~= int(tem) //integral part continue; result = result + tem; disp(result);

51 Some Programming Tips The concept of Boolean vectors and matrices is important. The function find is useful too. It reports the indices of true Boolean vectors or matrices. For example: M = [-1 2; 4 9]; M > 0 ans = F T T T M(M > 0)' end

52 In contrast, find(M > 0) ans = M(find(M>0))' We remark that M(M>0) gives results quicker than M(find(M>0) because the find function is not necessary here. It is important to distinguish & and and, | and or. The first one of each pair is entry-wise operation and the other one reports truth value based on all entries of a Boolean matrix.

53 M = [0 -2; 1 0]; M==0 | M==1 ans = T F T T and(M >= 0) // true iff all entries are true F or(M == -2) // false iff all entries are false T

54 Debugging The most tedious work in programming is to debug. It can be done in two ways: either using Scilab's built-in debugger, or modifying the program so that it serves the same purpose as a debugger. The Scilab debugger is similar to those debuggers in other programming languages and is simple to use. We present the second method to offer programmers greater flexibilities when debugging. To insert breakpoints we use pause

55 To end pause we use abort To set the output of the function we may use return To display variables we use disp (variable) For details please read the Scilab documentation.

56 7. Plotting Graphs t = (0:1/100:2) * %pi; y = sin(t); plot(t,y);

57 2D Graphs The plot function has different forms, depending on the input arguments. If y is a vector, plot(y) produces a piecewise linear graph of the elements of y versus the index of the elements of y. When x and y are vectors of the same length, plot(x,y) produces a graph of y versus x. E.g., to plot the value of the sine function from zero to 2 pi:

58 3D Surfaces The command plot3d(x,y,z) plots 3D surfaces. Here x and y (x-axis and y-axis coordinates) are row vectors of sizes n1 and n2, and the coordinates must be monotone, and z is a matrix of size n1xn2 with z(i,j) being the value (height) of the surface at the point (x(i),y(j)).

59 8. Scilab versus Matlab This section is based on some user comments found in the internet, thus not necessarily all true. It is intended to give readers a general image about their differences besides those in syntax. Matlab has a thorough documentation; the one in Scilab is brief. Matlab has a lot of optimization on computation, thus it is faster than Scilab. Matlab has a very powerful simulation component called Simulink. Scilab has Scicos that serves the same purpose but it is weaker. Matlab has a much better integration with other programming languages and programs such as C, C++ and Excel. The graphics component of Scilab is weak (has fewer functions). Most importantly, Scilab is FREE. It certainly outweighs its deficiencies. It is remarked that Scilab is more than enough for casual and educational uses.

60 Vectors and matrices in Scilab (2)
> B = A ’ > A * y, x * B, A * B, B * A, (B*A)^2 Special matrices (and vectors): > ones(2,3), zeros(1,2), eye(3,3) > rand, rand(3,2) Empty vector or matrix: > a = [ ] Building matrix by blocks: > C = [A 2*A], x = [9 x 7], a = [a 1]

61 The colon “:” operator > 1:10, 1:100, xx = 1:100;
Using “;” to suppress answer output > sum(xx) > 1:2:10, –3:3:11, 4:–1:1, 2:1:0, > t = 0: 0.1: 2*%pi > y = sin(t) > plot(t,y), plot(t,sin(t),t,cos(t)) Task 1: plot the straight lines y = x +1 and y = exp(x) on the same graph, from x = – 2 to x = 2

62 Elements of vectors and matrices
Example > v = rand(4,1) > v(1), v(3), v([2 4]), v(4:-1:1), v($) “$” means the last entry > A = [ ; ] > A(2,3), A(1,:), A(:, 2), A(:, [4 2])

63 Programming in Scilab Click on menu bar to open Scipad; then write your scilab function file. Format of a function: function [out1, out2, ...] = name(in1, in2, ...) (body of function definition; may have many lines) endfunction One file may contain more than one function. To use the functions, you must load the function file by choosing File -> Execute the file from the menu.

64 Programming in Scilab (2)
A simple function to find the n-th term of the Fibonnaci sequence 0, 1, 1, 2, 3, 5, 8, 13, 21, … function k = fibo(n) if n == 1, k = 0; elseif n==2, k = 1; else k = fibo(n-1) + fibo(n-2); end endfunction Save the file as fibo.sci (or any other file name). Execute it from Scilab menu bar Try, say: > fibo(5), fibo(2), fibo(10), fibo(100)

65 Programming in Scilab (3)
An improved programme: function K = fibonacci(n) //function K = fibonacci(n) //Gives the n-th term of the Fibonacci sequence ,1,1,2,3,5,8,13,... if n==1, K = 0; elseif n==2, K = 1; elseif n>2 & int(n)==n // check if n is an integer greater than 2 K = fibonacci(n-1) + fibonacci(n-2); else disp('error! -- input is not a positive integer'); end endfunction

66 Programming in Scilab (4)
Programming Task (challenging!): write a programme to automate Task 5, which is to perform the following experiment m times. The experiment is to simulate tossing a coin n times and find the longest run (k) of consecutive H’s or T’s in the resulting sequence. For each time you do the experiment, you’ll get a number k. Therefore you should get m numbers k1, k2, …, km at the end. Inputs of the function are m, n; output is a vector k = [ k1 k2 … km].

67 electronics circuits with active components can be modeled and simulated using the Scicos internal Modelica support.

68 Electro/Hydraulic Components Palette

69 Go to Scicos Home page Modelica integration inside Scilab
Scicos includes a compiler for a subset of Modelica language. This subset covers most continous-time parts of the Modelica language and a minimum support for the discrete parts. Currently, this compiler does not cover index reduction and initial equations.

70

71 Scicos & RTA Lab Demo RTAI-Lab is a palette of blocks and programs that allow you to design models that can be compiled for the RTAI real-time patch to the Linux operating system.  A Linux kernel that is patched with RTAI (Real-Time Application Interface) can run hard real- time programs. Hard-real time is essential to control systems where timing precision must be guaranteed with high accuracy (e.g. instruments, robots, etc.).  RTAI-Lab is not distributed within the Scilab/Scicos package. TheRTAI-Lab source code can be found within the RTAI distribution in directory $RTAI/rtai-lab. It contains both Scilab and Matlab subdirectories.

72 The snapshot shows: Part of the RTAI-Lib palette, which includes real-time sources, sinks, and interfaces to acquisition cards using Comedi. Part of a model that interfaces to a device with 6 sensors. This model can be compiled directly from within Scicos into a real-time executable. The xrtailab / RTAI-Lab Graphical User Interface program that connects with the real-time executable. In this case we are displaying only 2 data sources on the Scope and one source on the meter

73

74 System-Observer demo Start demo: The System-Observer demo is viewable by clicking in the main Scilab window on Demos-->Scicos-- >System-Observer.cosf. Super Blocks: One may click on the various blocks to see how they are defined. Now click on one of the Super Blocks. You see it contains a Continuous-Time Linear State-Space block, also known as CLSS. If you now click on it, a window opens up where you see how the corresponding matrices are defined. It turns out the matrices are defined by symbolic parameters (Scilab variables) A and B. Symbolic parameters are defined in the context of the diagram. Click [Cancel] and then close the previous window (entitled "System").

75 Symbolic parameters are defined in the context of the diagram
Symbolic parameters are defined in the context of the diagram. Click [Cancel] and then close the previous window (entitled "System"). Diagram context: In the System-Observer window click on Edit-->Context. This is where the symbolic parameters are defined. Run simulation: Click on Simulate-->Run Source code: The Scicos diagrams for all the demos are in the directory $SCI/demos/scicos/

76

77 Scicos is a graphical dynamical system modeler and simulator
Scicos is a graphical dynamical system modeler and simulator. User can create block diagrams to model and simulate the dynamics of hybrid dynamical systems (continuous and discrete time) and compile such models into executable code. It is used for signal processing, systems control, queuing systems, and to study physical and biological systems. It is possible that Scilab/Scicos is currently the most complete alternative to commercial packages for dynamic systems modeling and simulation packages such as MATLAB/Simulink and MATRIXx/SystemBuild."

78 3. Porting Scicos-Flex to Scilab 5.0
1. SCICOS CODE GENERATOR: 2. Scicos: Block diagram modeler/simulator: 3. Porting Scicos-Flex to Scilab 5.0 Flex" means "flexibility". The Scicos internal code generator is not capable to produce true executable "stand-alone" code. Vendors provide external libraries of Scicos computational functions fully independent from the Scilab/Scicos environment. These libraries are based on general purpose C code that can be easily cross compiled for DSP and micro controllers. the code generated is, for the internal section, fully device and board agnostic. This means that the same Scicos diagrams can be used for simulation and different target implementation with not modifications at all or, for the code generation, only changing the device/board specific input/output blocks.

79 4. Real-Time Systems Laboratory. RETIS Lab
4. Real-Time Systems Laboratory. RETIS Lab. Mauro Marinoni Scilab/Scicos Code. Generator for Flex Kernels/SLIDES/s6-Scicos.pdf

80 5. Scilab/Scicos Code Generator for FLEX
Concept To develop a single-click digital control automatic code generation tool for the FLEX boards! !

81 6. Free & Open Source Simulation Software (Modeling, Simulation, Control and Visualization)
Scicos-FLEX embedded code generator 10.0 released! Manager's Choice Paolo G. Software Engineer Dear all, just a quick mail to inform you we just released the ScicosLab Pack

82 MATH TOOLS - Complex Number Conversion
Summary :  Convert complex matrices to/from polar (phasor) form often used in electrical engineering. Description: It adds only two routines: to_r() and to_p(). These routines make it easy to work with complex numbers in the polar (or phasor) form often used by electrical engineers. In polar form a complex number is written as a (magnitude, angle) pair where the angle is in degrees measured counterclockwise (CCW) from the positive real axis.

83 In engineering texts the notation
mag /_ angle is often used, so 10 /_ 45 would represent the complex number with magnitude 10 at a 45 degree CCW from the real axis. to_r(10,45) converts this to standard form and gives i. The routines define and work with two matrix "polar forms". In the first form the magnitudes and angles are in adjacent columns of a single matrix. In the second form the magnitudes and angles are in separate matrices. The to_r() example at the end of the previous paragraph used the second form. The same result can be obtained using the first form via to_r([10 45]).

84 to_r() is used to convert polar form numbers or matrices
to standard form: -->// Create a 2x2 impedance matrix. -->// The impedances are given in a mix of polar and standard forms. -->Z = [to_r(100, 45) 200+%i*200; to_r(150,90) 200]; -->// Create a voltage vector V(1) = 50 /_0, V(2) = 100 /_ -30 -->V = to_r([50 0; ]); Complex matrices should always be in standard form for computation. to_p() is normally used only at the end of a computation to show a result in polar form:

85 Calculate currents corresponding to previous Z and V
-->I = ZV I = ! i ! ! i ! -->to_p(I) ans = ! ! ! ! In this example I(1) = i = 400 mA /_ degrees and I(2) = i = 231 mA /_ -7.2 degrees.

86 First example of using scilab
generating beat waves using scilab: -->Ts=0.0001; -->n=-1000:1000; -->tn=n*Ts; -->xn=2*cos(40* *tn).*cos(800* *tn); -->plot(tn, xn); This program shows the Beat waves for the equations given:

87 X(t)=cos(2π20t)+cos(2π400t)
The individual plots and the resultant beat wave is shown below Plot of frequency equal to 20:

88 Plot of frequency equal to 400:

89 Resultant Beat Wave: This should come as no surprise, that beating forms the basis for Amplitude modulation.

90 Matlab/Scilab dictionary
Table of Contents: abs — (Matlab function) Absolute value and complex magnitude acos — (Matlab function) Inverse cosine acosh — (Matlab function) Inverse hyperbolic cosine acot — (Matlab function) Inverse cotangent acoth — (Matlab function) Inverse hyperbolic cotangent acsc — (Matlab function) Inverse cosecant acsch — (Matlab function) Inverse hyperbolic cosecant addition — (Matlab function) Plus all — (Matlab function) Test to determine if all elements are nonzero

91 and — (Matlab function) Logical AND
angle — (Matlab function) Phase angle ans — (Matlab function) The most recent answer any — (Matlab function) Test to determine if any nonzeros elements asec — (Matlab function) Inverse secant asech — (Matlab function) Inverse hyperbolic secant asin — (Matlab function) Inverse sine asinh — (Matlab function) Inverse hyperbolic sine atan — (Matlab function) Two-quadrant inverse tangent atan2 — (Matlab function) Four-quadrant inverse tangent

92 atanh — (Matlab function) Inverse hyperbolic tangent
balance — (Matlab function) Diagonal scaling to improve eigenvalue accuracy bar — (Matlab function) Bar histogram barh — (Matlab function) Bar histogram horizontal beep — (Matlab function) Produce a beep sound besseli — (Matlab function) Modified Bessel functions of the first kind besselj — (Matlab function) Bessel functions of the first kind besselk — (Matlab function) Modified Bessel functions of the second kind bessely — (Matlab function) Bessel functions of the second kind beta — (Matlab function) Beta function

93 bin2dec — (Matlab function) Returns the integer corresponding to a Given binary representation
bitand — (Matlab function) The AND of two integers bitcmp — (Matlab function) The binary complementary of an integer bitget — (Matlab function) Gets the bit of an integer whose the positon is given in the input argument bitor — (Matlab function) The OR of two integers bitxor — (Matlab function) Returns the exclusive OR of two integers blanks — (Matlab function) A string of blanks box — (Matlab function) Display axes border break — (Matlab function) Terminate execution of a for loop or while loop

94 case — (Matlab function) Case switch
cat — (Matlab function) Arrays concatenation cd — (Matlab function) Change/get working directory ceil — (Matlab function) Round up cell — (Matlab function) Create cell array cell2mat — (Matlab function) Convert a cell array into a matrix cellstr — (Matlab function) Convert strings vector (or strings matrix) into a cell of strings chol — (Matlab function) Cholesky factorization cla — (Matlab function) Clear current axes clc — (Matlab function) Clear Command Window clear — (Matlab function) Remove items from workspace, freeing up system memory clf — (Matlab function) Clear current figure window clock — (Matlab function) Current time as a date vector

95 close — (Matlab function) Delete specified figure
closereq — (Matlab function) Default figure close request function colon — (Matlab function) Colon colordef — (Matlab function) Set default property values to display different color schemes complex — (Matlab function) Returns the complex form corresponding to the given real part and imaginary part conj — (Matlab function) Complex conjugate continue — (Matlab function) Keyword to pass control to the next iteration of a loop conv — (Matlab function) Convolution cos — (Matlab function) Cosine cosh — (Matlab function) Hyperbolic cosine cot — (Matlab function) Cotangent

96 coth — (Matlab function) Hyperbolic cotangent
cputime — (Matlab function) Elapsed CPU time csc — (Matlab function) Cosecant csch — (Matlab function) Hyperbolic cosecant cumprod — (Matlab function) Cumulative product cumsum — (Matlab function) Cumulative sum date — (Matlab function) Current date string dec2bin — (Matlab function) The binary representation of a decimal number dec2hex — (Matlab function) Decimal to hexadecimal number conversion delete — (Matlab function) Delete files or graphics objects det — (Matlab function) Determinant diag — (Matlab function) Diagonal including or extracting diary — (Matlab function) Save session to a file diff — (Matlab function) Differences and approximate derivatives dir — (Matlab function) Display directory listing

97 disp — (Matlab function) Display text or array
display — (Matlab function) Overloaded method to display an object doc — (Matlab function) Display online documentation docopt — (Matlab function) Web browser for UNIX platforms dos — (Matlab function) Execute a UNIX command and return result double — (Matlab function) Conversion to double precision drawnow — (Matlab function) Complete pending drawing events echo — (Matlab function) Echo lines during execution eig — (Matlab function) Find eigenvalues and eigenvectors elementwise multiplication — (Matlab function) Elementwise mutiplication elementwise power — (Matlab function) Elementwise exponent

98 elementwise right division — (Matlab function) Elementwise left division
elementwise transpose — (Matlab function) Elementwise transpose else — (Matlab function) Conditionally execute statements elseif — (Matlab function) Conditionally execute statements end — (Matlab function) Last index eps — (Matlab function) Floating-point relative accuracy equal — (Matlab function) Equal to erf — (Matlab function) Error function erfc — (Matlab function) Complementary error function erfcx — (Matlab function) Scaled complementary error function error — (Matlab function) Display error messages etime — (Matlab function) Elapsed time eval — (Matlab function) Execute a string containing an instruction/expression

99 exist — (Matlab function) Check if a variable or file exists
exit — (Matlab function) Ends current session exp — (Matlab function) Exponential expm — (Matlab function) Matrix exponential eye — (Matlab function) Identity matrix factor — (Matlab function) Prime numbers decomposition false — (Matlab function) False array fclose — (Matlab function) Close one or more open files feof — (Matlab function) Test for end-of-file ferror — (Matlab function) Query about errors in file input or output feval — (Matlab function) Function evaluation fft — (Matlab function) Discrete Fourier transform fftshift — (Matlab function) Shift zero-frequency component of discrete Fourier transform to center of spectrum

100 fgetl — (Matlab function) Read line(s) from file, discard newline character
fgets — (Matlab function) Read line from file, keep newline character fileparts — (Matlab function) Return filename parts filesep — (Matlab function) Return the directory separator for this platform find — (Matlab function) Find indices and values of nonzero elements findstr — (Matlab function) Find one string within another fix — (Matlab function) Round towards zero fliplr — (Matlab function) Flip matrix in left/right direction flipud — (Matlab function) Flip matrix in up/down direction floor — (Matlab function) Round down

101 fopen — (Matlab function) Open a file or obtain information about open files
for — (Matlab function) Repeat statements a specific number of times format — (Matlab function) Control display format for output fprintf — (Matlab function) Write formatted data to file fread — (Matlab function) Read binary data to a file frewind — (Matlab function) Move the file position indicator to the beginning of an open file fscanf — (Matlab function) Read formatted data to file fseek — (Matlab function) Set file position indicator ftell — (Matlab function) Get file position indicator full — (Matlab function) Convert sparse matrix to full matrix fullfile — (Matlab function) Build a full filename from parts

102 function — (Matlab function) Function definition
fwrite — (Matlab function) Write binary data to a file gamma — (Matlab function) Gamma function gammaln — (Matlab function) Logarithm of gamma function getenv — (Matlab function) Get environment variable global — (Matlab function) Define a global variable graymon — (Matlab function) Set graphics defaults for gray-scale monitors great — (Matlab function) Greater than great equal — (Matlab function) Greater or equal to grid — (Matlab function) Grid lines for two- and three-dimensional plots hankel — (Matlab function) Hankel matrix help — (Matlab function) Display help helpbrowser — (Matlab function) Display Help browser for access to full online documentation

103 helpdesk — (Matlab function) Display Help browser
helpwin — (Matlab function) Provide access to and display help for all functions hess — (Matlab function) Hessenberg form of a matrix hold — (Matlab function) Hold current graph home — (Matlab function) Move the cursor to the upper left corner of the Command Window horzcat — (Matlab function) Horizontal concatenation i — (Matlab function) Imaginary unit if — (Matlab function) Conditionally execute statements ifft — (Matlab function) Inverse discrete Fourier transform imag — (Matlab function) Complex imaginary part input — (Matlab function) Request user input int16 — (Matlab function) Convert to 16-bit signed integer int32 — (Matlab function) Convert to 32-bit signed integer

104 int8 — (Matlab function) Convert to 8-bit signed integer
interp1 — (Matlab function) One_dimension interpolation function inv — (Matlab function) Matrix inverse isa — (Matlab function) Detect an object of a given type iscell — (Matlab function) Determine if input is a cell array ischar — (Matlab function) Determine if item is a character array isdir — (Matlab function) Determine if item is a directory isempty — (Matlab function) True for empty matrix isequal — (Matlab function) Determine if arrays are numerically equal isfield — (Matlab function) Determine if input is a structure array field isfinite — (Matlab function) True for finite elements isglobal — (Matlab function) Determine if item is a global variable ishandle — (Matlab function) Determines if values are valid graphics object handles ishold — (Matlab function) Return hold state

105 isinf — (Matlab function) True for infinite elements
isinteger — (Matlab function) Detect whether an array has integer data type isletter — (Matlab function) True for letters of the alphabet islogical — (Matlab function) Determine if item is a logical array isnan — (Matlab function) Detect NaN elements of an array isnumeric — (Matlab function) Determine if input is a numeric array ispc — (Matlab function) Determine if PC (Windows) version isreal — (Matlab function) Determine if all array elements are real numbers isscalar — (Matlab function) Determine if input is scalar isspace — (Matlab function) Detect elements that are ASCII white spaces issparse — (Matlab function) Test if matrix is sparse

106 isstr — (Matlab function) Determine if item is a character array
isstruct — (Matlab function) Determine if input is a structure array isunix — (Matlab function) Determine if Unix version isvector — (Matlab function) Determine if input is a vector j — (Matlab function) Imaginary unit keyboard — (Matlab function) Invoke the keyboard in a file kron — (Matlab function) Kronecker tensor product left division — (Matlab function) Left division length — (Matlab function) Length of vector less — (Matlab function) Smaller than less equal — (Matlab function) Smaller or equal to linspace — (Matlab function) Linearly spaced vector load — (Matlab function) Load workspace variables from disk

107 log — (Matlab function) Natural logarithm
log10 — (Matlab function) Common (base 10) logarithm log2 — (Matlab function) Base 2 logarithm and dissect floating point number logical — (Matlab function) Convert numeric values to logical lookfor — (Matlab function) Search for specified keyword in all help entries lower — (Matlab function) Convert string to lower case lu — (Matlab function) LU matrix factorization max — (Matlab function) Maximum min — (Matlab function) Minimum mkdir — (Matlab function) mod — (Matlab function) Modulus after division more — (Matlab function) Display Command Window output one screenful at a time

108 multiplication — (Matlab function) Mutiplication
nargin — (Matlab function) Number of function input arguments nargout — (Matlab function) Number of function output arguments ndims — (Matlab function) Number of array dimensions norm — (Matlab function) Vector and matrix norms not — (Matlab function) Negation not equal — (Matlab function) Not equal to num2str — (Matlab function) Number to string conversion ones — (Matlab function) Create an array of all ones or — (Matlab function) Logical OR otherwise — (Matlab function) Default part of switch/select statement pause — (Matlab function) Halt execution temporarily perms — (Matlab function) Array of all permutations of vector components permute — (Matlab function) Permute the dimensions of an array pi — (Matlab function) Ratio of a circle's circumference to its diameter pie — (Matlab function) circular graphic plot — (Matlab function) Linear 2-D plot

109 pow2 — (Matlab function) Base 2 power and scale floating-point numbers
power — (Matlab function) Exponent primes — (Matlab function) Returns the primes numbers included between 1 and given number prod — (Matlab function) Product of array elements qr — (Matlab function) Orthogonal-triangular decomposition quit — (Matlab function) Terminate session rand — (Matlab function) Uniformly distributed random numbers and arrays randn — (Matlab function) Normally distributed random numbers and arrays rcond — (Matlab function) Matrix reciprocal condition number estimate real — (Matlab function) Real part of a complex number realmax — (Matlab function) Largest positive floating-point number realmin — (Matlab function) Smallest positive floating-point number rem — (Matlab function) Remainder after division repmat — (Matlab function) Replicate and tile an array

110 reshape — (Matlab function) Reshape array
return — (Matlab function) Return to the invoking function right division — (Matlab function) Right division round — (Matlab function) Round to nearest integer save — (Matlab function) Save workspace variables from disk schur — (Matlab function) Schur decomposition setstr — (Matlab function) Set string flag sign — (Matlab function) Signum function sin — (Matlab function) Sine sinh — (Matlab function) Hyperbolic sine size — (Matlab function) Array dimension sort — (Matlab function) Sort elements in ascending order sparse — (Matlab function) Create sparse matrix sqrt — (Matlab function) Square root strcmp — (Matlab function) Compare strings strcmpi — (Matlab function) Compare strings ignoring case strfind — (Matlab function) Find one string within another strrep — (Matlab function) String search and replace

111 struct — (Matlab function) Create struct array
subtraction — (Matlab function) Minus sum — (Matlab function) Sum of array elements surf — (Matlab function) 3-D surface plot svd — (Matlab function) Singular value decomposition switch — (Matlab function) Switch among several cases based on expression tan — (Matlab function) Tangent tanh — (Matlab function) Hyperbolic tangent tic — (Matlab function) Starts a stopwatch timer title — (Matlab function) Display a title on a graphic window toc — (Matlab function) Read the stopwatch timer toeplitz — (Matlab function) Toeplitz matrix transpose — (Matlab function) Transpose tril — (Matlab function) Lower triangular part of a matrix triu — (Matlab function) Upper triangular part of a matrix true — (Matlab function) True array type — (Matlab function) List file uigetdir — (Matlab function) Standard dialog box for selecting a directory uint16 — (Matlab function) Convert to 16-bit unsigned integer

112 uint32 — (Matlab function) Convert to 32-bit unsigned integer
unix — (Matlab function) Execute a UNIX command and return result upper — (Matlab function) Convert string to upper case varargin — (Matlab function) Pass variable numbers of arguments varargout — (Matlab function) Return variable numbers of arguments vertcat — (Matlab function) Vertical concatenation waitforbuttonpress — (Matlab function) Wait for key or mouse button press warning — (Matlab function) Display warning messages while — (Matlab function) Repeat statements an indefinite number of times who — (Matlab function) List variables in the workspace whos — (Matlab function) List variables in the workspace winqueryreg — (Matlab function) Get item from Microsoft Windows registry xlabel — (Matlab function) Display a string along the x axis ylabel — (Matlab function) Display a string along the y axis zeros — (Matlab function) Create an array of all zeros zlabel — (Matlab function) Display a string along the z axis

113 EMBEDDED INFORMATION:
Scilab comes with some built-in information structures. The major ones are: The Help Browser that can be accessed from various windows. Its utility improved with Scilab when demonstrations were included, but the Help Browser is still a hard nut for newbies. It confuses by sometimes referring to obsolete functions Demonstrations that can be accessed from the Console. Not really tutorials and some of them act funny, some may cause Scilab to crash, and others still ask for a C compiler Error messages displayed on the Console. Quite basic messages, sometimes confusing, sometimes too brief What is really missing is an embedded tutorial (or even a user’s manual of the Matlab style) that is updated with each Scilab

114 SCILAB INFORMATION ON THE WEB:
The main portal is Wiki Scilab, < were most of the accessible tutorials are listed Scilab’s forge < is a repository of “work in progress,” many of which exist only in name. Its set of draft documents is valuable Wiki Scilab’s HowTo page < has some articles of interest Free sites: Scilab File Exchange website < A new discussion forum managed by the Scilab team and “dedicated to easily exchange files, script, data, experiences, etc.” Google discussion group at < comp.soft-sys.math.scilab/topics> MathKB < Contains, among other things, a Scilab discussion forum. Mostly advanced questions spoken-tutorial < Screencasts under construction by IIT Bombay. Scilab basics

115 SCILAB INFO ON WEB ( CONTD.)
YouTube has some video clips on Scilab, but nothing really valuable Equalis < By registering you gain free access to the discussion forum < used to be a very good blog but is now terminally ill. Worth checking the material that is still there Scilab India < is basically a mirror of Scilab Wiki, with added obsolete material and a less active discussion forum If you know German: German technical colleges produce helpful basic tutorials on Scilab (better than their French counterparts). Search the Internet e.g. using the terms “Scilab” + “Einführung” and limit the language option to German

116 Simulation of cars waiting at a toll booth using Scilab
Jianfeng Li Institute of Industrial Process Control, Control Science and Engineering Department,zhejiang university 2006.9

117 Introduction The queue system’s performance index The optimal number of servers Simulation Conclusion

118 Introduction Queuing theory
It is the study of the waiting line phenomena. It is a branch of applied mathematics utilizing concepts from the field of stochastic processes. It is the formal analysis of this phenomenon in search of finding the optimum solution to this problem so that everybody gets service without waiting for a long time in line.

119 Introduction The queue system is composed of
the arrival process the queue discipline the service process If there is one server in all service process, it is called single-server system. If the server number is more than one and each sever can serve customers independently, it is called multi-server system

120 Introduction Usually, the service system is evaluated by performance indexes, such as Service intensity Average queuing length Average queuing time Average stay time Probability of the service desks being idle The probability of the customers having to wait

121 Introduction The basic service process is the following: busy
the customers arrive queuing system waiting line free served according to the prescribed queuing discipline finished leave the system

122 Introduction The terms customer, server, service time, and waiting time may acquire different meanings in different applications. In this article The customers are cars arriving at a toll booth The servers are the workers in the tool booth The service times are the payment times

123 The queue system’s performance index
In the simulation of cars waiting at a toll booth, some necessary condition assumptions and notation definitions should be made. Assumptions: The arrival time and service time follow exponential distribution. The waiting queue is infinite.

124 The queue system’s performance index
Notations: λ: the arrival rate of the car μ: the service rate of the car ρ: the service intensity Ls: the average quantity of cars in the system Lq: the average quantity of cars in the waiting queue Ws: the average time of each car stay in the system Wq: the average time of each car stay in the waiting queue

125 The queue system’s performance index
according to John DC Little’s formula, we only discuss two usual models. Standard M/M/1 service model. Standard M/M/C service model.

126 Standard M/M/1 service model
The arrival time and service time of cars can be discretional distribution. The number of server is one. The car source and service space are infinite. The queuing discipline is first come first service.

127 Standard M/M/1 service model
So the major performance indexes are: Service intensity: Probability of the server being idle: Probability of n cars in the system:

128 Standard M/M/C service model
The arrival time and service time of cars can be discretional distribution. the number of server is C and they are parallel connection . Servers work independently and the average service rate is the same. The car source and service space are infinite. The queuing discipline is first come first service.

129 Standard M/M/C service model
So the major performance indexes are: Service intensity: Probability of the server being idle: The average quantity of cars in the waiting queue: The average quantity of cars in the system: The average time of each car stay in the system: Probability of the car has to waiting after arriving:

130 The optimal number of servers
Step 1, according to , find out the initialization number of servers ; Step 2, compute the performance indexes, such as the average quantity of cars in the waiting queue, the average time of each car stay in the system, and the average time of each car stay in the waiting queue. Comparing them with desired indexes, if it is dissatisfied, go to step 3; otherwise, the optimal number of servers is N and the process is end. Step 3, let , go to step 2.

131 Simulation In this system, the arrival time and service time of car are similar to the exponential distribution. Assume that the left time of the ith car is the begin service time of the (i+1)th car. All the events can be classified to two sorts: one is the arrival event of cars; the other is the leave event of car. When the arrival event and the leave event occur at a same time, disposed the former first.

132 Simulation In Scilab simulation environment, the average arrival rate of cars, the average service rate of cars and the simulation terminate time are given by the following:

133 Simulation In the simulation platform we present, the draw mode of SCILAB is set to be animate all along so that a gliding process can be observed.

134 Simulation The animation demo can be described as:

135 Simulation Assume that the terminate time of simulation is 240 sec.
The average arrival rate is 0.18. And the average service rate is 0.1. The minimum servers’ number can be found out: =1. The queuing discipline is first come first serve.

136 Simulation The simulation results can be calculated:
The average quantity of cars in the waiting queue is: 15 The max quantity of cars in the waiting queue is: 26 The average quantity of cars in the system is: 16 The average time of each car stay in the waiting queue is: 146sec The average time of each car stay in the system is: 162sec All the served cars number is: 22

137 Simulation Let , the number of server become 2.
The simulation process is similar to the above single servers systems. The different is that, in the simulation, when the second car arrival, it can be serviced immediately because there are two servers in the system. So the car will pass the toll booth with less waiting time.

138 Simulation The simulation results with two servers are:
The average quantity of cars in the waiting queue is:3 The max quantity of cars in the waiting queue is: 6 The average quantity of cars in the system is: 4 The average time of each car stay in the waiting queue is: 29sec The average time of each car stay in the system is: 41sec All the served cars number is: 42

139 Simulation Comparing the above results with desired performance index, it is found that when there are two servers, the demands can be satisfied. So, it is recommended to open two servers.

140 Conclusion Queuing theory have been used in almost every domain of social and natural science as a tool to solve many problems. In this article, queuing theory is used to solve the problem of cars waiting in a tool booth. Using the tools of Scilab, the simulation of a single queuing multi-servers system is done and the optimal number of server is obtained.

141 THE END

142 CONTACT : Dr.P.S.SUBRAMANYAM :

143 Thank You!


Download ppt "SCILAB and SCICOS- Emerging Open Source Alternative to MATLAB"

Similar presentations


Ads by Google