Cody mon feedback

Cody utilise calculateSize.m un fichier sur le FEx pour calculer votre score à chaque solution.
Chaque problème a plusieurs solutions et donc plusieurs scores possibles.
Exemple avec le problème qui consiste à savoir si un vecteur est monotonique et croissant (monotonically increasing).
La doc MATLAB explique comment faire : Differencing Data

monotically increasing

Utiliser :

function tf = test(x)
tf = all(diff(x)>0);

donne un score de 16 points versus cette méthode

function tf = test(x)
tf = isequal(unique(x),x);

qui est moins couteuse : 15 points.

Moi je trouve ça super de voir comment les autres MATLAB users répondent à ce type de problème simple. Il y a des trucs auquels je n’aurais jamais pensé.

Par exemple faire un échiquier en utilisant la fonction invhilb qui est l’inverse de la matrice Hilbert.

>> chess = invhilb(3)>0

chess =

1 0 1
0 1 0
1 0 1

C’est pas trop fun ça !!!

Voilà vous l’aurez compris j’adooooooooore CODY!

Trendy

Je cherche sur le site Monster des offres d’emploi ayant le mot matlab et se trouvant dans la région PACA :

Le code ( 3 lignes) pour récupérer le nombre d’offres correspondant à ma recherche :

url = ‘http://offres.monster.fr/offres-d-emploi/?q=matlab&cy=fr where=R__C3__A9gion__3AProvence__2DAlpes__2DC__C3__B4te-d__27Azur';

count = urlfilter(url,’matlab’,1,’backward’);

updatetrend(count);

Pour créer la figure associée :

plot(time1225,data1225, ‘o-‘);
datetick
legend(‘Number of jobs’)
title(‘MATLAB jobs on Monster in Provence-Alpes-Cote d »Azur’,’fontweight’,’bold’,’interpreter’,’none’)
ylim([0 15])
grid(‘on’)

Ce qui affiche :

my trendy matlab

Je suis plutôt content car en plus il apparait comme un des Trendy les plus populaires sur le MATLAB Central:

Trendy

En ce moment TMW propose beaucoup de fun (Trendy , Cody et autres dont on ne peut pas discuter publiquement ) et j’adooooooore!

CODY

MathWorks a sorti une nouveau jeu sur son site : , nom de code CODY.
Pleins de problèmes à résoudre allant du plus simple ajouter 2 nombres au plus compliqué comme … argh pour l’instant je les ai tous résolus ;)

Idéal pour faire une pause au travail , cody c’est par ici !

Icone MATLAB sous Ubuntu 11.10

Premièrement lors de l’installation de la R2011b j’ai cliqué sur l’option « Create symbolic link » (sinon il faut se référer à la note technique ) :

create symbolic links

Ce qui signifie que lorsque je tape matlab dans un terminal , c’est bien la R2011b qui se lance.

Ensuite 2 commandes suffisent pour faire un raccourci MATLAB sur le bureau:

1. Installer le package gnome-panel :

quefaurs@ULYSSE:~$ sudo apt-get install –no-install-recommends gnome-panel

2: puis pour faire réapparaitre la boite qui permet de créer un raccourci sur le bureau :

quefaurs@ULYSSE:~$ gnome-desktop-item-edit –create-new ~/Bureau

ou gnome-desktop-item-edit `pwd` –create-new

On remplit les champs

launcher matlab

et voilà le tour est joué :

raccourci matlab sous Ubuntu

Commandes non déployables

En allant dans le menu File-> Preferences ->Code Analyser , la section MATLAB Compiler (Deployment) Messages affiche les messages suivants :

code analyser

Par exemple on peut lire qu’entre autres les commandes HELP, ADDPATH, KEYBOARD ne sont pas autorisées lorsqu’on compile.

La solution est d’utiliser la combinaison de deux commandes : isdeployed et ismcc.
Alors attention la documentation de ismcc est fausse jusqu’en R2011b :

ismcc 11b

En effet l’exemple est contradictoire . On veut faire son addpath que dans l’environnement MATLAB , donc un tild après le if manque.
On devrait lire plutot:

if ~(ismcc || isdeployed)
addpath(fullfile(matlabroot,’work’));
end

dans la Prerelease R2012a ceci est corrigé.

Conclusion , ne supprimer pas ces messages du M-lint mais ajouter plutôt un if-test comme ci-dessus , c’est à dire ~(ismcc || isdeployed)

Les trips du MATLAB Answers

>>eval(char([113 117 105 116]))

je vous laisse la tester ;)

et dans le même style cette discussion est incroyable :
How do I generate a given Matrix in one command?

A la base le gars il demande comment générer la matrice A = [1 1 0 0 0; 1 1 1 0 0; 0 1 1 1 0; 0 0 1 1 1; 0 0 0 1 1] en une seule ligne de code.
Les réponses proposées sont toutes géniales : entre celles qui utilisent des fonctions peu utilisées telles que toeplitz ou gallery avec la matrice test tridiagonale tridiag , ou à celles utilisant la toolbox Image Processing comme imdilate , à celles utilisant la puissance de bsxfun.

Ce sont vraiment des pures réponses de geek , y a aucun doute!

Installer plusieurs MCR

Commençons par Windows:

  • Hypothèses

Pour la suite de mon exposé nous supposerons que mon standalone r2010a s’appelle test10a.exe et que mon standalone r2011b s’appelle test11b.exe.
Pour faire les choses proprement test10a.exe est copié dans le répertoire C:\EXES10a et test11b.exe est dans un autre répertoire : C:\EXES11b

Nous supposons également que les MATLAB Compiler Runtime (MCR) de la r2010a et de la r2011b sont déjà installés sur la machine. Le MCR de la r2010a dans cet exemple est installé dans C:\MCR\r2010a et celui dela 11b dans C:\MCR\r2011b

  • Objectif

Mon but est de pouvoir taper test10a ou test11b depuis une fenêtre DOS et que ces 2 exécutables puissent se lancer correctement. Je veux aussi pouvoir lancer ces standalones sans avoir à me déplacer dans le répertoire où ils se trouvent

  • Solution

La solution consiste à éditer la variable d’environnement PATH et tout simplement de lui indiquer les 4 chemins précédemment indiqués. Soit:
C:\MCR\r2011b\v716\runtime\win32
C:\MCR\r2010a\v713\runtime\win32
C:\EXES11b
C:\EXES10a

Important : L’ordre dans lequel apparait le chemin des MCR n’est pas important, ce qui compte c’est l’ordre d’apparition des chemins où se trouve les exes .
Supposez vous avez deux exes qui ont le même nom : test.exe et qui existent à la fois dans le répertoire C:\EXES11b et C:\EXES10a
Si je veux lancer en priorité des exes de la 11b , il faudra que C:\EXES11b apparaisse avant C:\EXES10a dans la variable PATH.

  • A eviter

Editer sa variable d’environnement PATH devient vite une galère si on le fait de manière classique c’est à dire: clic-droit sur l’icône Poste de Travail -> propriétés ce qui nous amène à cette fenêtre:

System Properties

où on a plus qu’à cliquer sur le bouton « Environment variables »

Une fois qu’on a sélectionné la variable système Path on arrive à cette mini boite de dialogue:

Edit System Variable

et donc là c’est vraiment ce que je disais éditer sa variable est galère . Cela demande d’être très rigoureux et ne pas péter les autres chemins indiqués dans le Path.

  • Mon conseil

Pour eviter cet affichage à 2 francs six sous, je conseille de télécharger un excellent utilitaire : Path Editor.
Et editer sa variable PATH devient alors là un vrai jeu d’enfants. Voici un exemple où on tape dans la r2010b et la r2011b :

Path Editor

En un coup d’œil on voit les différents chemins de la variable PATH , très simple à éditer , à ajouter , ou supprimer des répertoires.
Le bouton Clean est aussi très utile lorsque vous avez des PATHs qui sont pourris , c’est à dire qui pointent vers des choses qui n’existent plus.

Bref je conseille vivement PATH EDITOR comme outil .

  • Conclusion

Sous Windows , on peut installer autant de MCR qu’on veut et on peut lancer n’importe quelle version compilée.

Qu’en est t-il pour Linux ? …

Bug de fileparts en R2011b

c’est déjà un message d’erreur en R2011b !!! et non pas un warning , la preuve :

[a,b,c,d] = fileparts(fullfile(matlabroot,’license.txt’));

retourne une erreur:

Error using fileparts
Too many output arguments.

on s’attendrait plutôt au warning des versions précédentes comme par exemple en R2010b ou en R2011a où on était déjà prévenus :

>> [a,b,c,d] = fileparts(fullfile(matlabroot,’license.txt’))
Warning: The fourth output, VERSN, of FILEPARTS will be removed in a future release.
> In fileparts at 35

a =

C:\MATLAB\SOF\r2010b

b =

license

c =

.txt

d =

 »

En effet en editant fileparts.m dans ces versions là on peut lire:

if nargout == 4
warning(‘MATLAB:fileparts:VersionToBeRemoved’, …
‘The fourth output, VERSN, of FILEPARTS will be removed in a future release.’);
end

A noter également que la première ligne de fileparts.m acceptait 4 arguments de sortie:

function [path, fname, extension,version] = fileparts(name)

Je vous le donne en 1000 , dès la r2011b cette ligne est devenue :

function [path, name, ext] = fileparts(file)

N’ayant pas trouvé de bug report à ce sujet , j’ai remonté cette erreur de documentation.