Teaching - RFIDEC


RFIDEC

Examen de milieu de semestre:

Voir la page de C. Gonzales:

http://webia.lip6.fr/~gonzales/teaching/rfidec/index.php

Examen de fin de semestre:

  • Droit aux notes de cours et aux slides
  • Le programme commence aux cours de P. Gallinari.
  • Les slides sont sur la page de P. Gallinari ainsi que l'exam corrigé de l'an dernier.

http://www-connex.lip6.fr/~gallinar/Enseignement/Enseignement.html

Retour vers le tutoriel complet

Debuggage

Dimensions, opérations matricielles et bugs usuels

Corriger les expressions suivantes (elles sont toutes défaillantes):

 a = rand(10,4); b = [1 2 3 4]; c = a*b;

Nous souhaitons construire une loi discrète dont les valeurs p(X=n) sont stockées dans le vecteur p. Nous proposons la stratégie suivante: tirer n valeurs aléatoires puis normaliser p de sorte que \sum_{i=1}^n p_i=1 .

 n=10;        p = rand(n,1);       p = p/mean(p);

Soit une loi discrète jointe dont les valeurs p(X=i, Y=j) sont stockées dans la matrice p. Nous souhaitons calculer les p(X=i) = \sum_{j} p(X=i,Y=j).

 pX = sum(p)

Soit une matrice A de dimensions (d1,d2) et un vecteur ligne B de dimension d2. Nous voulons multiplier chaque colonne j de A par la valeur B_j sans utiliser de boucles.

 C = A * B

Soit une matrice A quelconque, nous voulons la transformer de sorte que chaque ligne somme à 1:

 A = A ./ (ones(1, size(A,1))*sum(A,2))

Penser à utiliser les commandes who et whos pour visualiser les variables existantes et leurs dimensions.

Outils de debbugage de GNU Octave

La console est très utile pour le débuggage: elle donne accès à toutes les variables courantes. Cependant, dans les fonctions que vous développez, l'environnement est local et les bugs sont plus durs à identifier.

La fonction keyboard vous permet de stopper l'exécution du programme et d'avoir accès à l'environnement local de la fonction.

 function [...] = maFonction(args)
   ... 
   a=2;
   keyboard; % le programme s'arrête ici: on peut voir a mais pas b
   b=3;
   ...

Une alternative intéressante consiste à taper la commande

 debug_on_error(true)

qui active automatiquement le débuggeur en cas d'erreur.

Les commandes utiles lors du débuggage sont : dbcont (continuer l'exécution du programme) et quit. Il existe des dbstep mais il est en général plus intéressant de copier du code dans la console.

Application

Insérer la commande keyboard dans une fonction (choisie dans les exercices précédents) et vérifier que vous avez accès à l'environnement local.