Interface to Scilab¶
Scilab is a scientific software package for numerical computations providing a powerful open computing environment for engineering and scientific applications. Scilab includes hundreds of mathematical functions with the possibility to add interactively programs from various languages (C, C++, Fortran…). It has sophisticated data structures (including lists, polynomials, rational functions, linear systems…), an interpreter and a high level programming language.
The commands in this section only work if you have the “scilab” interpreter installed and available in your PATH. It’s not necessary to install any special Sage packages.
EXAMPLES:
sage: # optional - scilab
sage: scilab.eval('2+2')
'ans =\n \n 4.'
sage: scilab('2+2')
4.
sage: a = scilab(10)
sage: a**10
1.000D+10
>>> from sage.all import *
>>> # optional - scilab
>>> scilab.eval('2+2')
'ans =\n \n 4.'
>>> scilab('2+2')
4.
>>> a = scilab(Integer(10))
>>> a**Integer(10)
1.000D+10
# optional - scilab
scilab.eval('2+2')
scilab('2+2')
a = scilab(10)
a**10
Tutorial based the MATLAB interface tutorial:
EXAMPLES:
sage: # optional - scilab
sage: scilab('4+10')
14.
sage: scilab('date')
15-Feb-2010
sage: scilab('5*10 + 6')
56.
sage: scilab('(6+6)/3')
4.
sage: scilab('9')^2
81.
sage: a = scilab(10); b = scilab(20); c = scilab(30)
sage: avg = (a+b+c)/3
sage: avg
20.
sage: parent(avg)
Scilab
sage: # optional - scilab
sage: my_scalar = scilab('3.1415')
sage: my_scalar
3.1415
sage: my_vector1 = scilab('[1,5,7]')
sage: my_vector1
1. 5. 7.
sage: my_vector2 = scilab('[1;5;7]')
sage: my_vector2
1.
5.
7.
sage: my_vector1 * my_vector2
75.
sage: # optional - scilab
sage: row_vector1 = scilab('[1 2 3]')
sage: row_vector2 = scilab('[3 2 1]')
sage: matrix_from_row_vec = scilab('[%s; %s]'%(row_vector1.name(), row_vector2.name()))
sage: matrix_from_row_vec
1. 2. 3.
3. 2. 1.
sage: # optional - scilab
sage: column_vector1 = scilab('[1;3]')
sage: column_vector2 = scilab('[2;8]')
sage: matrix_from_col_vec = scilab('[%s %s]'%(column_vector1.name(), column_vector2.name()))
sage: matrix_from_col_vec
1. 2.
3. 8.
sage: my_matrix = scilab('[8, 12, 19; 7, 3, 2; 12, 4, 23; 8, 1, 1]') # optional - scilab
sage: my_matrix # optional - scilab
8. 12. 19.
7. 3. 2.
12. 4. 23.
8. 1. 1.
sage: combined_matrix = scilab('[%s, %s]'%(my_matrix.name(), my_matrix.name())) # optional - scilab
sage: combined_matrix # optional - scilab
8. 12. 19. 8. 12. 19.
7. 3. 2. 7. 3. 2.
12. 4. 23. 12. 4. 23.
8. 1. 1. 8. 1. 1.
sage: tm = scilab('0.5:2:10') # optional - scilab
sage: tm # optional - scilab
0.5 2.5 4.5 6.5 8.5
sage: # optional - scilab
sage: my_vector1 = scilab('[1,5,7]')
sage: my_vector1(1)
1.
sage: my_vector1(2)
5.
sage: my_vector1(3)
7.
>>> from sage.all import *
>>> # optional - scilab
>>> scilab('4+10')
14.
>>> scilab('date')
15-Feb-2010
>>> scilab('5*10 + 6')
56.
>>> scilab('(6+6)/3')
4.
>>> scilab('9')**Integer(2)
81.
>>> a = scilab(Integer(10)); b = scilab(Integer(20)); c = scilab(Integer(30))
>>> avg = (a+b+c)/Integer(3)
>>> avg
20.
>>> parent(avg)
Scilab
>>> # optional - scilab
>>> my_scalar = scilab('3.1415')
>>> my_scalar
3.1415
>>> my_vector1 = scilab('[1,5,7]')
>>> my_vector1
1. 5. 7.
>>> my_vector2 = scilab('[1;5;7]')
>>> my_vector2
1.
5.
7.
>>> my_vector1 * my_vector2
75.
>>> # optional - scilab
>>> row_vector1 = scilab('[1 2 3]')
>>> row_vector2 = scilab('[3 2 1]')
>>> matrix_from_row_vec = scilab('[%s; %s]'%(row_vector1.name(), row_vector2.name()))
>>> matrix_from_row_vec
1. 2. 3.
3. 2. 1.
>>> # optional - scilab
>>> column_vector1 = scilab('[1;3]')
>>> column_vector2 = scilab('[2;8]')
>>> matrix_from_col_vec = scilab('[%s %s]'%(column_vector1.name(), column_vector2.name()))
>>> matrix_from_col_vec
1. 2.
3. 8.
>>> my_matrix = scilab('[8, 12, 19; 7, 3, 2; 12, 4, 23; 8, 1, 1]') # optional - scilab
>>> my_matrix # optional - scilab
8. 12. 19.
7. 3. 2.
12. 4. 23.
8. 1. 1.
>>> combined_matrix = scilab('[%s, %s]'%(my_matrix.name(), my_matrix.name())) # optional - scilab
>>> combined_matrix # optional - scilab
8. 12. 19. 8. 12. 19.
7. 3. 2. 7. 3. 2.
12. 4. 23. 12. 4. 23.
8. 1. 1. 8. 1. 1.
>>> tm = scilab('0.5:2:10') # optional - scilab
>>> tm # optional - scilab
0.5 2.5 4.5 6.5 8.5
>>> # optional - scilab
>>> my_vector1 = scilab('[1,5,7]')
>>> my_vector1(Integer(1))
1.
>>> my_vector1(Integer(2))
5.
>>> my_vector1(Integer(3))
7.
# optional - scilab
scilab('4+10')
scilab('date')
scilab('5*10 + 6')
scilab('(6+6)/3')
scilab('9')^2
a = scilab(10); b = scilab(20); c = scilab(30)
avg = (a+b+c)/3
avg
parent(avg)
# optional - scilab
my_scalar = scilab('3.1415')
my_scalar
my_vector1 = scilab('[1,5,7]')
my_vector1
my_vector2 = scilab('[1;5;7]')
my_vector2
my_vector1 * my_vector2
# optional - scilab
row_vector1 = scilab('[1 2 3]')
row_vector2 = scilab('[3 2 1]')
matrix_from_row_vec = scilab('[%s; %s]'%(row_vector1.name(), row_vector2.name()))
matrix_from_row_vec
# optional - scilab
column_vector1 = scilab('[1;3]')
column_vector2 = scilab('[2;8]')
matrix_from_col_vec = scilab('[%s %s]'%(column_vector1.name(), column_vector2.name()))
matrix_from_col_vec
my_matrix = scilab('[8, 12, 19; 7, 3, 2; 12, 4, 23; 8, 1, 1]') # optional - scilab
my_matrix # optional - scilab
combined_matrix = scilab('[%s, %s]'%(my_matrix.name(), my_matrix.name())) # optional - scilab
combined_matrix # optional - scilab
tm = scilab('0.5:2:10') # optional - scilab
tm # optional - scilab
# optional - scilab
my_vector1 = scilab('[1,5,7]')
my_vector1(1)
my_vector1(2)
my_vector1(3)
Matrix indexing works as follows:
sage: my_matrix = scilab('[8, 12, 19; 7, 3, 2; 12, 4, 23; 8, 1, 1]') # optional - scilab
sage: my_matrix(3,2) # optional - scilab
4.
>>> from sage.all import *
>>> my_matrix = scilab('[8, 12, 19; 7, 3, 2; 12, 4, 23; 8, 1, 1]') # optional - scilab
>>> my_matrix(Integer(3),Integer(2)) # optional - scilab
4.
my_matrix = scilab('[8, 12, 19; 7, 3, 2; 12, 4, 23; 8, 1, 1]') # optional - scilab
my_matrix(3,2) # optional - scilab
One can also use square brackets:
sage: my_matrix[3,2] # optional - scilab
4.
>>> from sage.all import *
>>> my_matrix[Integer(3),Integer(2)] # optional - scilab
4.
my_matrix[3,2] # optional - scilab
Setting using parenthesis cannot work (because of how the Python language works). Use square brackets or the set function:
sage: # optional - scilab
sage: my_matrix = scilab('[8, 12, 19; 7, 3, 2; 12, 4, 23; 8, 1, 1]')
sage: my_matrix.set(2,3, 1999)
sage: my_matrix
8. 12. 19.
7. 3. 1999.
12. 4. 23.
8. 1. 1.
sage: my_matrix[2,3] = -126
sage: my_matrix
8. 12. 19.
7. 3. - 126.
12. 4. 23.
8. 1. 1.
>>> from sage.all import *
>>> # optional - scilab
>>> my_matrix = scilab('[8, 12, 19; 7, 3, 2; 12, 4, 23; 8, 1, 1]')
>>> my_matrix.set(Integer(2),Integer(3), Integer(1999))
>>> my_matrix
8. 12. 19.
7. 3. 1999.
12. 4. 23.
8. 1. 1.
>>> my_matrix[Integer(2),Integer(3)] = -Integer(126)
>>> my_matrix
8. 12. 19.
7. 3. - 126.
12. 4. 23.
8. 1. 1.
# optional - scilab
my_matrix = scilab('[8, 12, 19; 7, 3, 2; 12, 4, 23; 8, 1, 1]')
my_matrix.set(2,3, 1999)
my_matrix
my_matrix[2,3] = -126
my_matrix
AUTHORS:
Ronan Paixao (2008-11-26), based on the MATLAB tutorial by William Stein (2006-10-11)
- class sage.interfaces.scilab.Scilab(maxread=None, script_subdirectory=None, logfile=None, server=None, server_tmpdir=None, seed=None)[source]¶
Bases:
ExpectInterface to the Scilab interpreter.
EXAMPLES:
sage: # optional - scilab sage: a = scilab('[ 1, 1, 2; 3, 5, 8; 13, 21, 33 ]') sage: b = scilab('[ 1; 3; 13]') sage: c = a * b sage: print(c) 30. 122. 505.
>>> from sage.all import * >>> # optional - scilab >>> a = scilab('[ 1, 1, 2; 3, 5, 8; 13, 21, 33 ]') >>> b = scilab('[ 1; 3; 13]') >>> c = a * b >>> print(c) 30. 122. 505.
# optional - scilab a = scilab('[ 1, 1, 2; 3, 5, 8; 13, 21, 33 ]') b = scilab('[ 1; 3; 13]') c = a * b print(c)- console()[source]¶
Starts Scilab console.
EXAMPLES:
sage: scilab.console() # optional - scilab; not tested
>>> from sage.all import * >>> scilab.console() # optional - scilab; not tested
scilab.console() # optional - scilab; not tested
- eval(command, *args, **kwds)[source]¶
Evaluates commands.
EXAMPLES:
sage: scilab.eval("5") # optional - scilab 'ans =
>>> from sage.all import * >>> scilab.eval("5") # optional - scilab 'ans =
scilab.eval("5") # optional - scilab- 5.’
sage: scilab.eval(“d=44”) # optional - scilab ‘d =
44.’
- get(var)[source]¶
Get the value of the variable
var.EXAMPLES:
sage: scilab.eval('b=124;') # optional - scilab '' sage: scilab.get('b') # optional - scilab '
>>> from sage.all import * >>> scilab.eval('b=124;') # optional - scilab '' >>> scilab.get('b') # optional - scilab '
scilab.eval('b=124;') # optional - scilab scilab.get('b') # optional - scilab124.’
- sage2scilab_matrix_string(A)[source]¶
Return a Scilab matrix from a Sage matrix.
INPUT:
A– Sage matrix with entries in the rationals or reals
OUTPUT: string that evaluates to a Scilab matrix
EXAMPLES:
sage: M33 = MatrixSpace(QQ,3,3) # optional - scilab sage: A = M33([1,2,3,4,5,6,7,8,0]) # optional - scilab sage: scilab.sage2scilab_matrix_string(A) # optional - scilab '[1, 2, 3; 4, 5, 6; 7, 8, 0]'
>>> from sage.all import * >>> M33 = MatrixSpace(QQ,Integer(3),Integer(3)) # optional - scilab >>> A = M33([Integer(1),Integer(2),Integer(3),Integer(4),Integer(5),Integer(6),Integer(7),Integer(8),Integer(0)]) # optional - scilab >>> scilab.sage2scilab_matrix_string(A) # optional - scilab '[1, 2, 3; 4, 5, 6; 7, 8, 0]'
M33 = MatrixSpace(QQ,3,3) # optional - scilab A = M33([1,2,3,4,5,6,7,8,0]) # optional - scilab scilab.sage2scilab_matrix_string(A) # optional - scilab
- set(var, value)[source]¶
Set the variable var to the given value.
EXAMPLES:
sage: scilab.set('a', 123) # optional - scilab sage: scilab.get('a') # optional - scilab '
>>> from sage.all import * >>> scilab.set('a', Integer(123)) # optional - scilab >>> scilab.get('a') # optional - scilab '
scilab.set('a', 123) # optional - scilab scilab.get('a') # optional - scilab123.’
- set_seed(seed=None)[source]¶
Set the seed for gp interpreter.
The seed should be an integer.
EXAMPLES:
sage: # optional - scilab sage: from sage.interfaces.scilab import Scilab sage: s = Scilab() sage: s.set_seed(1) 1 sage: [s.rand() for i in range(5)] [ 0.6040239, 0.0079647, 0.6643966, 0.9832111, 0.5321420]
>>> from sage.all import * >>> # optional - scilab >>> from sage.interfaces.scilab import Scilab >>> s = Scilab() >>> s.set_seed(Integer(1)) 1 >>> [s.rand() for i in range(Integer(5))] [ <BLANKLINE> 0.6040239, <BLANKLINE> 0.0079647, <BLANKLINE> 0.6643966, <BLANKLINE> 0.9832111, <BLANKLINE> 0.5321420]
# optional - scilab from sage.interfaces.scilab import Scilab s = Scilab() s.set_seed(1) [s.rand() for i in range(5)]
- version()[source]¶
Return the version of the Scilab software used.
EXAMPLES:
sage: scilab.version() # optional - scilab 'scilab-...'
>>> from sage.all import * >>> scilab.version() # optional - scilab 'scilab-...'
scilab.version() # optional - scilab
- whos(name=None, typ=None)[source]¶
Return information about current objects. Arguments: nam: first characters of selected names typ: name of selected Scilab variable type
EXAMPLES:
sage: scilab.whos("core") # optional - scilab 'Name Type Size Bytes...' sage: scilab.whos(typ='function') # optional - scilab 'Name Type Size Bytes...'
>>> from sage.all import * >>> scilab.whos("core") # optional - scilab 'Name Type Size Bytes...' >>> scilab.whos(typ='function') # optional - scilab 'Name Type Size Bytes...'
scilab.whos("core") # optional - scilab scilab.whos(typ='function') # optional - scilab
- class sage.interfaces.scilab.ScilabElement(parent, value, is_name=False, name=None)[source]¶
Bases:
ExpectElement- set(i, j, x)[source]¶
Set the variable var to the given value.
EXAMPLES:
sage: scilab.set('c', 125) # optional - scilab sage: scilab.get('c') # optional - scilab '
>>> from sage.all import * >>> scilab.set('c', Integer(125)) # optional - scilab >>> scilab.get('c') # optional - scilab '
scilab.set('c', 125) # optional - scilab scilab.get('c') # optional - scilab125.’
- sage.interfaces.scilab.scilab_console()[source]¶
This requires that the optional Scilab program be installed and in your PATH, but no optional Sage packages need to be installed.
EXAMPLES:
sage: from sage.interfaces.scilab import scilab_console # optional - scilab sage: scilab_console() # optional - scilab; not tested ___________________________________________ scilab-5.0.3 Consortium Scilab (DIGITEO) Copyright (c) 1989-2008 (INRIA) Copyright (c) 1989-2007 (ENPC) ___________________________________________ Startup execution: loading initial environment -->2+3 ans = 5. -->quit
>>> from sage.all import * >>> from sage.interfaces.scilab import scilab_console # optional - scilab >>> scilab_console() # optional - scilab; not tested ___________________________________________ scilab-5.0.3 Consortium Scilab (DIGITEO) Copyright (c) 1989-2008 (INRIA) Copyright (c) 1989-2007 (ENPC) ___________________________________________ Startup execution: loading initial environment -->2+3 ans = 5. -->quit
from sage.interfaces.scilab import scilab_console # optional - scilab scilab_console() # optional - scilab; not tested
Typing quit exits the Scilab console and returns you to Sage. Scilab, like Sage, remembers its history from one session to another.
- sage.interfaces.scilab.scilab_version()[source]¶
Return the version of Scilab installed.
EXAMPLES:
sage: from sage.interfaces.scilab import scilab_version # optional - scilab sage: scilab_version() # optional - scilab 'scilab-...'
>>> from sage.all import * >>> from sage.interfaces.scilab import scilab_version # optional - scilab >>> scilab_version() # optional - scilab 'scilab-...'
from sage.interfaces.scilab import scilab_version # optional - scilab scilab_version() # optional - scilab