2009-04-11 9 views
5

Je viens de commencer à expérimenter quelque chose avec Matlab, et comme je suis habitué à l'interface de Vim, j'essaie de ne pas utiliser l'éditeur de Matlab autant que possible. Ce qui me dérange, c'est que chaque fois que je lance un fichier .m, il affiche l'interface.Matlab sur cmd (winxp)

Existe-t-il un moyen de lancer test.m à partir d'une ligne cmd, et de le laisser sortir sur un cmd, comme il le ferait normalement dans l'environnement de Matlab. Quelque chose comme un "shell Matlab" (comme celui de Python, seulement celui de Matlab)?

Répondre

10

Pour répondre à votre question, commencer Matlab comme ceci:

matalb -nodesktop -nosplash

Cela fonctionne sur Linux et Windows. Sur linux, vous tapez ceci à l'invite de commande, et matlab s'exécutera dans cette même fenêtre de commande en mode texte. Donc, vous obtiendriez le "shell matlab" que vous vouliez. Sur Windows, cd dans le répertoire où est installé matlab, et tapez la même commande. Il ouvrira une fenêtre de ligne de commande matlab dépouillée, sans toutes les cloches et les sifflets du bureau matlab. Maintenant, à mon avis, l'éditeur matlab avec son débogueur intégré est votre ami. Il a également des raccourcis clavier emacs, si cela peut vous aider. Il est également plus facile d'exécuter des commandes et de regarder les résultats dans matlab desktop, puis quand matlab est exécuté en mode texte. La seule fois où vous voulez vraiment utiliser le mode texte est si votre code matlab prend du temps à s'exécuter, et vous êtes seulement intéressé par le résultat final. Ou si vous exécutez plusieurs instances de matlab. Le mode texte prend beaucoup moins de mémoire, et sous Linux, vous pouvez facilement lancer une exécution à partir de la ligne de commande et la mettre en arrière-plan.

En fait, vérifiez les arguments de ligne de commande pour matlab. Vous pouvez faire d'autres choses intéressantes, comme avoir matlab exécuter une seule fonction et quitter, à la perl, ou rediriger un script dans matlab comme ceci: matlab < script.m

0

sur les environnements Linux, Matlab peut être démarré en mode texte

matlab -nosplash -nodesktop 

mais cela ne fonctionne pas sous Windows. qui le lance dans le shell actuel. Sous Windows, cela ouvre une nouvelle fenêtre en texte seul. Je ne connais aucun moyen de l'exécuter dans la console actuelle sous Windows.

Peut-être il y a une certaine façon, vous pouvez y attacher fonctionner dans http://www.mathworks.com/access/helpdesk/help/techdoc/index.html?/access/helpdesk/help/techdoc/ref/matlabwindows .shtml & http://www.google.com/search?rlz=1C1GGLS_enUS302US311 & sourceid = chrome & ie = UTF-8 & q = matlab + commande + ligne + windows '> mode serveur d'automatisation.

Une autre option si vous êtes vraiment désespéré pourrait être de faire une machine virtuelle et d'installer Linux. Ensuite, j'imagine qu'il existe des moyens de configurer vim pour qu'il fonctionne bien avec Matlab (je suis une personne emacs ces jours-ci et il existe des solutions pour emacs).

+0

Oui, cela fonctionne sur Windows. Il va ouvrir une simple fenêtre de commande matlab. – Dima

5

Êtes-vous vraiment prêt à faire du travail de développement sans débogueur m-fichier? Il me semble que cela vous limiterait à des programmes pratiquement insignifiants. Après une très courte courbe d'apprentissage, je pense que le débogueur intégré de Matlab serait fantastique (et je suis un VS).

Si vous insistez pour le faire, votre meilleure option est de compiler vos fichiers m pour qu'ils soient autonomes. Cela nécessiterait l'accès au (pas cher) matlab compiler.

Notez qu'il existe une différence significative entre le compilateur distribué avec les versions matlab jusqu'à 6.5, et ceux distribués avec matlab 7+ (ne connaissent pas les numéros de version du compilateur). En 6.5, le compilateur a généré du code-c, qui pourrait être édité et compilé séparément. A partir de 7, le compilateur n'a fait aucune compilation, conversion ou génération de code: exécuter un programme compilé aujourd'hui le fait pratiquement fonctionner sur une machine Matlab virtuelle appelée MCR - qui englobe presque toutes les fonctionnalités de matlab. C'est un énorme - MCR installateur (installateur!) Pondéré 130M la dernière fois que j'ai vérifié.
Certains débats sur ce sujet peuvent encore être trouvés sur les newsgroups, mais ce n'est pas important maintenant. En fait, l'approche MCR semble plus proche de ce que vous cherchez.

Et d'ailleurs, pour moi matlab -nosplash -nodesktop fonctionne parfaitement sur les fenêtres - il lance Matlab comme une console, mais cela vous priver à la fois un éditeur de texte et un débogueur ...

2

Ce que je ferais est la suivante:

  1. Démarrer Matlab
  2. ne pas ouvrir la.fichier m dans les Matlab
  3. Ouvrez le fichier dans votre éditeur de choix
  4. Exécutez la fonction dans MATLAB comme d'habitude

Je ne peux imaginer aucune raison pour laquelle cela ne fonctionne pas comme Matlab ne devrait pas prendre soin ce qui a été utilisé pour éditer le fichier.

Cela ne vous donnera pas un "shell", mais l'ensemble de l'interface graphique, mais je ne peux pas penser à aucune raison pour laquelle vous ne voudriez pas avoir, si elle est disponible.

+1

Vous ne pouvez pas vouloir toute l'interface graphique si vous avez un ordinateur lent. – Dima

0

J'ai eu le même problème que Kigurai. Je devais conduire Matlab avec Python donc j'ai trouvé cette solution:

En Python:

import os 

os.chdir('W:\\monrépertoire') 

os.spawnl(os.P_NOWAIT, 'monscript.bat') 

En monscript.bat:

matlab.exe -r interp_3D -nodesktop –nosplash 
0

Il y a des cas où le débogage en effet pas beaucoup est nécessaire et l'état du Matlab doit être conservé entre les invocations. Un (le seul?) Exemple serait Emacs org-mode. il peut être utilisé pour écrire du texte entrelacé avec du code selon literate programming etc. Bien qu'il soit possible d'utiliser des commentaires dans Matlab et publish code qu'il s'agisse de HTML ou de LaTeX, il faut cependant quitter le confort d'Emacs.

Il existe un standalone program available qui utilise le moteur Matlab pour évaluer les commandes reçues sur stdin et vider le résultat. Cette version particulière, cependant, manque de support pour les commandes multilignes comme si/else/end ou for/end. C'est une limitation de engEvalString qui attend tout à la fois. Il y a un ugly workaround available qui en fait usable assez pour le mode org.

#+begin_src matlab :session *MATLAB* :exports none :cache no :results value 
if 3>1 
'wow!!!' 
end 
#+end_src 

#+RESULTS: 
: wow!!!