Dateinamen dürfen (speziell unter Windows) nach großzügigeren Regeln gewählt werden als Namen in Matlab. Hier wird darauf hingewiesen, welche Fehlerquellen sich dadurch eröffnen.
Namen (für Variablen) in Matlab

In Matlab gibt es Restriktionen für die Bildung von Namen: Einem Buchstaben können weitere Buchstaben, Ziffern und der Unterstrich folgen. Andere Zeichen sind (sinnvollerweise) nicht erlaubt. Ein Name kann (in den neueren Matlab-Versionen) maximal 63 Zeichen enthalten (abzufragen mit der Function namelengthmax).

BuTFunctionnamesDie Bezeichnungen der in Matlab verfügbaren Functions sind nicht geschützt. Der Benutzer kann also (versehentlich oder absichtlich) Variablen mit diesen Namen erzeugen, die dann Vorrang haben. Das nebenstehende Command Window gibt eine Kostprobe von diesen Möglichkeiten (in den ersten drei Zeilen), die man auf keinen Fall nutzen sollte.

Dass sogar die Berechnung von cos1 funktioniert, obwohl sin und tan auf der rechten Seite wie die Functions (scheinbar) mit einem Argument aufgerufen werden, liegt an der Interpretation von Variablen in Matlab: Einfache Variablen sind auch Matrizen (mit nur einem Element), auf der rechten Seite wird also jeweils das erste Element der Matrizen sin bzw. cos angesprochen. Deshalb führt die Berechnung von cos2 zu einer Fehlerausschrift.

Andererseits ist diese Verhaltensweise auch ein nicht zu unterschätzender Vorteil: Man braucht sich nicht bei jedem zu vergebenden Namen die Frage zu stellen, ob dieser vielleicht mit dem Namen einer der unglaublich vielen Matlab-Functions kollidiert.

Aber: Vorsicht bei vorübergehend unbeaufsichtigten Keyboards während einer Matlab-Session: Ein Scherzbold kann blitzschnell einmal  pi=9 eingeben. Das  clear all am Anfang eines Matlab-Scripts schützt in aller Regel vor solchen Scherzen.

Kollision eines Dateinamens mit dem Namen einer Variablen

BuTFlaeche0CW02Eine wahrlich nicht seltene Strategie in Matlab ist, mit Rechnungen im Command Window zu beginnen, um sich dann doch zu entschließen, ein Script zu erzeugen. Das Command Window rechts zeigt den Anfang einer solchen Sitzung (Flächenberechnung für einen Kreis), und das folgende Bild die Wiederholung mit einem Script, wobei der Wert für r geändert wurde.

BuTFlaeche102

BuTFlaeche1CW03Das Script wird gestartet (z. B. mit Debug | Save and Run), wobei es (vermeintlich sinnvollerweise) unter dem Dateinamen Flaeche.m abgespeichert wird. Das Ergebnis (siehe Command Window rechts) entspricht nicht den Erwartungen: Die (vermeintliche) Ausgabe der Fläche in Zeile 3 des Scripts ist falsch. Die Umbenennung der Variablen in Zeile 3 und ein Neustart ...

BuTFlaeche203

BuTFlaeche2CW02... bringt das gleiche (vermeintlich falsche) Ergebnis (Command Window rechts). Weil die ausgegebene Variable aber immer noch Flaeche heißt (und nicht A wie im geänderten Script), wird klar, was hier passiert ist: Obwohl das Script über "Save and Run" gestartet worden ist, wurde es nicht abgearbeitet, weil immer noch die im (Command Window erzeugte) Variable Flaeche existiert, die Vorrang hat vor dem Script mit dem Namen Flaeche.m. Auch das clear all in der ersten Zeile des Scripts nützt natürlich nichts, wenn das Script gar nicht abgearbeitet wird.

Mit einigen Eingaben direkt in das Command Window wird das deutlich:

BuTFlaeche3CW

Wenn in das Command Window nur Flaeche eingegeben wird, reagiert Matlab mit der Ausgabe des Wertes der Variablen Flaeche. Wenn nun zunächst clear all eingegeben wird (löscht alle Variablen) und danach noch einmal Flaeche eingegeben wird, existiert eine Variable dieses Namens nicht mehr und Matlab sucht nach einem Script Flaeche.m, findet es und arbeitet es ab.

Es ist sicher sinnvoll, sich die folgende Modellvorstellung von der Arbeit von Matlab klar zu machen.

So arbeitet Matlab:

  • Arithmetische Ausdrücke, die man in das Command Window eingibt, werden berechnet, das Ergebnis kann einer durch einen Namen zu identifizierenden Variablen zugewiesen werden. Wird der Ausdruck nicht mit einem Semikolon abgeschlossen, wird das berechnete Ergebnis auch in das Command Window ausgegeben.
     
  • Besteht ein in das Command Window eingegebener Ausdruck nur aus dem Namen einer Variablen (ohne abschließendes Semikolon, z. B.: Flaeche), dann wird der Wert der Variablen in das Command Window ausgegeben. Wenn eine solche Variable nicht existiert, sucht Matlab nach einer .m-Datei mit diesem Namen (z. B.: Flaeche.m) und arbeitet im Erfolgsfall diese ab.
     
  • Wenn man ein Matlab-Script aus dem Editor heraus startet (z. B. über das Menüangebot Debug | Save and Run oder mit der Funktionstaste F5), dann sollte man die Vorstellung haben, dass dies auch durch Eingabe des Namens des Scripts (ohne Extension .m) in das Command Window realisiert wird. Das bedeutet, dass eine eventuell existierende Variable gleichen Namens Vorrang hat und das Script in solchem Fall gar nicht abgearbeitet wird.
     
  • Mit dieser Vorstellung vom Start eines Scripts aus dem Editor wird auch klar, warum die Restriktionen, die in Matlab für die Bildung von Namen von Variablen gelten, auch für die Dateinamen einzuhalten sind. Die Nichteinhaltung dieser Regel kann zu sehr merkwürdigen Fehlern führen, weil das Abspeichern unter unzulässigen Namen nicht bemängelt wird (sofern der Dateiname vom Betriebssystem akzeptiert wird, siehe nachfolgendes Beispiel).
     
  • Diese Vorstellung vom Start eines Scripts gilt auch für Function files, die Input-Parameter übernehmen können. Beim Start aus dem Editor werden keine Parameter übergeben, so als würde man nur den Dateinamen (ohne Parameter) über das Command Window eingeben (und deshalb müssen in solchem Fall mit einer nargin-Abfrage Standardwerte vorgesehen werden).

BuTFlaeche-2Keine Sonderzeichen in Dateinamen!

Das oben demonstrierte Beispiel (Flächenberechnung) hätte man durchaus noch etwas verwirrender anlegen können, wenn man die 2. Variante des Scripts (um die erste nicht zu überschreiben) als
Flaeche-2.m gespeichert hätte. Das nebenstehende Command Window zeigt, was sich dann ergeben hätte.

Nach der oben unter "So arbeitet Matlab" gegebenen Modellvorstellung ist klar, was passiert ist: Der Start eines Matlab-Scripts mit dem Namen Flaeche-2.m aus dem Editor heraus ist gleichwertig mit dem Eingeben von Flaeche-2 in das Command Window. Dies wird als arithmetischer Ausdruck interpretiert, eine Variable Flaeche ist bekannt, also kann gerechnet und ausgegeben werden (und das Script
Flaeche-2.m wird gar nicht gestartet).

Dass Fehler dieser Art recht beliebt sind, hat der Autor dieser Zeilen mit seinen Studenten immer wieder erfahren, weil den Dateien über ihren Namen gern auch Datum-Informationen beigefügt werden. Und weil Windows fast jede Art von Dateibezeichnung gestattet, ist auch der Dateiname erlaubt, der in der Kopfleiste des folgenden Editor-Fensters zu sehen ist (vergeben am 27. Mai 2006). Dass die Antwort im Command Window nicht das Ergebnis der sin-Berechnung ist, kann man sofort erkennen:

BuT2006-5-27     BuT2006-5-27CW

Vorsicht!

Die Fehler (aus der Sicht des Programms Matlab sind es gar keine Fehler), die in diesen Demonstrationsbeispielen sofort zu erkennen sind (weil man gewisse Erwartungen an die Ergebnisse hat), können sich bei aktuellen Problemen ganz hinterlistig verstecken.

Liebe Matlab-Entwickler,

ich weiß, der Editor ist das Bindeglied zum Datei-System des Betriebssystems und beachtet dessen Regeln, aber dies ist der Matlab-Editor! Vielleicht sollte er in einer zukünftigen Version beim Speichern und beim Laden einer Datei mit kritischem Namen eine Warnung ausgeben!?