Nouveaux typos

dans la doc R2010b de imread on trouve un exemple utilisant idx2rgb au lieu de ind2rgb.

imread

Et un autre typo en 10b , au lieu de trouver le mot marker on trouve à plusieurs endroit le mot maker.
La commande suivante :

>>docsearch (‘maker’)

vous ouvrira 3 pages sur MATLAB avec cette coquille.

Évidemment j’ai déjà remonté ces erreurs au support TMW.

Halloween = Noël

ce qui donne en image :

25 décembre = 31 octobre

J’avoue je n’ai pas compris de suite la subtilité de cette blague de Geek! Comment ça Halloween c’est égal à noël? Comment ça 25 DEC = 31 OCT ?

En fait il faut comprendre que le mot DEC n’est pas pour Décembre mais pour Décimal et que OCT est pour Octal et non Octobre.

Allons voir ça dans MATLAB. Pour convertir le nombre 25 en octal , je vais utiliser le %o , qui est le format à utiliser pour la base 8 (octal).

>> sprintf('%o',25)

et bingo ça retourne bien le nombre 31 .

Le challenge de funtool

je suis sûr que beaucoup de matlabeurs ne connaissent pas sa signification.

Il y a quelques années de ça quand je travaillais avec la Symbolic Math Toolbox, j’avais découvert la calculatrice graphique qui se lance en tapant la commande funtool. Bon de là à dire que c’est un outil fun comme le suppose le nom … faut vraiment être un geek MATLAB !

Donc j’arrête le suspense, voici la fameuse calculatrice interactive graphique funtool de MATLAB:

funtool

En résumé: f, g et a sont de type syms (variables symboliques), et x de type string (chaine de caractères).
La première ligne de boutons sert à faire des calculs sur f uniquement comme l’intégrale , l’inverse…alors que la troisième ligne opère sur les fonctions symboliques f et g en même temps. Pour en savoir plus, voici le lien vers la doc de funtool .

Ce qui nous intéresse ici, c’est la dernière ligne et notamment le bouton Demo, qui comme son nom l’indique lance une démo de la calculatrice.

C’est dans le help de funtool.m qu’on va trouver le challenge du chef scientifique à TMW , Cleve moler :

Cleve Moler

Pour ceux qui ne connaissant pas Cleve Barry Moler , je vous invite à lire sa biographie sur le site de TMW: Founders

Donc comme je disais plus haut , le challenge de Cleve est dans le help de funtool, donc quand on tape dans le Command Window de MATLAB :
>>help funtool on peut lire vers la fin:

% The first three buttons in the fourth row manage a list of functions.
% The Insert button places the current active function in the list.
% The Cycle button rotates the function list.
% The Delete button removes the active function from the list.
% The list of functions is named fxlist. A default fxlist containing
% several interesting functions is provided.
%
% The Reset button sets f, g, x, a and fxlist to their initial values.
% The Help button prints this help text.
%
% The Demo button poses the following challenge: Can you generate the
% function sin(x) without touching the keyboard, using just the mouse?
% The demo does it with a reset and then nine clicks. If you can do
% it with fewer clicks, please send e-mail to moler@mathworks.com.

%
% The Close button closes all three windows.
%
% See also EZPLOT.

Pour être franc je n’ai jamais relevé le défi, j’ai juste vu en effet qu’appuyer sur le bouton Demo simulait les 9 clics souris. Apparemment plusieurs y sont arrivés , c’est ce qu’on peut lire en tout cas dans ce post de 2005:
Funtool’s Challange is no more a Challange (Obaid Mushtaq) sur le MATLAB central .
On peut d’ailleurs lire que Cleve affirme que le record c’est 5 clics de souris pour arriver à calculer sin(x) ! Nouveau challenge pour les MATLAB geeks?!!

Voici pour infos , le callback effectué par le bouton Demo:

%%%%% Callback for Demo button. %%%%%

case 'Demo'
 
   % "B" is the vector of button handles in the control panel.
   % "prog" is a "program" consisting of button codes.
 
   prog = {'Reset','f/a','int f','f + g','1/f', ...
           'int f','finv','int f','df/dx','num f'};
   B = findobj(gcf,'Style','pushbutton');  
   for k = 1: length(prog)
      currB = findobj(B,'String',prog{k});
      set(currB,'BackgroundColor','white');
      eval(get(currB,'Callback'));
      pause(1)
      set(currB,'BackgroundColor','default');
   end

%%%%%%%%%%%%%%%%%%%%%%%%%%%

Donc comme on peut le lire dans le callback ,au début ça émule le bouton Reset qui remet la calculatrice à son état initial , c’est à dire:
f(x) = x et g(x) = 1 sur le domaine [-2*pi, 2*pi] puis ensuite sont successivement évalués 8 opérations .

Note : Vu que le challenge est dans le help, c’est à dire dans les commentaires de la fonction funtool , cet article est publié dans la catégorie « MATLAB Documentation » .

N’hésitez pas non plus à télécharger une version gratuite de 15 jours de la Symbolic Math Toolbox pour relever le défi! Pour cela en bas à droite de la page http://www.mathworks.com/products/ vous avez un lien Product Trials

Have fun with funtool!!!

un ovaire dans MATLAB?

alors là je seras étonné que quelqu’un ait remarqué cette fonctionnalité dans MATLAB.

Quelques indices:

  • elle est dans le Command Window
  • j’ai mis cette fonctionnalité dans la catégorie Best-of des commandes MATLAB inutiles
  • elle signifie OVeRwrite mode
  • elle est disponible depuis la R14SP2 (MATLAB 7.0.4)

OVR qui veut donc dire Overwrite mode indique aux matlabiens , matlabeurs qu’ils ont appuyé sur la touche Inser de leur clavier et donc qu’ils sont en mode remplacement …wow super ça change la vie ;)

Dans la doc matlabienne ça donne ça:

Overwrite Mode Now Supported

The Command Window now supports overwrite mode. Press the Insert key to enter text in overwrite mode. Press the Insert key again to return to entering text in insert mode. View the current state at the far right end of the status bar of the Command Window when it is undocked, or in the desktop when the Command Window is docked and has focus. In insert mode, OVR in the status bar is gray and the cursor has a wide block shape.

et en image ça donne ça:

Mode normal, OVR est grisé:

ovr gray

J’appuie sur la touche Inser de mon clavier, OVR est dégrisé !

overwrite mode ovr

Savoir qu’on est en mode remplacement grâce à l’OVR ça change la life non ? ;)
Et dire qu’il a fallu attendre la R14SP2 !!

MATLAB sur Wii , Playstation, Iphone, Ipad …

  • MATLAB sur la Nintendo Wii

Plusieurs projets existent déjà:

Le projet FWIINE (prononcez fouine comme l’animal )
fwiine
qui signifie Functions for WIImote ‘N for Engineering propose pour les windowsiens de MATLABER avec une Wii !

Voilà ce qu’on peut lire sur ce projet :

WIIne a été conçu pour toute personne curieuse et désireuse de réaliser facilement et librement une étude de faisabilité (ou de mettre à l’épreuve une idée) à partir des capteurs de la WII REMOTE et des applications scientifiques SCILAB et MATLAB.

Et pour les Saint Thomas qui ne croient que ce qu’ils voient, voilà les vidéos

WiiLAB utilisé dans un but éducatif également , pétard je crois que je fais commander une Nintendo et une Nunchuck à noël!! Et franchement il est trop top leur logo :

wiilab

GlovePIE (Glove Programmable Input Emulator) , un émulateur qui fait le lien entre MATLAB et la Wii , est utilisé par un centre australien en Antarctique. Il leur permet avec les manettes Wii de faire tourner, zoomer des figures MATLAB, wow!

Voici ce qu’on peut lire sur leur site :

We used the GlovePIE emulator as the bridge between the Wiimote and Matlab. Actions on the Wiimote are converted into mouse actions, which trigger the zoom, pan, or rotate actions in Matlab.

La puissance de clearvars

Pour effacer des variables, tout le monde connait la commande clear , mais quand on veut faire l’inverse c’est à dire ne garder que quelques variables , utiliser clear devient lourd. clear est généralement utilisé pour éviter les problèmes de mémoire avec MATLAB, les fameux OOM : Out of Memory.
Par exemple imaginez un code où vous avez 100 variables et que vous voulez en garder que 2 , vous n’allez pas quand même pas utiliser clear suivi des 98 variables à effacer ! si? ah bon bon beh vous n’êtes pas (encore) un MATLAB Geek alors!!!

  • keep

Pendant des années la référence c’était d’utiliser un fichier sur le FEX : keep.m
A noter ce code MATLAB a été fait dans les années 90 tout de même et
créé avec MATLAB 5.2 (R10) !!!
En 2004 keep.m a aussi été sélectionné comme the POTW (Pick Of The Week) : clear all but specified variables

keep

Pour ne garder que par exemple la variable nommée titi dans ton code , il fallait taper:

>>keep titi

  • clear + regexp

Si tu maitrises les expressions régulières sous MATLAB , donc que tu
utilises la puissance de regexp, tu es un MATLAB Geek !
et donc tu peux faire la commande suivante :

>>clear -regexp ^(?!titi$).

  • clearvars

Et si tu as la chance d’avoir une version MATLAB égale ou supérieure à la R2008a, alors t’embête plus et utilise clearvars avec le flag -except !

>>clearvars -except titi

  • demo

Voici un script qui illustre la méthode ancienne et officielle avec clear et l’autre plus récente avec clearvars. On va pour cela remplir le workspace avec des variables générées avec genvarname . genvarname est très utile pour comme son nom l’indique générer des noms de variables. J’ai ici repris l’exemple 4 de la doc de genvarname et comme certains le remarqueront ça utilise le fameux eval , et le MATLAB geek connait bien l’adage : eval is evil … ça fera sûrement l’objet d’un billet sur ce blog!

clear all
for k = 1:5
    t = clock;
    pause(uint8(rand * 10));
    v = genvarname('time_elapsed', who);
    eval([v ' = etime(clock,t)'])
end

clear method

La commande whos nous a donc retourné 8 variables dans le workspace.
La 1ère méthode avec clear pour ne garder que time_elapsed3, équivalait à ajouter les 7 autres noms des variables à clear

>>clear k t v time_elapsed time_elapsed1 time_elapsed2 time_elapsed4

Cette méthode demande déjà de connaitre tous les noms des autres variables présentes dans le workspace. C’est bien pour ça que clearvars est vraiment pratique lorsqu’on le conjugue avec l’option , le flag -except.
On obtiendra le même résultat en tapant:

>> clearvars -except time_elapsed3

Pour info, la note technique sur le site du support de TMW à ce sujet:
How do I load all variables from a MATLAB file except a few specific variables?

Documentation Center

Un compte MathWorks (MathWorks Account) est requis pour accéder au New Documentation Center (beta). J’imagine que l’idée de TMW est de monitorer le nombre de visites sur cette béta.

L’adresse est simple à retenir , pour y accéder :

http://www.mathworks.com/help/matlab/

J’adore le nouveau design :

documentation center

Lorsqu’on passe la souris sur un chapitre , un tooltip « Expand/Collapse » nous avertit qu’on peut développer la liste pour voir les différentes sections:

expande menus

Si on utilise le moteur de recherche et qu’on tape clearvars par exemple , on arrive sur cette page qui suggère 4 liens :

clearvars search

Un point fort de ce documentation Center c’est que les résultats affichés peuvent être filtrés par catégorie ou type. A gauche de la page il y a deux panels « Refine by category » et « Refine by Type » . Par exemple cliquer sur la seconde catégorie « Programming and Data Types » n’affichera plus que le troisième lien Variables and Functions in Memory .

Si je veux voir un exemple d’utilisation de la puissance de clearvars ;) je filtre les résultats en cliquant sur « Examples and How To »

clearvars examples and how to

ce qui m’amène à la page MATLAB Workspace:

Matlab Workspace

Je n’ai pas trouvé de publicité sur le site de The MathWorks qui fait la promotion de ce centre de documentation si ce n’est sur le blog de Mike on the Matlab Deskop.
Aucune idée si un jour cette doc sera inclue avec une nouvelle release MATLAB. Bon il semblerait que seul la doc du produit MATLAB soit mis sur le web , c’est à dire qu’on n’a pas (encore)l’équivalent par exemple pour une autre toolbox comme Simulink ou Real-Time Workshop.

Nostalgie de la R12 et easter egg

  • Flashback

La Release 12 est sortie il y a 9 ans ,en 2001. Au moins 16 versions MATLAB depuis ont été éditées:

  • R2010b – Current Release
    Includes MATLAB 7.11
  • R2010a
    Includes MATLAB 7.10
  • R2009bSP1
    Includes MATLAB 7.9.1
  • R2009b
    Includes MATLAB 7.9
  • R2009a
    Includes MATLAB 7.8
  • R2008b
    Includes MATLAB 7.7
  • R2008a
    Includes MATLAB 7.6
  • R2007b
    Includes MATLAB 7.5
  • R2007a
    Includes MATLAB 7.4
  • R2006b
    Includes MATLAB 7.3
  • R2006a
    Includes MATLAB 7.2
  • R14SP3
    Includes MATLAB 7.1
  • R14SP2
    Includes MATLAB 7.0.4
  • R14SP1
    Includes MATLAB 7.0.1
  • R13SP2
    Includes MATLAB 6.5.2
  • R13SP1
    Includes MATLAB 6.5.1

Et encore ces versions sont des web releases, c’est à dire qu’on peut officiellement les télécharger sur le site de TMW. Il n’y a pas par exemple la version peu connue la R13.0.1 (6.5)* qui est sortie entre la R13 et la R13SP1 et la fameuse R14 (7.0).

* Voici ce qu’on peut en effet lire dans les releases notes de la R13SP1 , en particulier dans l’encadré (oui dans la foulée je me suis aussi réinstaller la R13Sp1!):

R13 releases notes

shg

Mais si on tape dans le Command Window:

>>edit shg

le header de shg.m me contredit puisqu’il définit shg comme étant Show graph window … va savoir pourquoi?!!

shg

Cette fonction fait partie du répertoire graphics accessible en tapant :

>>cd(fullfile(matlabroot,’toolbox’,’matlab’,’graphics’))

C’est dans ce répertoire qu’on retrouvera les fonctions courantes du type : cla, clf et son ancêtre clg (MATLAB 5.3) , findall, findobj , gca, gcf, gco , getappdata, hold , linkaxes , opengl ,print …

Pour voir l’intéret de cette fonction , créons d’abord une figure:

>>logo

Le logo de MATLAB (discuté dans le post du 14-Oct-2010) s’affiche dans une figure. Maintenant si vous cliquez dans le Command Window de MATLAB pour taper une autre commande , la figure va être minimisée dans la barre des tâches… normal.
Sans taper dans le Command Window cela revient à cliquer sur bouton Minimize en haut à gauche de la figure.

Bon beh combien de fois par jour vous cherchez dans votre barre des taches la figure minimisée pour la faire réapparaitre à l’écran?!! c’est là que shg est pratique , 3 lettres seulement à taper ! Comme vous avez pu le voir sur le screenshot, shg n’a qu’une seule ligne de code:

>>figure(gcf)

Donc taper :

>>shg

va par magie me remettre ma figure sur l’écran.

Message d’accueil pour les standalones

  • Le MATLAB Compiler en quelques mots

Pour rappel cette toolbox a deux objectifs:

  • déployer des applications MATLAB sur des ordinateurs où MATLAB n’est pas installé
  • protéger intellectuellement son code MATLAB

Le premier objectif en image:

screenshot compiler

Et pour ceux qui doutent sur le second objectif voici un lien sur le standard de chiffrement avancé (AES) et les clefs 1024-bit RSA utilisé par le ctf :
Can I depend on the MATLAB Compiler 4.0 (R14) to protect my intellectual property?