MATLAB et GNU Octave
Utilisez cette compétence pour concevoir ou réviser du code numérique, migrer des versions de MATLAB, préparer des projets reproductibles et planifier une exécution fiable. MATLAB et GNU Octave sont des produits distincts : la compatibilité est partielle, et ne constitue ni une garantie de licence ni de comportement.
Barrière produit et licence
- MATLAB R2026a est propriétaire. Ne supposez pas que MATLAB, MATLAB Online, une boîte à outils nommée, MATLAB Test, MATLAB Compiler, MATLAB Coder, Parallel Computing Toolbox ou un module complémentaire est installé, licencié ou disponible pour l'utilisateur.
- MATLAB Runtime n'est pas MATLAB. Il exécute des applications compatibles produites avec MATLAB Compiler ; il ne peut pas exécuter de code source arbitraire ni héberger MATLAB Engine pour Python. La construction d'artefacts nécessite le compilateur sous licence applicable et chaque produit utilisé par la source.
- GNU Octave 11.3.0 est un logiciel libre sous GPLv3+. Les paquets Octave ne sont pas des boîtes à outils MATLAB. Des noms similaires n'impliquent pas une équivalence d'API, numérique, graphique ou de licence.
- Demandez quel environnement d'exécution, version, plateforme, produits installés et contexte de licence l'utilisateur possède réellement. Traitez la disponibilité comme
unknownjusqu'à confirmation.
Voir Compatibilité Octave et Limites d'exécution/produit.
Barrière de sécurité non négociable
N'exécutez jamais un fichier .m, .mlx, binaire MEX, fichier MAT, action de démarrage ou d'arrêt de projet, installeur de paquet ou artefact généré non fiable. Une révision statique ne prouve pas la sécurité.
Considérez ces éléments comme des surfaces d'exécution ou de chargement de code :
eval,evalin,assignin,fevaldérivé de texte,str2func, callbacks, minuteries, callbacks d'application et chemins modifiés dynamiquement ;system,unix,dos, échappement shell!, Java, .NET, Python (py.*,pyrun,pyrunfile), MEX et bibliothèques natives ;mex,codegen, MATLAB Compiler, tâches de construction, démarrage/arrêt de paquet/projet et code généré ;load, désérialisation d'objets (loadobj, sérialisation personnalisée), handles de fonctions, objets Java/System et code de classe accessible à partir de fichiers MAT.
.mlx est une archive opaque pour cette boîte à outils et MEX est du code exécutable natif. N'utilisez pas Python pickle pour les échanges. Inspectez d'abord, isolez si nécessaire, obtenez une approbation explicite, puis invoquez un exécutable et une licence confirmés par l'utilisateur. Les scripts inclus sont des outils statiques ou de simulation : aucun ne lance MATLAB, Octave, Python Engine, un compilateur ou un sous-processus.
Flux de travail par défaut
- Clarifiez la cible. Enregistrez la version de MATLAB ou d'Octave, le système d'exploitation/architecture, le produit de base par rapport aux boîtes à outils/paquets requis, les entrées/sorties attendues, les tolérances numériques et si l'exécution est autorisée.
- Inventoriez statiquement. Analysez les fichiers
.m, les artefacts opaques, les chemins de projet, les produits requis et les en-têtes MAT avant tout chargement à l'exécution. - Choisissez la forme du code. Préférez les fonctions avec un bloc
argumentspour l'automatisation. Utilisez les scripts uniquement pour l'orchestration contrôlée et les scripts live pour des récits interactifs révisés. - Rendez la sémantique explicite. Enregistrez les formes, classes, unités, règles de valeurs manquantes, indexation, expansion implicite, algorithme/graine RNG, tolérances et formats de sortie.
- Testez sans état caché. Gardez les données de test synthétiques, les chemins locaux au projet, les graphiques déterministes et les tests indépendants des résidus de l'espace de travail de base.
- Planifiez l'exécution. Générez un plan argv, examinez les effets de démarrage/chemin et les licences, et ne lancez qu'après approbation explicite en dehors de ces assistants.
- Capturez la provenance. Hachez les entrées/ le code nommés et enregistrez la version, les produits, la politique RNG, les tolérances et le plan de commande sans vider l'environnement.
Liste de contrôle langage et données
Scripts, fonctions et scripts live
- Les scripts partagent l'espace de travail de l'appelant/de base et laissent des variables derrière eux. Les fonctions ont des espaces de travail locaux et des entrées/sorties explicites.
- Les scripts live (
.mlx) mélangent code et sortie riche mais ne sont pas des artefacts de révision en texte brut. Exportez le code révisé en.mpour inspection statique. - Évitez
clear all,addpath(genpath(...))large, la dépendance àpwd, les variables globales et l'ombrage silencieux de noms. Utilisez les racines de projet etfullfile. - Validez les tailles, classes et valeurs dans les blocs
arguments. N'oubliez pas que les déclarations de type peuvent convertir les entrées ; les validateurs vérifient sans convertir. - Un fichier de fonction principale doit correspondre au nom de la fonction principale. Les fonctions locales sont privées au fichier ; depuis R2024a, elles peuvent apparaître n'importe où dans un script en dehors des contextes conditionnels.
function y = scaleSignal(x, options)
arguments
x (:,1) double {mustBeFinite}
options.Scale (1,1) double {mustBeFinite, mustBeNonzero} = 1
end
y = x .* options.Scale;
end
Lisez Programmation.
Tableaux, indexation et numériques
- MATLAB utilise une indexation basée sur 1, en ordre colonne-major.
A(i,j),A(k),A(:,j),A{...}etA.(name)ont des sémantiques différentes. *,/,\)et^sont des opérations matricielles ; les formes pointées sont élément par élément. UtilisezA\b, pasinv(A)*b.- Depuis R2016b, les dimensions compatibles s'étendent implicitement. Affirmez la forme prévue avant les opérations qui pourraient accidentellement former un résultat extérieur.
- Préallouez lorsque la taille de sortie est connue, mais ne vectorisez pas au prix de temporaires énormes ou de code illisible. Mesurez avec
timeitou le profileur. - Comparez les résultats en virgule flottante avec des tolérances absolues et relatives choisies pour le domaine, pas avec
==générique ou un multiple magique deeps. - Fixez à la fois l'algorithme aléatoire et la graine. Utilisez des sous-flux
RandStreamnommés pour un travail parallèle indépendant ; n'utilisez pasrng("shuffle")basé sur le temps pour une revendication de reproductibilité.
Lisez Tableaux et Mathématiques.
Tables, horodatables et valeurs manquantes
- Une
tablea des variables nommées de hauteur égale qui peuvent avoir différents types.T(rows,vars)renvoie une table ;T{rows,vars}extrait le contenu ;T.Varsélectionne une variable. - Un
timetablea en plus des temps de ligne. Triez, validez les fuseaux horaires et l'unicité, puis utilisezretime/synchronizeintentionnellement. - Les sentinelles de valeur manquante sont spécifiques au type :
NaN,NaT,<missing>,<undefined>et les vecteurs de caractères vides. Les tableaux d'entiers et logiques n'ont pas de sentinelle standard. - Définissez les options d'importation plutôt que de vous fier à l'inférence pour les données de production. Préservez les unités, fuseaux horaires, noms de variables, encodages et règles de valeurs manquantes.
Lisez Import/export de données.
Graphiques et exportation
Utilisez des handles de figure/axes explicites et tiledlayout ; étiquetez les unités ; définissez les limites, les échelles de couleurs, les tailles de police et les colormaps délibérément. Préférez exportgraphics à saveas pour une sortie de publication. Dans R2026a, il exporte en raster, PDF/EPS/EMF, SVG, GIF et HTML interactif ; les capacités de format diffèrent. Spécifiez ContentType="vector" pour une sortie PDF/SVG appropriée et Resolution pour une sortie raster. Examinez l'accessibilité et le comportement du raster intégré.
Lisez Graphiques et exportation.
Fichiers MAT et échanges
- La version 7 est le
savepar défaut normal ;matfilecrée par défaut la version 7.3. Les versions 4/6/7/7.3 diffèrent en types, compression et limites par variable. - La version 7.3 est basée sur HDF5, pas un contrat d'échange HDF5 arbitraire. L'accès partiel et le chunking peuvent aider pour les grands tableaux.
- Ne chargez jamais un fichier MAT non fiable. Inventoriez d'abord les en-têtes/ensembles de données. Les objets peuvent invoquer un comportement de désérialisation de classe ; le contenu opaque/fonction/natif nécessite une escalade.
- Préférez CSV/JSON/Parquet/HDF5 avec un schéma documenté pour les échanges simples. Ne renommez pas les charges utiles pickle en fichiers MAT et ne désérialisez pas pickle.
Lisez Import/export de données.
Projets, analyse et tests
- Utilisez MATLAB Projects pour des chemins contrôlés, des tâches de démarrage/arrêt, des dépendances, le contrôle de source et des points d'entrée reproductibles. Examinez les actions du projet avant d'ouvrir un projet non fiable.
matlab.codetools.requiredFilesAndProductset l'analyseur de dépendances sont des approximations statiques ; la répartition dynamique peut entraîner des manques ou des faux positifs. Un rapport de produits requis ne prouve pas qu'une licence est disponible.- Utilisez l'analyseur de code (
codeIssues; les flux de travail texte hérités peuvent utilisercheckcode) etcodeCompatibilityReportavant la migration. - MATLAB de base inclut des flux de travail
matlab.unittestbasés sur des scripts, fonctions et classes. Les exécutions parallèles nécessitent Parallel Computing Toolbox. La sélection basée sur les dépendances, les tableaux de bord de qualité plus riches, les tests générés et les fonctionnalités avancées de couverture/équivalence peuvent nécessiter MATLAB Test ou d'autres produits. - R2026a
runtestsouvre et ferme automatiquement un projet lorsque les tests cibles appartiennent à un projet qui n'est pas déjà ouvert. Tenez compte des actions de démarrage et d'arrêt avant d'utiliser ce comportement.
Lisez Programmation et Exécution/tests.
Intégration Python, figée à R2026a
- R2026a prend en charge CPython 64 bits 3.9-3.13 pour l'interface MATLAB vers Python, MATLAB Engine pour Python et MATLAB Compiler SDK pour Python.
- Le paquet PyPI R2026a actuel examiné ici est
matlabengine==26.1.12(publié le 2026-05-08). Il nécessite une installation de R2026a ; MATLAB Runtime seul est insuffisant. R2026a est également livré avec une distribution Engine préinstallée sous un cheminmatlabrootnommé. - L'installation du paquet n'accorde pas de licence MATLAB ou de boîte à outils. Configurez un interpréteur/exécutable nommé ; n'imprimez pas l'environnement complet,
PATH,PYTHONPATHou les informations d'identification. pyenvcontrôle la sélection de l'interpréteur MATLAB vers Python. Python en processus nécessite généralement de redémarrer MATLAB pour changer ; Python hors processus peut être terminé et reconfiguré.- Démarrer Engine est une action d'exécution explicite :
matlab.engine.start_matlab()démarre un processus MATLAB et peut utiliser une licence. Ne l'appelez jamais simplement pour vérifier la disponibilité. - Vérifiez la sémantique de conversion pour les tableaux NumPy, DataFrames pandas, tables/timetables, chaînes/valeurs manquantes, datetime/duration, dictionnaires, forme/ordre et les cas non pris en charge (sparse, objet, catégoriel).
Lisez Intégration Python.
CLI d'assistance locales
Chaque assistant est sans réseau, limité, rejetant les liens symboliques et non exécutant. Exécutez depuis ce répertoire de compétence avec Python 3.11+. Bash est autorisé uniquement pour invoquer ces CLI Python et les commandes de validation ; ne l'utilisez jamais pour exécuter un plan argv MATLAB/Octave généré ou un artefact non fiable.
| Assistant | Objectif |
|---|---|
scripts/plan_batch_command.py | Produire argv MATLAB/Octave révisé ; jamais exécuter |
scripts/scan_m_code.py | Analyser le texte .m et signaler les risques opaques .mlx/MEX |
scripts/validate_project_manifest.py | Valider les chemins et l'état déclaré du produit/licence |
scripts/inventory_mat_file.py | Inventaire en-tête/métadonnées ; jamais appeler loadmat |
scripts/plan_python_compatibility.py | Vérifier la compatibilité R2026a CPython/Engine |
scripts/reproducibility_report.py | Hacher les artefacts locaux nommés et émettre un rapport limité |
scripts/generate_function_scaffold.py | Simulation ou création d'échafaudages de fonctions et de tests unitaires |
python scripts/scan_m_code.py path/to/source --root path/to/project
python scripts/plan_batch_command.py matlab script path/to/main.m --root path/to/project
python scripts/validate_project_manifest.py project-manifest.json --root path/to/project
python scripts/inventory_mat_file.py data.mat --root path/to/project
python scripts/plan_python_compatibility.py --python-version 3.13
python scripts/reproducibility_report.py --root path/to/project --file src/analyze.m
python scripts/generate_function_scaffold.py analyzeSignal --root path/to/project
Le générateur d'échafaudage par défaut est en mode simulation ; l'écriture nécessite --write et refuse les collisions. SciPy et h5py sont des backends d'inventaire optionnels ; si autorisé, ajoutez les versions exactes révisées au fichier de verrouillage du projet de l'appelant. Ils ne sont pas requis pour --help ou l'inventaire d'en-tête uniquement, et cette compétence n'effectue pas d'installation de paquets.
Références
- Programmation, espaces de travail, projets, analyse, tests
- Matrices, indexation, types, valeurs manquantes, performance
- Méthodes numériques, tolérances, RNG, limites des boîtes à outils
- Graphiques et
exportgraphics - Import/export, tables/timetables, sémantique et sécurité MAT
- Exécution et migration en ligne de commande MATLAB/Octave
- Interopérabilité MATLAB et Python
- Différences de compatibilité GNU Octave 11.3.0
Les actifs JSON inclus sont le manifeste de projet, le manifeste de reproductibilité et la table Python R2026a. Il n'y a pas de répertoire templates/ et aucun fichier Markdown n'est chargé depuis assets/ ; les tests de liens locaux appliquent ce contrat de paquet.