Le langage Python est un langage généraliste, disposant de bibliothèques puissantes en calcul numérique (scipy, numpy et matplotlib) permettant de l'utiliser dans le cadre du calcul scientifique. Plusieurs interfaces graphiques (Spyder, Eric, etc) permettent de travailler dans un environnement Python. Spyder est plus particulièrement conçu pour le calcul scientifique.
Scilab est d'abord un logiciel, proposant une interface graphique de travail et un langage de programmation. Semblable au logiciel Matlab, le logiciel Scilab est dédié au calcul scientifique pour la recherche et l'industrie. Il est moins généraliste que Python, mais dispose d'un outil de modélisation graphique (Xcos) permettant de manipuler des modèles numériques complexes, ce qui manque à Python.
Le C et ses variantes est, de très loin, le langage le plus répandu en informatique. Il est néanmoins un peu plus rigide et complexe à manipuler pour l'apprentissage de la programmation (il n'est pas interactif par exemple).
Pour la programmation des micro-contrôleurs (utilisés en TP de SI), il est incontournable. C'est pourquoi le formulaire ci-dessous propose, pour un petit nombre de fonctionnalités indispensables pour la commande des systèmes embarqués, les expressions équivalentes en C.
Le formulaire tente de couvrir en une page l'essentiel des
commandes utiles dans le cadre du programme de CPGE. Chaque commande est
illustrée en une ligne, permettant de se remémorer rapidement la
syntaxe des fonctions dans chaque langage. Seules les commandes
présentant le symbole
sont raisonnablement à connaitre pour les concours.
Le symbole
redirige vers une page proposant plus d'explications et d'exemples pour certaines commandes lorsque c'est utile. Le symbole
renvoie vers une documentation officielle de la commande.
Les variables sont dans les 3 langages, systématiquement associées à un type (et donc un espace mémoire alloué). Néanmoins, le typage est "dynamique" en Python et Scilab, c'est-à-dire que le type peut changer en fonction des besoins du calcul, tandis qu'il est statique en C (le type est choisi avant l'initialisation de la variable et ne peut plus être modifié par la suite, ce qui s'avère beaucoup plus simple et efficace pour la gestion de la mémoire).
Nous passons sur les opérateurs classiques + - * / qui sont identiques dans les 3 langages (attention toutefois à la division de deux entiers qui est réalisée dans les entiers en C et en python 2.7, et dans R dans Scilab et en Python 3.3...). Il est nécessaire d'importer la bibliothèque math.h en C.
Description | Python | Scilab | C |
---|---|---|---|
![]() |
a**b
|
a^b
|
pow(a,b)
|
![]() |
a%b
|
modulo(a,b)
|
a%b
|
![]() |
a//b
|
floor(a/b)
|
a/b avec a et b entiers
|
![]() |
a == b
|
a == b
|
a == b
|
![]() |
a < b ; a <= b
|
a < b ; a <= b
|
a < b ; a <= b
|
![]() |
a > b ; a >= b
|
a > b ; a > =b
|
a>b ; a>=b
|
![]() |
a != b
|
a ~= b
|
a != b
|
![]() |
a and b
|
a & b
|
a && b
|
ET bitwise |
a & b
|
bitand(a,b)
|
a & b
|
![]() |
a or b
|
a | b
|
a || b
|
OU bitwise |
a | b
|
bitor(a,b)
|
a | b
|
![]() |
not a
|
~a
|
!a
|
NON bitwise |
~a
|
bitcmp(a,8)
|
~a
|
OU exclusif |
a ^ b
|
~(a == b)
|
!(a == b)
|
OU exclusif bitwise |
a ^ b
|
bitxor(a,b)
|
a ^ b
|
![]() |
a << 3 ; a >> 3
|
a*2^3 ; floor(a/2^3)
|
a << 3 ; a >> 3
|
![]() |
bin(a)
|
dec2bin(a)
|
|
Affichage d'un nombre en hexadécimal |
hex(a)
|
dec2hex(a)
|
|
Les fonctions mathématiques standards en python peuvent provenir de différents paquets. L'utilisation de l'option --pylab (automatiquement chargée sous Spyder) conduit à utiliser les fonctions des modules Numpy, Scipy et Matplotlib par défaut.
Le calcul en complexes est possible dans les langages Python et Scilab.
Description | Python | Scilab | C |
---|---|---|---|
imaginaire i |
1j
|
%i
|
|
Nombre complexes 3+4i |
3+4j
|
3+4*%i
|
|
Partie réelle de a |
a.real
|
real(a)
|
|
Partie imaginaire de a |
a.imag
|
imag(a)
|
|
Module |
abs(a)
|
abs(a)
|
|
Argument |
arctan2(a.imag,a.real)
|
atan(imag(a),real(a))
|
|
Conjugué de a |
a.conj()
|
conj(a)
|
|
Le calcul numérique s'appuie intensivement sur des tableaux de valeurs, soit pour représenter des signaux, soit pour représenter des vecteurs et des matrices. Les tableaux peuvent avoir une ou plusieurs dimensions
La syntaxe de Scilab est fortement orienté vers la manipulation de tableau. Elle est en ce sens très pratique et lisible.
Python propose quant à lui trois types possibles pour manipuler des données sous forme de tableaux : les listes (à une ou plusieurs dimensions), le type "array", et le type "matrix". Des conversions sont possibles entre ces types. Il est conseillé dans le cadre du calcul numérique (pour des raisons pratiques et d'efficacité des calculs) d'utiliser le type "array". C'est ce qui est considéré par la suite.
Attention, en Python et en C, les indices des tableaux commencent à 0 tandis qu'en Scilab, ils commencent à 1.
Description | Python | Scilab | C |
---|---|---|---|
![]() |
liste1 = [M,v]
|
![]() liste1 = list(M,v)
|
|
![]() |
liste1[i]
|
liste1(i)
|
|
Supprimer un élément |
del liste1[i]
|
L(i)=null()
|
|
Ce sont des listes un peu plus complexes en ce que chacun des éléments qui le compose est au moins composé de 2 membres, l'un étant la clé, l'autre la valeur.
En python, le dictionnaire est embrassé par des accolades { }.
Scilab propose aussi des structures indicées ( cell() ) qui ne seront pas développées ci-dessous (car plus ou moins équivalentes à une liste).
En C il faut utiliser la bibliothèque string.h.
Description | Python | Scilab | C |
---|---|---|---|
![]() |
mot="Python et Scilab"
|
mot="Python et Scilab"
|
mot="Python et Scilab"
|
![]() |
len(mot)
|
length(mot)
|
strlen(mot)
|
![]() |
mot[2:7]
|
part(mot,[1,2,11:16])
|
|
![]() |
mot="python" + "/" + "Scilab"
|
mot="python" + "/" + "Scilab"
|
strcat(mot1,mot2)
|
Replacer une portion de chaîne |
mot.replace("Scilab","C")
|
strsubst(mot,"Scilab","C")
|
|
Découper une chaîne de caractères |
mot.split(" ")
|
strsplit(mot," ")
|
|
Supprimer des caractères de retour à la ligne |
mot.rstrip("\n\r")
|
|
|
Description | Python | Scilab | C |
---|---|---|---|
![]() |
def nomdelafonction(paramètres):
bloc d'instructions
return resultat
|
function resultat=nomdelafonction(paramètres)
bloc d'instructions
endfunction
|
??
|
En Python, il est parfois nécessaire d'exécuter la commande show() pour afficher le graphique après l'appel à la commande plot().
La lecture et l'écriture d'image sous python est relativement simple par la bibliothèque scipy.misc, chargé automatiquement par l'option --pylab ou par spyder. Les formats supportés sont jpg, bmp, ????. Des bibliothèques plus élaborées existent (PIL par exemple) mais ne sont pas abordées ici.
La lecture et l'écriture d'image sous Scilab nécessite l'installation par Atoms du module SIVP (image and vidéo processing). La plupart des formats sont supportés.
Les images sont ensuite manipulées dans le programme sous forme de tableau.