# Difference between revisions of "Scilab"

Scilab (http://scilab.org, http://scilab.in, http://scilab.cn) is an open source scientific software package for numerical computations. It has an extremely reliable and efficiently coded numerical library. It is also a high productivity tool: Through its interpreted language, one can quickly develop the code required to solve problems. Typically, if it takes ten lines of C code for some calculation, Scilab would require only one for the same purpose.

Scilab runs on all popular operating systems. Since 1994, it has been distributed freely along with the source code via the Internet. It is useful for students at school, college and roupas da moda research level. It is also useful for researchers and professionals.

IIT Bombay is leading the effort to popularise Scilab in India. This is part of the Free and Open source Software for Science and Engineering Education (FOSSEE) project, supported by the National Mission on Education through ICT of MHRD (http://spoken-tutorial.org/NMEICT-Intro).

IIT Bombay is using Spoken Tutorials (http://spoken-tutorial.org) to create learning material for FOSS. This is the main page for the organisation of the scripts required for Scilab spoken tutorials. We invite the Scilab user community to participate in this activity.

Note: Each numbered topic corresponds to a single spoken tutorial. Each bulleted point corresponds to a command or topic that must be covered organic nuts in the given spoken tutorial.

# General Information

This topic will include all functionality in Scilab that iphone photography is not domain specific- functionality that is required across several domains.

## Basic Level Introduction to Scilab

This level will include a set of tutorials that are required to be known in order to qualify as "Scilab Literate". The tutorials here will teach programming weight loss pills fundamentals and the most commonly used Scilab functionality- Matrix operations and Plotting.

1. Installing
• Windows installation (Internet Connection is necessary)
• Linux installation (using package manager- show only Debian/Ubuntu as example (sudo apt-get install scilab) as well as generic binary)
• Mac
• Compilation from source can come as a part of a more advanced tutorial
2. Getting Started: Basic Housekeeping
• Expressions: Show mathematical expressions with numbers (42+4^2-64/4).
• Variables: Assign scalars to variables- a=1, b=2, c=3.
• Diary:CD, diary open and close and show transcript of some calculations given below
• Define symbolic constants. Use %i as example. Verify showing %i*%i to be -1. Also show sqrt(-1). Define a complex number (5*%i) and show a complex number expression (10+5*%i)*(2*%i). Show %pi and %e.
• Basic functions Show sin(%pi/2), cos(%pi/2), exp(1) versus %e, exp(2) versus %e^2. Define a matrix.
• suppressing output(;)
• help,clc
--------------------------------------------------------------------------------------------------------------------------------------------
Matrix Operations
3. Vector Operations
• Define p = [1 2 3], q = [2 3 4]
• size(p), length(p)
• p+q, q-p, p*q, p', p'*q, p*q'
• Define P = [1 2 3; 4 5 6]
• size(P), P'
4. Matrix Operations
• Square matrices Q = [1 5; 2 4], S = [2 0; 4 1]
• det(Q), diag(Q), T=Q+S, Q-S, Q*S, E = 2*Q + 3*S
• Matrix generation: zeros(3,4), ones(2,5), eye(4,4), diag([1 2 3]), rand(2,3). Also show how one can generate these matrices (zeros, ones, eye, rand) of the same size as another matrix by passing that other matrix as an argument- zeros(A), rand(A).
• Ranges: 1:4, 2:2:8, linspace(1, 9, 5) (linspace is to be explained in Plotting 2D graphs tutorial)
• Referring: P(2), P(2,1), P(6), P(3,2), P(1,\$), P(2,:), P(:,2), P([2 3],[1 3]), P(1,2)=8.5
• Elementary row operations:P(2,:) = P(2,:) - 4*P(1,:)
• Solving equations: P = [1 2 -1; -2 -6 4 ; -1 -3 3], q = [1; -2; 1], x=P\q
--------------------------------------------------------------------------------------------------------------------------------------------
5. Conditional Branching
• Explain booleans: %T and %F- they form the basis for the if statement.
• First explain 'if' and 'then' with the example: n = 42, if (n == 42) then disp("The number is forty two"), end
• Now explain the use of the 'else' keyword: n = 54, if (n == 42) then disp("The number is forty two"), else disp("The number is not forty two"), end
• Now explain the use of the 'elseif' keyword: n = 54, if (n == 42) then disp("The number is forty two"), elseif (n == 54) then, disp("The number is fifty four"), else disp("The number is neither forty two nor fifty four"), end
• Say that if there are several branches, it may be clearer to use the 'select' keyword.
• Give example for select: n = 100, select n, case 42, disp("The number is forty two"), case 54, disp("The number is fifty four"), else disp("The number is neither forty two nor fifty four"), end
• Branching can be based on satisfaction of combination of multiple conditions as well: a=1, b=2; if (a>0 & b>0), disp('product of a and b would be positive'), elseif (a==0 | b==0) disp('product of a and b would be zero'), end
6. Iteration
• Explain syntax of 'for' statement- tell that the variable iterates over a list/vector/matrix (or an expression that evaluates to any of these).
• Give example: for i = 1:5, disp (i), end
• Then explain break condition. Use example: for i = 1:10, disp(i), if (i==5), break, end, end
• Then explain continue condition. Use example: for i = 1:10, if (i<=5) then continue, else disp(i), end, end
• Explain while condition.
• Give example: i = 0; while(i <=5), i = i + 1; disp(i), end
• Then explain break, continue condition with example in while loop.
7. Plotting 2D graphs
• About linspace: linspace is a linearly spaced vector.
• Plot a simple graph: x=linspace(12,34,10), y=linspace(-.1,2,10), plot(x,y)
• plot2d(x,y,style=1), style can have different values, style=1 gives black coloured graph line, style=2 gives blue coloured graph line and so on
• Show that if one tries to plot another graph without closing the first one, the plot will appear over the first graph. This may or may not be desirable- one may want to plot the second graph in a fresh window. Then explain how scf() can be used to alternate between graph windows.
• Using clf() clear the graphic window.
• Configure the title for the plot using title("My title"), Configure the axis separately using xlabel("X"), ylabel("Y")
• Configure a legend to know what curve is associated with y1 = x^2 and what curve is associated with y2 = 2x^2.
• Divide a graphic window into a matrix of sub-windows using subplot(mnp)
8. Scripts and Functions
• Explain that one often repeats a set of commands- in which case it is helpful to save that set of commands for future or repeated use. The commands can be saved as scripts or functions.
• Change directory to the desktop. Open the scilab editor and type the commands (each on a new line): disp("Hello world"); a=1; b=2; c=a+b; disp(c); disp("Goodbye, world");
• Save the above file to the desktop. Then open the same file using a regular text editor such as notepad to show that it is indeed a text file. Now load the file into scilab using the scilab editor's execute menu option.
• Change the value of a to 5 in the editor, save and close it. Now execute the script directly from the scilab interpreter using exec.
• Functions: Show the syntax of functions, explain the function keyword, input arguments and the structure of output arguments when there is more than one argument.
• Show the following function in the editor: function [degrees] = radians2degrees(radians) degrees = radians*(180/%pi); endfunction. Save the function file and exec it from scilab. Then show radians2degrees(%pi/2), radians2degrees(%pi/4).
• Inline functions: show how to define degrees2radians, i.e. inverse of the above function, as an inline function.
• .sce versus .sci: These are just conventions- sci is used for scripts containing only function definitions- sce is used for all other scripts.
9. Input and Output
• Console input and output:
• input function: age = input("Enter your age: "). Then try entering name: name = input("Enter your name"). Enter name without quotes- will give an error. Then enter name with qutoes- that'll work. Explain that if string input is expected, then you can use: name = input("Enter your name", "string")
• Output function: Show disp(age) and disp(name). Formatted output: mprintf("Your name is %s and your age is %d", name, age)
• Reading and writing in files: Do a = rand(20, 1)
• Text files:
• Output- write(): write('my-random-numbers.txt', a). Open and show the text file.
• Input- read(): b = read('my-random-numbers.txt', 20, 1). Now do b - a.
• Binary files: Back up a thus: a_backup = a. Now clear a.
• Output- save(): save('my-random-numbers.dat', a). Try opening in notepad- show it's really binary.
• Say that you can load only some variables if needed: save('personaldetails.dat', name, age), clear, disp(name) //error, disp(age) //error, load('personaldetails.dat', 'name'), disp(name) //no error, disp(age) //error

1. File Handling- Scilab File handling
2. File Handling- User Defined Input and Output in Scilab
3. Numerical methods- Integration
4. Numerical methods- Solving Non- linear Equations
5. Numerical methods- Gauss Elimination Method and Gauss Jordan Method
6. Numerical methods- Iterative Methods
7. Numerical methods- Interpolation
8. Numerical methods- ODE- Euler methods
9. Numerical methods- ODE- Applications
10. Optimization Using Karmarkar Functions
11. Optimization of Non-linear Functions
12. Digital Signal Processing
13. Filter Design- Windowing Techniques
14. Filter Design- Window Based FIR Filter
15. Filter Design- IIR Digital Filter
16. Filter Design- Applying Digital Filter
17. Control systems
18. Discrete systems
19. Calling User Defined Functions in XCOS
• Installing a toolbox
• In Scilab 5.2.2+, go to Applications and click on Module manager. Show list of available toolboxes and select one (say, Metanet toolbox)
• Click on the install button to install it.
• After the toolbox has been downloaded and installed, open the demos section and show a demo of the Metanet toolbox.
• Creating a toolbox

# Signals and Systems

## Control Systems

Outline for a set of spoken tutorials on Control Systems

Representing control systems and their properties

1. First order systems (1)
• Defining a system
• Simulating the system
• Step test
• Sine test (at two different frequencies)
• Root locus
• Bode plot
• Nyquist plot (1)
2. Second order systems (2)
• Underdamped system
• Defining the system
• Roots of denominator
• Step test
3. Other system representations (3)
• Discrete time systems (3)
• Defining a system
• Simulating the system (step test)
• Bode plot
• Root locus
• Discretizing continuous time systems (3)
4. State space representation (4)
• Defining the system and initial state
• Simulating the system
• Plotting output state and internal state
• Root locus
• Conversion to transfer function
• Compare roots of denominator of answer with eigenvalues of A matrix.
5. Multiple subsystems (5)
6. Modeling a system (6)
• Obtain ODE representation of a system
• Laplace transform representation of the system
• Comparison with a second order model (obtain natural freq. and damping factor)
7. Analyzing the system (7)
• Open loop step response
• Step response with unity feedback
• Steady state error: open loop system as well as unity feedback system
• Root locus and finding the gain from a point on the root locus.
8. Controlling the system (8)
• Proportional control
• Deciding the parameters to be achieved (overshoot/rise time, etc)
• Determining corresponding system parameters (natural freq., damping factor)
• Obtaining location of corresponding point on root locus and gain there
• Building and simulating the proportional controller
9. Other Controllers (9)
• PI Control
• PD Control
• PID Control
• Comparing all controllers

## Robotics

1. rtss Toolbox

## Signal Processing

1. Signal Processing Basics
2. Audio processing
3. Image Processing
4. Fourier Transforms

# Other Topics

## Ordinary Differential Equations

(Spoken Tutorial-1 Scripts)
1. Introduction to ODEs
• Use $\frac{dx}{dt} = sin(2t)$ as the first order example and solve using ode.

• System:
<source lang="scilab" line start="1"> function dx = f(t, x) dx = sin(2∗t) ; endfunction </source>
• 2nd order differntial equation, Lotka Volterra equation example,
• Using champ to show arrows.
• With input (nonlinear input/state system). van der Pol oscillator?
• 3rd order, show example and plot.
• One example for discrete time system (difference equation) (of order 2)
• Show points evolving in plane.
• Linear system: syslin
• Solution:
<source lang="scilab" line start="1"> t0 = 0 x0 = −0.5 t = 0:0.1:5; x = ode( x0 , t0 , t , f ) ; plot2d(t , x) </source>
2. Using ODEOPTIONS
3. Implicit Differential Equations

## Linear Algebra

Revise linsolve.

spec, det, generalized eigenvalue (spec)

inv and pinv (pseudo inverse), svd, companion-form

trace, sum of eigenvalues almost same as trace (similarly determinant and product of eigenvalues)

## Scilab Toolboxes

Symbolic toolbox Scripts
Scilab Wavelet toolbox Scripts


## Special Functions

1. Bessel functions
2. Beta function
• Definition
• beta(m,n)=beta(n,m)
• beta(m,n)=gamma(m)*gamma(n)/gamma(m+n)
3. Gamma function
• Definition
• gamma(1), gamma(0)
• gamma(n+1)=n!
• gamma(11/2), gamma(1/2)
4. Error function
5. Legendre functions

## Polynomial interpolation

Close relation between interpolation and van der Monde matrix

Subset of columns of van der Monde matrix will correspond to lower degree fit.

Solvability of over-determined equations perhaps not possible.

Pseude inverse corresponds to "least squares fit" of specified degree.

## Data Handling

1. Databases
2. XMLLab

==Web Interface for Scilab (W3 Scilab)==