Transcript SigmaScript
SigmaScript
Environnement de développement Lua
Copyright© 2010-2014 Dr. Sidi HAMADY
http://www.logimath.com
SigmaScript
Table des matières
1.
Aide ............................................................................................................................................................... 3
2.1 Guide .......................................................................................................................................................... 3
2.2 Fonctions spécifiques à Android................................................................................................................. 4
2.3 fonctions mathématiques .......................................................................................................................... 4
2.4 Extension de la bibiliothèque mathématique ............................................................................................ 5
2.5 Fonctions temporelles ................................................................................................................................ 6
2.6 Statistiques ................................................................................................................................................. 7
2.7 Manipulation de fichiers............................................................................................................................. 7
2.8 Lua io console functions ............................................................................................................................. 7
2.9 Parser d'expressions mathématiques ........................................................................................................ 8
2.10 Tracé de courbes XY: ................................................................................................................................ 9
2.11 Analyse de données................................................................................................................................ 10
2.
Changements .............................................................................................................................................. 13
3.
Mots-clés .................................................................................................................................................... 14
4.
Specifications .............................................................................................................................................. 14
5.
Liens ............................................................................................................................................................ 15
6.
Support ....................................................................................................................................................... 15
7.
Copyright .................................................................................................................................................... 15
© Dr. Sidi HAMADY
http://www.logimath.com
2
SigmaScript
SigmaScript est un environnement de programmation utilisant le langage Lua, avec le moteur de script
intégré et un éditeur de code, des exemples, une sortie standard, la coloration syntaxique, …
1.
AIDE
SigmaScript comprend des exemples et des extraits de code (menu/Exemples; menu/Code ou sur le
bouton dans la barre d’outils, ou avec un long clic sur la zone d’édition).
Pour apprendre le langage Lua, vous pouvez visiter le site officiel de Lua : http://www.lua.org
D'excellents tutoriels, couvrant tous les aspects du langage Lua, peuvent être consultés ici (en anglais) :
http://lua-users.org/wiki/TutorialDirectory
2.1 GUIDE
Vous pouvez ainsi insérer rapidement des morceaux de code (for, if, function, …) dans votre script.
Si vous voulez changer la taille de la police de caractères, sélectionner menu/Préférences.
Vous pouvez créer un nouveau script ou enregistrer le script en cours vers un autre emplacement en
sélectionnant le menu.
Si vous souhaitez exécuter automatiquement un script au démarrage (AutoRun), sélectionner
menu/Préférences/AutoRun et choisir votre script.
Pour Android : Si vous cliquez longuement sur le bouton AutoRun dans menu/Préférences, la fonction AutoRun sera désactivée.
Vous pouvez activer ou désactiver le clavier virtuel en sélectionnant le menu Clavier.
Vous pouvez afficher du texte sur la zone de sortie en utilisant la fonction Lua print ou la fonction
io.write.
Pour effacer la zone de sortie, utilisez la fonction cls ou appuyez longuement sur la zone de sortie et
sélectionnez Effacer.
Vous pouvez afficher ou cacher la zone de sortie en sélectionnant le menu Cacher/Afficher la fenêtre de
sortie.
Pour Android : Vous pouvez aussi régler la hauteur de la fenêtre de sortie en sélectionnant S (petite), M (moyenne) ou L (grande)
dans le menu Préférences (Sortie).
Pour Android : SigmaScript a deux thèmes: clair et foncé, et permet la coloration syntaxique. Vous pouvez choisir le thème et
activer ou désactiver la coloration syntaxique dans menu/Préférences.
Exemple :
Ecrire le script suivant dans l'éditeur...
-- Lua first script
cls()
a = math.cos(math.pi/4)
print("a = ", a)
... et cliquer sur le bouton Exéc. (ou sélectionner menu/Exécuter)
© Dr. Sidi HAMADY
http://www.logimath.com
3
SigmaScript
Le temps d'exécution (en millisecondes) pourra être affiché. Pour activer ou désactiver cette
fonctionnalité, cliquer longuement sur la zone de sortie et sélectionner ‘Cacher la durée d'exécution’, ou
sélectionner menu/Préférences, ou appuyer longuement sur le bouton 'Exéc.'.
2.2 FONCTIONS SPECIFIQUES A ANDROID
Des fonctions spécifiques à Android ont été ajoutées à SigmaScript (namespace droid) :
droid.log(msg)
-- écrire un message sur le log d'Android
droid.toast(msg)
-- afficher un message de notification
droid.alert(ttl, msg)
-- afficher une boîte de dialogue, avec
-- message et titre
droid.disp(ttl, txt)
-- afficher un texte, avec son titre, dans
-- une fenêtre, pour les textes longs
droid.vibrate(ms)
-- vibrer pendant ms millisecondes
droid.notify(msg, snd)
-- créer une notification
-- affichant un message et jouant un son
Dans les futures versions de SigmaScript, d'autres fonctions spécifiques à Android seront ajoutées.
Exemple:
-- Droid
ttl = "SigmaScript"
msg = "Hello world!"
droid.alert(ttl, msg)
droid.vibrate(1000)
droid.notify("Hello world!","alarm")
2.3 FONCTIONS MATHEMATIQUES
Avec SigmaScript, les fonctions mathématiques de Lua sont mappées en global, ce qui signifie, par
exemple, que vous pouvez utiliser indifféremment cos ou math.cos. Exemple:
cls()
a = cos(pi/4)
print("result = ", a)
Ci-après la liste des fonctions mathématiques de Lua :
© Dr. Sidi HAMADY
math.abs
math.acos
math.asin
math.atan
math.atan2
math.ceil
math.cos
math.cosh
math.deg
math.exp
math.floor
math.fmod
math.frexp
math.huge
math.ldexp
math.log
math.log10
math.max
http://www.logimath.com
4
SigmaScript
math.min
math.modf
math.pi
math.pow
math.rad
math.random
math.randomseed
math.sin
math.sinh
math.sqrt
math.tanh
math.tan
Et la liste des fonctions mathématiques globales de SigmaScript :
abs
acos
asin
atan
atan2 ceil
cos
cosh
deg
exp
floor
fmod
frexp
huge
ldexp
log
log10 max
min
modf
pi
pow
rad
random
randomseed
sin
sinh
sqrt
tanh
tan
NB : Lua désigne le logarithme népérien par log et le logarithme décimal par log10, comme en langage C.
La calculatrice SigmaCalculator désigne quant à elle le logarithme népérien par ln et le logarithme
décimal par log.
2.4 EXTENSION DE LA BIBILIOTHEQUE MATHEMATIQUE
Des fonctions mathématiques ont été ajoutées à SigmaScript (namespace lmath), incluant et étendant
la bibliothèque mathématique de Lua.
Liste des fonctions et constantes de lmath :
Fonctions :
© Dr. Sidi HAMADY
lmath.exp2(x)
-- 2^x
lmath.logb(x)
-- exposant de x
lmath.cbrt(x)
-- racine cubique
lmath.hypot(x,y)
-- √(x²+y²)
lmath.erf(x)
-- fonction erreur
lmath.erfc(x)
-- fonction erreur complémentaire
lmath.lgamma(x)
-- ln(gamma(x))
lmath.tgamma(x)
-- gamma(x)
lmath.trunc(x)
-- plus proche entier
lmath.round(x)
-- plus proche entier, arrondi
lmath.isinf(x)
-- infini ?
lmath.isnan(x)
-- pas un nombre ?
http://www.logimath.com
5
SigmaScript
lmath.isnormal(x)
-- nombre normal ?
lmath.asinh(x)
lmath.acosh(x)
lmath.atanh(x)
lmath.gauss(x,b,c)
-- G(x) = exp(-(x - b)² / 2c²)
lmath.lorentz(x,b,c)
-- L(x) = ((1/pi)*c / ((x - b)² + c²))
lmath.fact(n)
-- factorielle de n
lmath.gcd(a,b)
-- plus grand commun diviseur de a et b
lmath.lcm(a,b)
-- plus petit commun multiple de a et b
lmath.comb(n,k)
-- le nombre de k-combinaisons de n
lmath.perm(n,k)
-- le nombre de k-permutations de n
Constantes :
Constantes universelles en unités internationales (SI)
lmath.q
-- Charge de l'électron (in C)
lmath.me
-- Masse de l'électron (kg)
lmath.kb
-- Constante de Boltzmann (J/K)
lmath.h
-- Constant de Planck (Js)
lmath.c
-- Vitesse de la lumière (m/s)
lmath.na
-- Constante d'Avogadro (1/mole)
2.5 FONCTIONS TEMPORELLES
tic()
-- démarre le timer
toc()
-- retourne le nombre de millisecondes écoulées
-- depuis le dernier appel à tic()
sleep(n)
-- faire une pause dans l'exécution du script pour
-- une durée de n millisecondes.
Exemple:
-- Timer
tic()
sleep(1000)
dt = toc()
print("Durée = ", dt, " ms")
© Dr. Sidi HAMADY
http://www.logimath.com
6
SigmaScript
2.6 STATISTIQUES
Le namespace stats inclut les fonctions permettant de calculer les paramètres statistiques d'une liste de
valeurs : Minimum (stats.min(t)), Maximum (stats.max(t)), Somme (stats.sum(t)), Moyenne
(stats.mean(t)), Médiane (stats.median(t)), Variance (stats.var(t)), Ecart-type (stats.dev(t)), Coefficient
de variation (stats.coeff(t)), RMS (stats.rms(t)), Facteur de Skewness (stats.skew(t)) et Kurtosis
(stats.kurt(t)).
Les formules utilisées sont les suivantes :
Moyenne
Variance
Skewness
Kurtosis
Les fonctions statistiques traitent un maximum de 2048 éléments.
Exemple:
-- Stats
cls()
t = {1,1,2,3,4,4,5}
m = stats.mean(t)
print(m)
2.7 MANIPULATION DE FICHIERS
Les fonctions Lua de manipulation des fichiers sont disponibles dans SigmaScript (open, read, write,
close, etc.).
Example:
-- IO script
cls()
local f = io.open("/mnt/sdcard/SigmaScript/test.txt", "r")
local t = f:read("*all")
f:close()
2.8 LUA IO CONSOLE FUNCTIONS
La fonction d'entrée console io.read est implémentée sans limitations.
© Dr. Sidi HAMADY
http://www.logimath.com
7
SigmaScript
Exemple:
-- IO read
cls()
io.write("Enter your name: ")
name = io.read("*a")
io.write("Name: ", name)
2.9 PARSER D'EXPRESSIONS MATHEMATIQUES
SigmaScript inclut un module parser permettant d'évaluer les expressions mathématiques :
parser.init()
-- initialise le parser.
parser.set(name, value)
-- crée une variable et lui affecte une valeur.
parser.get(name)
-- retourne la valeur d'une variable.
parser.eval(expr)
-- évalue une expression mathématique.
parser.evalf(func, x)
-- évalue une fonction mathématique en x.
parser.solve(eq, a, b)
-- résoud une équation dans l'intervalle [a,b].
Le parser supporte les fonctions mathématiques suivantes :
© Dr. Sidi HAMADY
Exp(x)
-- exponentielle
Ln(x)
-- logarithme naturel (népérien)
Log(x)
-- logarithme décimal
Log2(x)
-- logarithme en base 2
Sin(x)
-- sinus
Cos(x)
-- cosinus
Tan(x)
-- tangente
Asin(x)
-- arc sinus
Acos(x)
-- arc cosinus
Atan(x)
-- arc tangente
Sinh(x)
-- sinus hyperbolique
Cosh(x)
-- cosinus hyperbolique
Tanh(x)
-- tangente hyperbolique
Abs(x)
-- valeur absolue
Sqrt(x)
-- racine carrée
Cbrt(x)
-- racine cubique
Ceil(x)
-- le plus petit entier supérieur à x
Floor(x)
-- partie entière de x
Rand()
-- nombre aléatoire entre 0 et 1
Sign(x)
-- signe de x (-1 si x<0, +1 si x>0 et 0 si x=0)
Erf(x)
-- fonction erreur
http://www.logimath.com
8
SigmaScript
Fact(x)
-- factorielle de x
Le parser supporte aussi les constantes mathématiques suivantes :
Pi
-- π
e
-- base des logarithmes naturels (2.71828…)
Constantes universelles en unités SI
q
-- charge de l'électron (en C)
me
-- masse de l'électron (kg)
mp
-- masse du proton (kg)
kB
-- constante de Boltzmann (J/K)
h
-- constante de Planck (Js)
c
-- vitesse de la lumière dans le vide (m/s)
ε0
-- permittivité diélectrique (F/m)
µ0
-- perméabilité magnétique (N/A²)
NA
-- constante d'Avogadro (1/mole)
G
-- constante gravitationnelle (m3/kg/s²)
Ri
-- constante de Rydberg (1/m)
F
-- constante de Faraday (C/m)
Rm
-- constante des gaz parfaits (J/mole/K)
Exemple d'utilisation du parser d'expressions mathématiques :
-- Parser
cls()
parser.init()
parser.set("x", 1)
parser.set("a", 2)
y = parser.eval("a*x + sin(x / a) + 2")
print("y = " .. y)
2.10 TRACE DE COURBES XY:
Le module plot comprend des fonctions permettant de créer et de manipuler des tracés de données XY:
© Dr. Sidi HAMADY
plot.create(title)
-- crée un tracé avec un titre optionel.
plot.add(x, y, curve)
-- ajoute une courbe au tracé.
plot.rem(curve)
-- supprime une courbe.
http://www.logimath.com
9
SigmaScript
plot.set(prop, val, curve)
-- régler les propriétés d’une courbe
-- (style, taille, etc.). prop peut être
-- égale à "size" (pour la taille de
-- ligne/symbole), "tsize" (pour la taille du
-- texte) ou "style" (pour le style de la
-- courbe active: "o" pour symbole et "-"
-- pour ligne)
plot.close()
-- ferme le tracé.
Exemple:
-- Plot
cls()
x = {1,2,3,4,5}
y1 = {1,2,3,4,5}
y2 = {2,3,4,5,6}
plot.create()
plot.add(x, y1, "Curve1")
plot.add(x, y2, "Curve2")
plot.set("tsize", 2)
plot.set("size", 2, "Curve1")
plot.set("style", "-o", "Curve1")
plot.set("size", 2, "Curve2")
plot.set("style", "-o", "Curve2")
2.11 ANALYSE DE DONNEES
Le module de data permet d'analyser des données avec un fitter des données XY avec modèle défini par
l'utilisateur, calcul de FFT et d'autocorrélation :
pars, chi, iters, str = data.fit(func, tx, ty, fpar, ipar, tol, iters)
lance l'algorithme de fit avec :
func le modèle Lua défini par l'utilisateur comme suit (à remplacer par votre propre modèle) :
function fitfun(fpar, dpar, x)
dpar[1] = 1
dpar[2] = x
y = fpar[1] + fpar[2]*x
return y
end
© Dr. Sidi HAMADY
http://www.logimath.com
10
SigmaScript
fpar
-- table des paramètres de fit.
dpar
-- table des dérivées partielles.
x
-- variable indépendante.
tx
-- table avec les données X.
ty
-- table avec les données Y.
fpar
-- table des paramètres de fit.
ipar
-- table avec, pour chaque paramètre, une valeur de 1 si le
-- paramètre est variable, ou 0 s'il est fixe.
-- Ce paramètre ipar est optionnel.
tol
-- tolérance relative voulue. Ce paramètre tol est optionnel.
iters
-- nombre maximum d'itérations pour le fit.
-- Ce paramètre iters est optionnel.
La fonction data.fit retourne quatre paramètres : table des paramètres de fit obtenus pars ; le nombre
chi ; le nombre d'itérations effectuées iters et un message str du fitter.
Exemple d'utilisation du Fitter :
-- Linear Fit
cls()
function func(fpar, dpar, x)
dpar[1] = 1
dpar[2] = x
y = fpar[1] + fpar[2] * x
return y
end
tx = {1, 2, 3, 4, 5}
ty = {2.1, 2.8, 4.15, 5.1, 5.87}
fpar = {3,3}
ipar = {1,1}
pars, chi, iters, str = data.fit("func",tx,ty,fpar,ipar,1e-3,100)
print("pars = " .. pars[1] .. " " .. pars[2])
print(str)
fft, str = data.fft(data, idir) calcul de la FFT avec :
© Dr. Sidi HAMADY
data
-- table de données
idir
-- 1 pour la FFT directe et 0 pour l'inverse
http://www.logimath.com
11
SigmaScript
La fonction data.fft retourne deux paramètres : une table fft pour la FFT et un message str du
calculateur
NB: L'amplitude de la FFT est normalisée (divisée) par le nombre de points.
Exemple d'utilisation de la fonction data.fft :
-- FFT
cls()
Fo = 50
-- signal frequency (Hz)
To = 1/Fo
-- signal period (seconds)
A = 5
-- signal amplitude
An = 1
-- noise amplitude
N = 256
-- number of points (power of 2)
Ts = 4 * To/N
-- sampling period
Fs = 1/Ts
-- sampling frequency
f = {}
t = {}
y = {}
for i = 1, N, 1 do
f[i] = (i - 1) * Fs / (N - 1)
-- frequency
t[i] = (i - 1) * Ts
-- time
y[i] = A*cos(2*pi*Fo*t[i]) + An*lmath.random()
end
tfd, str = data.fft(y, 1)
print(str)
p = plot.create()
plot.add(f, tfd, "FFT")
ac, str = data.acorr(data) calcul de l'autocorrélation avec :
data
-- table de données
La fonction data.fft retourne deux paramètres : une table ac pour l'autocorrélation et un message str du
calculateur.
© Dr. Sidi HAMADY
http://www.logimath.com
12
SigmaScript
2.
CHANGEMENTS
Version 4.0
Nouveau module parser d’expressions mathématiques (namespace parser).
Nouveau module de tracé de données (namespace plot).
Nouveau module d’analyse de données (namespace data).
Nouvelles fonctions Android (droid.vibrate et droid.notify).
Manuel utilisateur en PDF.
Version 3.2
Changement de l’interface utilisateur pour les tablettes et autres écrans larges.
Nouvelles options incluant la possibilité de régler la hauteur de la zone de sortie.
Nouvelles fonctions sur les entiers : factorielle (lmath.fact(n)), PGCD (lmath.gcd(a,b)), PPCM
(lmath.lcm(n)), Combinaisons (lmath.comb(n,k)), Permutations (lmath.perm(n,k)).
Moteur de script : le repertoire courant est automatiquement ajouté au path de Lua.
Nouveaux exemples : module pour Lua 5.2.
Version 3.0
Editeur : ajout de nouvelles options, choix du thème graphique, coloration syntaxique.
Intégration d’un explorateur de fichiers.
Implémentation totale de la fonction io.read, mise à jour du moteur de script, ajout de fonctions
timer (tic, toc et sleep).
Support des mobiles Android basés sur les processeurs Intel.
Installation possible sur la carte mémoire externe.
Version 2.2
Nouveau : Fonctions de statistiques descriptives (namespace stats).
Changements mineurs de l’interface utilisateur et optimisation du moteur de script.
Uniformisation des versions Windows, Linux et Android : un script développé sur une plateforme
tournera sans modification sur une autre.
Les versions Windows et Linux sont disponibles sur le site de Logimath (www.logimath.com)
Version 2.1
Nouveau : ajout de quelques fonctions Android (namespace droid).
Nouveau : implémentation partielle de la fonction io.read (entrée console).
Nouveau : mode interactif : permet d’utiliser les fonctions Android et d’interagir avec
l’utilisateur. Le mode arrière-plan peut être utilisé pour les calculs longs, sans interaction avec
l’utilisateur.
© Dr. Sidi HAMADY
http://www.logimath.com
13
SigmaScript
Editeur : numérotation des lignes, soulignement de la source d’erreur Lua,…
Nouveau : bibliothèque de fonctions mathématiques (namespace lmath), incluant et étendant la
bibliothèque mathématique de Lua.
Toutes les données (script en cours, état de l’application, …) sont maintenant sauvegardées de
façon permanente et automatiquement restaurées au redémarrage de SigmaScript.
Mise à jour du moteur de script.
Version 2.0
Ajout automatique du répertoire de SigmaScript au path de Lua.
Fonctions mathématiques de Lua mappées en global (utiliser indifféremment, par exemple, cos
ou math.cos).
Mise à jour du moteur de script.
Version en français.
Version 1.0
Première version.
3.
MOTS-CLES
Lua, SigmaScript, Script, Scripting, Scripting language, Scripting engine, Programming, Development,
Scripting for Android, Editor, Interpreter, Logimath, Sidi, Ould Saad Hamady, Algorithm, Calculation,
Programmation, Développement, Algorithme, Calcul, …
4.
SPECIFICATIONS
SigmaScript tourne sur :
(i)
PC avec Windows™ XP, Vista, Windows 7/8.
(ii)
Smartphone ou Tablette avec Android 2.2 or supérieure.
(iii)
PC avec une distribution Linux et GTK.
INSTALLATION
Sur Windows™ (XP/Vista/7/8): cliquer sur le fichier d’installation (sigmascript_setup.exe) et suivre les
instructions.
Sur Android : installer avec Google Play.
Sur Linux: télécharger sur le site Logimath (http://www.logimath.com), extraire avec tar le fichier tgz,
et lancer l’exécutable SigmaScript.
© Dr. Sidi HAMADY
http://www.logimath.com
14
SigmaScript
5.
LIENS
Pour
télécharger
l’aide
ou
découvrir
les
nouveautés,
visitez
le
site
Logimath
:
http://www.logimath.com/
Pour lire la documentation du language Lua : http://www.lua.org/
6.
SUPPORT
Pour toute demande, rapport de bogue, suggestion, envoyer un e-mail à [email protected].
7.
COPYRIGHT
SigmaScript:
Copyright© 2010-2014 Dr. Sidi HAMADY
http://www.logimath.fr
[email protected]
SigmaScript est protégé par les lois et traités relatifs aux copyrights.
En aucune circonstance Dr. Sidi HAMADY ou ses fournisseurs ou revendeurs ne pourront être
rendus responsables à votre égard ou à celui d'une autre personne pour tout dommage indirect,
spécial, accidentel, ou consécutif d'un quelconque caractère, incluant sans limitation, les
dommages : de perte de contrôle, d'arrêt de fonctionnement, de panne ou de mauvais
fonctionnement d'ordinateur, ou tout autre dommage ou perte commerciale.
Langage de programmation Lua :
Copyright © 1994–2013 Lua.org, PUC-Rio.
http://www.lua.org/license.html
© Dr. Sidi HAMADY
http://www.logimath.com
15