Matlab : logiciel de calcul scientifique
Matlab est un logiciel propriétaire de calcul matriciel et numérique développé par Mathworks Inc. Il fonctionne sous Windows, Mac et Unix. Les versions Unix supportent officiellement certaines versions d'Ubuntu.
De nombreuses alternatives libres et de qualité existent (permettant même parfois d'exécuter du code Matlab), et notamment les logiciels : Scilab, Octave, R ou Python avec le package Scipy (incluant Numpy).
Matlab fournit désormais son propre environnement d'exécution Java et fonctionne correctement dans sa version Unix.
Installation
Il existe plusieurs possibilités selon la version de Matlab que vous possédez et vos droits sur le système d'installation. Préférez l'installation système si vous possédez une version Unix de Matlab, vous avez les droits administrateur et assez d'espace libre sur la partition racine /.
Installation système de la version Unix
- Insérer le DVD ou monter l'image ISO avec furiusisomount.
- Ouvrir un terminal et se placer dans le répertoire d'installation.
cd CheminRepertoireMatlab/
- Se connecter en tant que superutilisateur.
sudo -i
- Exécuter le script install.
./install
- Suivre les différentes étapes de l'installation en choisissant pour répertoire de destination /usr/local/MATLAB/R2012a/ en remplaçant R2012a par votre version.
- Installer le paquet matlab-support (afin entre autres d'intégrer Matlab dans les menus), puis répondez aux questions.
- Lancer Matlab en tant qu'administrateur pour enregistrer votre version.
sudo matlab
Installation utilisateur de la version Unix
Mêmes étapes que pour l'installation système mais sans se connecter en tant qu'administrateur et en choisissant un repertoire d'installation situé dans votre répertoire personnel, par exemple : ~/Logiciels/Matlab/
Installation de la version Windows
Si vous disposez uniquement de la version Windows de Matlab et ne souhaitez pas acquérir une licence Unix en plus, deux solutions s'offrent à vous :
- installer Matlab dans une machine virtuelle Windows (des logiciels comme GNOME Boxes ou VirtualBox rendent l'opération assez aisée) ;
- installer Matlab à l'aide de Wine, bien que certaines versions semblent ne pas fonctionner d'après cette page.
Utilisation
Si vous avez installé le paquet matlab-support, vous pouvez lancer Matlab comme n'importe quel autre logiciel (menu, dash, etc…).
Sinon tapez la commande matlab
dans une console.
Configuration
Pour configurer Matlab, aller dans le menu File > Preferences…
Raccourcis clavier Ctrl+c Ctrl+v
Par défaut dans la version Unix, Ctrl+c et Ctrl+v ne sont plus des raccourcis clavier pour le copier-coller. Si ce comportement vous dérange :
- Ouvrir le menu de configuration.
- Aller dans le menu Keyboard > Shortcuts.
- Sélectionner Windows Default Set dans le menu déroulant Active setting.
Désinstallation
- Désinstaller le paquet
matlab-support
. - Puis suivre les indications données sur cette page : http://www.mathworks.fr/support/solutions/en/data/1-17VR3/index.html?solution=1-17VR3
Problèmes courants
Menus inutilisables sous Gnome Shell
Lorsqu'une fenêtre de Matlab est maximisée, il devient impossible d'accéder aux menus. Il semble que Matlab n'arrivent à récupérer correctement les coordonnées de la fenêtre et donc des menus depuis Mutter.
Test janvier 2020 : ce problème ne semble plus d'actualité, en tout cas je ne constate pas ce problème d'accès au menu avec la dernière version stable de Matlab (2019B) et la dernière version stable de Gnome (3.34), version inclus notamment dans Ubuntu 19.10.
Cependant, si vous avez une vieille version et que vous constatez le problème, une solution consiste à translater la fenêtre dans le coin en haut à gauche de l'écran, puis de la redimensionner, et enfin de la déplacer éventuellement.
Il est possible de résoudre ce problème en maximisant automatiquement Matlab au démarrage grâce à gdevilspie comme le décrit https://bbs.archlinux.org/viewtopic.php?id=118340|cette page :
- Installer le paquet gdevilspie.
- Cliquer sur Ajouter pour créer une nouvelle règle.
- Dans l'onglet Matching, sélectionner application_name et écrire "MATLAB" dans le champ contain(s).
- Dans l'onglet Actions, cocher maximize, appeller la règle "MATLAB" par exemple puis enregistrer.
- Cocher Start devilspie automatically at login, démarrer le daemon et fermer.
Il subsistera des problèmes avec les fenêtres de l'aide ou de l'éditeur, donc redimensionner vos fenêtres avec précaution.
Matlab r2007a 32bits sur ubuntu 64bits
Commencez par installer ia32-libs depuis synaptic si vous etes en 64 et que vous installez la version etudiante (ou non-etudiante en fait).
On commence par remonter correctement notre dvd et on crée le répertoire où sera installé matlab
sudo umount /media/cdrom sudo mount -t iso9660 /dev/cdrom /media/cdrom sudo mkdir /opt/matlab7 cd /opt/matlab7 sudo sh /media/cdrom/install_unix.sh -glnx86
Normalement tout c'est passé correctement jusqu'à la fin de l'installation.
Il est aussi possible de devoir lancer matlab en console avec l'option -t soit :
sudo sh /media/cdrom/install_unix.sh -glnx86 -t
À ce moment, on recoit un message d'erreur comme quoi on est pas sur la bonne architecture. Il faut donc faire croire à Matlab qu'il est sur la bonne architecture
cd /opt/matlab7/bin sudo ln -s glnx86 glnxa64 cd /opt/matlab7/extern/lib sudo ln -s glnx86 glnxa64 cd /opt/matlab7/sys/java/jre sudo ln -s glnx86 glnxa64
On termine l'installation en lancant /opt/matlab7/install_matlab vous pouvez tout accepter. Pour valider notre version, on lance matlab en root.
Il ne reste plus qu'a lancer matlab avec la commande
matlab -glnx86
j'ai dû résoudre mes conflits avec compiz avec l'ancienne méthode.
L'installeur ne démarre pas
le lancement de l'installation de la version 32 bit sur Ubuntu 9.04 64bit provoque un message d'erreur ressemblant à
$ sudo /media/crdom/install -glnx86 ------------------------------------------------------------------- An error status was returned by the program 'xsetup', the X Window System version of 'install'. The following messages were written to standard error: /tmp/26685tmwinstall/update/install/main.sh: 236: /tmp/26685tmwinstall/update/bin/glnxa64/xsetup: not found Attempt to fix the problem and try again. If X is not available or 'xsetup' cannot be made to work then try the terminal version of 'install' using the command: install* -t or INSTALL* -t ------------------------------------------------------------------- .: 15: Can't open /tmp/26685tmwinstall/update/install/cleanup.sh
L'installation se passe sans problème en ajoutant le paramètre nocp -nocp
$ sudo /media/cdrom/install -glnx86 -nocp
(crédits : http://ubuntu-virginia.ubuntuforums.org/showthread.php?t=186568&page=2 )
Erreur compilation avec MEX suite à une mise à niveau ubuntu
Si à la compilation mex ce message apparaît "/usr/bin/ld: cannot find -lstdc++", il est certainement nécessaire de télécharger une nouvelle version du compilagteur gcc via le dépot (par exemple gcc-4-x-multilib). Ensuite il n'y aura que des "warnings" à la compilation.
Si un message apparait du type version: "`GLIBCXX_3.4.11' not found ", il y a une solution simple: il suffit de changer le compilateur . Pour ce faire:
i) télécharger le compilateur gcc 4.4 :
sudo apt-get install gcc-4.4 g++-4.4 gfortran-4.4
ii) ouvrez le fichier ~/.matlab/R20xxa/mexopts.sh en indiquant votre version de matlab (R2011a ou b, R2010a ou b, R2008a ou b etc.)
sudo gedit ~/.matlab/R20xxa/mexopts.sh
iii) choisissez votre machine et votre type d'installation (32 vs 64 bits) : par exemple sous 32 bits glnx86), sous 64 bits glnxa64) etc.
iv) remplacer CC='gcc' par CC='gcc-4.4' ,CXX='g++' par CXX='g++- 4.4' et FC='g95' par FC='gfortran-4.4' . v) Sauvez et relancer matlab. Cela marche !
Erreur de bibliothèque suite à une mise à niveau ubuntu
Là encore la solution est simple: MATLAB devrait vous retourner qu'il ne trouve pas la bibliothèque libc.so.6en référence avec oscheck.sh. Voici quelques variantes suivant que vous soyez sous 32 ou 64-bits:
oscheck.sh: 605: /lib64/libc.so.6: not found
oscheck.sh: 605: /lib/libc.so.6: not found
matlab/bin/util/oscheck.sh: 605: /lib/libc.so.6: not found
matlab/bin/util/oscheck.sh: 605: /lib64/libc.so.6: not found
/opt/matlab/bin/util/oscheck.sh: 605: /lib/libc.so.6: not found
oscheck.sh: 619: /lib/libc.so.6: not found
bin/util/oscheck.sh: 619: /lib/libc.so.6: not found
Solution simple :
Pour résoudre ce problème sous linux 64-bit:
sudo ln -s /lib64/x86_64-linux-gnu/libc-2.13.so /lib64/libc.so.6
sous linux 32-bit:
sudo ln -s /lib/i386-linux-gnu/libc-2.13.so /lib/libc.so.6
64-bit :
sudo ln -s /lib/x86_64-linux-gnu/libc-2.15.so /lib64/libc.so.6
32-bit :
sudo ln -s /lib/i386-linux-gnu/libc-2.15.so /lib/libc.so.6
Message de warning dans la fenêtre de commande
Pour éliminer le message "the desktop configuration was not saved successfully" , il faut taper: sudo chmod a+w -R /usr/local/matlab , puis: sudo chown -R votrelogin:votrelogin ~/.matlab
OpenGL et Matlab
Si OpenGL vous cause des soucis faire des rendus de surface dans le mauvais sens, ou que vous obtenez des messages d'erreur du style OpenGL not available, using ZBuffer, et que vous utilisez une version plus ancienne que la R14SP2, vous allez avoir un peu de travail. La source de toute la réflexion de cette partie vient de The MathWorks. Commencez par lancer Matlab. Une fois que la console est prête, cherchez lez informations sur OpenGL :
>> opengl info Version = 2.0.0 NVIDIA 76.64 Vendor = NVIDIA Corporation Renderer = GeForce FX 5200/PCI/SSE2 MaxTextureSize = 4096 Extensions = GL_ARB_depth_texture GL_ARB_fragment_program GL_ARB_fragment_program_shadow ...
Les résultats dépendent évidemment de votre machine, mais la partie importante est la partie "Renderer". Dans cet exemple, il donne le nom de la carte qui va s'occupper du rendu. Si vous utilisez un rendu logiciel, vous obtiendrez Mesa X11. Si vous utilisez la carte graphique, et que vous ne disposez pas de l'accélération matérielle, vous avez probablement besoin d'installer les pilotes du constructeur. Si les pilotes ne sont pas responsables, ouvrez un terminal, et tapez :
ldd /usr/local/matlab/bin/glnx86/glren.so
(remplacez par l'emplacement de matlab si besoin est…).
Vous saurez alors si les différentes librairies openGL sont là où elles sont censées être. Voici un exemple de configuration correcte.
$ldd /usr/local/matlab/bin/glnx86/glren.so libmx.so => not found libut.so => not found libmwudd.so => not found libmwservices.so => not found libGL.so => /usr/lib/libGL.so (0xb7f45000) libGLU.so => /usr/X11R6/lib/libGLU.so (0xb7ecf000) libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0xb7ec2000) libXp.so.6 => /usr/X11R6/lib/libXp.so.6 (0xb7eba000) libXt.so.6 => /usr/X11R6/lib/libXt.so.6 (0xb7e6a000) libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0xb7da5000) libc.so.6 => /lib/tls/i686/cmov/libc.so.6 (0xb7c78000) libGLcore.so.1 => /usr/lib/libGLcore.so.1 (0xb750f000) libnvidia-tls.so.1 => /usr/lib/tls/libnvidia-tls.so.1 (0xb750d000) libm.so.6 => /lib/tls/i686/cmov/libm.so.6 (0xb74ec000) libdl.so.2 => /lib/tls/i686/cmov/libdl.so.2 (0xb74e8000) libstdc++.so.5 => /usr/lib/libstdc++.so.5 (0xb742e000) libgcc_s.so.1 => /lib/libgcc_s.so.1 (0xb7423000) libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0xb741a000) libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0xb7402000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)
S'il vous manque une librairie importante sur cette liste, mais qu'elle est installée, il faudra créer un lien virtuel. Imaginons que vous obtenez libGL.so ⇒ not found. On se place d'abord dans le répertoire suivant :
cd /usr/local/matlab/sys/opengl/lib/glnx86
Vous allez ensuite vérifier si le paquet libGL.so est installé :
dpkg -s libGL.so
S'il l'est, vous créez le lien symbolique :
ln -s /usr/lib/libGL.so libGL.so
S'il n'est pas installé, et bien… installez-le !
Les risques d'avoir ce problème sont faibles si vous utilisez les pilotes corrects pour votre carte video.
Si ça marche à peu près, mais que ce n'est pas encore parfait, c'est probablement Matlab qui n'utilise pas le bon Xvisual. Pour vérifier, on ouvre le bureau Matlab, et on tape la commande suivante :
hf=figure; set(hf,'renderer','opengl'); get(hf,'xvisual')
Vous obtiendrez une chaîne, ressemblant à " 0x21 (TrueColor, depth 24, RGB mask 0xff0000 0xff00 0x00ff) ". Tapez maintenant :
glxinfo | grep 0x21 | awk '{print $15}'
Il doit vous répondre 24 (comme dans la partie depth de la réponse profondeur). Si vous obtenez 0, il faut trouver un autre Xvisual. Le meilleur moyen est de jongler avec glxinfo.
glxinfo | grep tc | grep y
Vous obtenez alors une liste de Xvisual.
0x21 24 tc 0 32 0 r y . 8 8 8 0 4 24 0 16 16 16 16 0 0 None 0x23 24 tc 0 32 0 r y . 8 8 8 8 4 24 0 16 16 16 16 0 0 None 0x26 24 tc 0 32 0 r y . 8 8 8 0 4 24 8 16 16 16 16 0 0 None 0x27 24 tc 0 32 0 r y . 8 8 8 8 4 24 8 16 16 16 16 0 0 None 0x2a 24 tc 0 32 0 r y . 8 8 8 0 4 16 0 16 16 16 16 0 0 None 0x2b 24 tc 0 32 0 r y . 8 8 8 8 4 16 0 16 16 16 16 0 0 None 0x2e 24 tc 0 32 0 r y . 8 8 8 0 4 0 0 16 16 16 16 0 0 None 0x2f 24 tc 0 32 0 r y . 8 8 8 8 4 0 0 16 16 16 16 0 0 None 0x32 24 tc 0 32 0 r y . 8 8 8 0 4 24 0 16 16 16 16 2 1 Ncon 0x33 24 tc 0 32 0 r y . 8 8 8 8 4 24 0 16 16 16 16 2 1 Ncon 0x34 24 tc 0 32 0 r y . 8 8 8 0 4 24 0 16 16 16 16 4 1 Ncon 0x35 24 tc 0 32 0 r y . 8 8 8 8 4 24 0 16 16 16 16 4 1 Ncon 0x3a 24 tc 0 32 0 r y . 8 8 8 0 4 24 8 16 16 16 16 2 1 Ncon 0x3b 24 tc 0 32 0 r y . 8 8 8 8 4 24 8 16 16 16 16 2 1 Ncon 0x3c 24 tc 0 32 0 r y . 8 8 8 0 4 24 8 16 16 16 16 4 1 Ncon 0x3d 24 tc 0 32 0 r y . 8 8 8 8 4 24 8 16 16 16 16 4 1 Ncon 0x42 24 tc 0 32 0 r y . 8 8 8 0 4 16 0 16 16 16 16 2 1 Ncon 0x43 24 tc 0 32 0 r y . 8 8 8 8 4 16 0 16 16 16 16 2 1 Ncon 0x44 24 tc 0 32 0 r y . 8 8 8 0 4 16 0 16 16 16 16 4 1 Ncon 0x45 24 tc 0 32 0 r y . 8 8 8 8 4 16 0 16 16 16 16 4 1 Ncon
Vous en choisissez un qui ne soit pas marqué Slow sur la dernière colonne, et qui ait 24 sur la 15ème colonne. Choisissons par exemple 0x26. On va le définir comme Xvisual. Tapez
set(0,'defaultfigurexvisual','0x26');
et rentrez cette ligne dans le fichier startup.m. Vous devriez maintenant avoir des jolis graphes openGL !
Si matlab vous dit "Warning: Could not access OpenGL library", une solution est
export LD_LIBRARY_PATH=/usr/local/matlab/sys/opengl/lib/glnx86
(soit dans votre .bashrc, soit dans un lanceur avec exec=/bin/sh -c "LD_LIBRARY_PATH=/usr/local/matlab/sys/opengl/lib/glnx86 /usr/local/matlab/bin/matlab").
uigetfile
uigetfile : Affiche la boîte de dialogue standard pour la récupération de fichiers.
Exemple :
[FileName,PathName,FilterIndex] = uigetfile('/home/login/')\\
Si cette fonction ne retourne rien, et retourne une erreur "File does not exist" dans un popup. La solution (source) consiste à taper dans la console matlab :
setappdata(0,'UseNativeSystemDialogs',0)
La boîte de dialogue est alors remplacée par une autre fonctionnelle.
Utiliser Compiz
Ancienne méthode :
Il se peut qu'il manque des morceaux à la fenêtre de Matlab si on utilise Compiz en même temps. Le problème peut être résolu en ajoutant une ligne dans le script de lancement.
Éditez-le:
gedit ~/bin/Matlab/bin/matlab
(en adaptant le chemin en fonction de votre répertoire d'installation). Ensuite, ajoutez la ligne
export AWT_TOOLKIT=MToolkit
dans la section «Export the variables», aux alentours de la ligne 1633.
S'il manque vraiment beaucoup de morceaux au desktop de matlab, et s'ils ne reviennent toujours pas avec la manip précédente, (ceci pour R2007b et Gutsy), "débranchez" Compiz:
metacity --replace
et relancez matlab. Si cette solution provisoire devenait définitive: Système → Préférences → Apparence → Effets Visuels", choisir "Aucuns". (Mais vous perdez au passage les beaux effets du gestionnaire de fenêtres) .
Nouvelle méthode :
Trouvez où vous avez installé matlab (personnellement dans mon répertoire principal) en faisant donc
gedit LaOuVousAvezInstalléMATLAB/bin/matlab
puis juste après
#!/bin/sh
ajoutez
export MATLAB_JAVA=/usr/lib/jvm/java-6-sun/jre/
Sauvez, ça marche
Créer un raccourci sur le bureau ou dans le menu principal
Inspiré de la doc de ubuntu.com.
Récupérer l'icone matlab :
sudo wget https://upload.wikimedia.org/wikipedia/commons/2/21/Matlab_Logo.png -O /usr/share/icons/matlab.png
Modifier le fichier /var/lib/locales/supported.d/fr pour lui ajouter à la fin ceci :
fr_FR ISO-8859-1
Rentrer ça dans la ligne de commande pour régénérer les "locale" :
sudo locale-gen --purge
Créer le fichier /usr/share/applications/matlab.desktop contenant :
[Desktop Entry] Type=Application Icon=/usr/share/icons/matlab.png Name=MATLAB Comment=Start MATLAB - The Language of Technical Computing Exec=env LANG=fr_FR.iso-8859-1 LANGUAGE=fr_FR.iso-8859-1 matlab -desktop Categories=Development;
Note : Il permet de résoudre les problèmes d'encodage de caractères dans les figures. Comme dans l'exemple suivant :
figure;title('µ');
cellfun.mexglx manquant (et autres fichiers)
Si vous installez Matlab (version 7.0.1.24704 (R14) Service Pack 1) sur une machine de type x86 avec Ubuntu (Breezy 5.10), il peut exister des problèmes avec les permissions des fichiers /etx/lib.so.6, qui n'a pas par défaut les permissions d'exécutiuon, et qui ne se comporte pas toujours comme prévu avec certains scripts. Quand certains scripts (fichiers d'installation et de démarrage) veulent connaître la version de libc, ils n'obtiennent pas de réponse. Ceci engendre la non-installation des fichiers mexglx requis, et au démarrage de Matlab, le script [matlab_dir]/bin/util/oscheck.sh donne le rapport d'erreur suivant :
/opt/matlab/bin/util/oscheck.sh: line 134: /lib/libc.so.6: Permission denied
Le fichier [matlab_dir]/toolbox/matlab/datatypes/cellfun.mexglx n'a pas été installé, et ceci peut poser des problèmes au moment d'éxécuter une commande simple, comme ls, par exemple :
>> ls ??? Attempt to execute SCRIPT cellfun as a function. Error in ==> iscellstr at 13 res = cellfun('isclass',s,'char'); Error in ==> ls at 16 if iscellstr(varargin)
Une façon de résoudre ce problème serait de modifier deux lignes dans le script [cd_matlab]/install (à faire donc avant l'installation) et dans [matlab]/bin/util/oscheck.sh (à faire après l'installation).
Dans install, ligne 697 :
ver=`strings /lib/libc.so.6 | head -n 1 | sed -e "s/^[^0-9]*//" -e "s/[ ,].*$//"`
et dans oscheck.sh, ligne 134 :
ver=`/lib/libc.so.6 | head -n 1 | sed -e "s/^[^0-9]*//" -e "s/[ ,].*$//"
doivent être remplacées par :
ver=`strings /lib/libc.so.6 | grep "GNU C Library" | sed -e "s/^[^0-9]*//" -e "s/[ ,].*$//"`
Pour pouvoir éditer le fichier d'installation, il faut avoir copié le CD sur le disque dur, comme décrit dans la section Installation.
Vous pouvez trouver une explication plus détaillée ici (en anglais). Ceci peut expliquer d'autres problèmes, avec d'autres fichiers .mexglx manquants.
Les outils symboliques ne fonctionnent pas
Pour savoir si vous êtes concernés par ce problème :
- Lancez Matlab et regardez dans la boite d'outils si il vous répond R13
ou
- tapez la commande vpa(64,pi). Si vous obtenez le message d'erreur suivant :
Unable to load mex file: /usr/local/matlab/toolbox/symbolic/maplemex.mexglx. /usr/local/matlab/bin/glnx86/libmaple.so: symbol errno, version GLIBC_2.0 not defined in file libc.so.6 with link time reference ??? Invalid MEX-file
c'est que vous souffrez du tristement célèbre bug NPTL.
Tout d'abord, ouvrez avec un éditeur de texte le script de lancement de Matlab. Vous pouvez taper par exemple :
sudo gedit 'which Matlab'
Allez ensuite à la première ligne non commentée (sans devant, dans les 136), et ajoutez la ligne export LD_ASSUME_KERNEL=2.4.1 . Vous devriez obtenir quelque chose du genre :
__________________________________________________________________________ # export LD_ASSUME_KERNEL=2.4.1 arg0_=$0 # # Temporary file that hold MATLABPATH code from .matlab6rc.sh file. # temp_file=/tmp/$$a # trap "rm -f $temp_file; exit 1" 1 2 3
Sauvez et fermez l'éditeur. Pour vérifier le bon fonctionnement de la manoeuvre, dans Matlab, tapez getenv ('LD_ASSUME_KERNEL') , s'il vous dit 2.4.1, vous avez résolu le problème !
Liens
- Wiki anglais: https://wiki.ubuntu.com/MATLAB.