Если у вас есть функция, которая загружает данные из MAT-файла и обнаруживает, что MATLAB® не возвращает ожидаемые результаты, проверьте, имеют ли какие-либо переменные в MAT-файле то же имя, что и функция MATLAB. Общие имена переменных, которые конфликтуют с именами функции, включают i
, j
, mode
, char
, size
, и path
.
Эти неожиданные результаты происходят, потому что, когда вы выполняете функцию, MATLAB предварительно обрабатывает весь код в функции перед ее запуском. Однако вызовы на load
не обработаны предварительно, что означает, что MATLAB не знает переменных в вашем MAT-файле. Переменные, которые имеют то же имя, что и функции MATLAB, поэтому предварительно обработаны как функции MATLAB, вызывая неожиданные результаты. Это отличается от скриптов, которые MATLAB предварительно обрабатывает и выполняет линию за линией, подобно Командному окну.
Например, рассмотрим MAT-файл с переменными height
, width
, и length
. Если вы загружаете эти переменные в функцию, такую как findVolume
MATLAB интерпретирует ссылку на length
как вызов MATLAB length
function, и возвращает ошибку.
function vol = findVolume(myfile) load(myfile); vol = height * width * length; end
Error using length Not enough input arguments.
Чтобы избежать путаницы, при определении функции выберите один (или несколько) из следующих подходов:
Загрузите переменные в массив структур. Для примера:
function vol = findVolume(myfile) dims = load(myfile); vol = dims.height * dims.width * dims.length; end
Явным образом включите имена переменных в вызов load
функция. Для примера:
function vol = findVolume(myfile) load(myfile,'height','width','length') vol = height * width * length; end
Инициализируйте переменные в функции перед вызовом load
. Чтобы инициализировать переменную, назначьте ее пустой матрице или пустому символьному вектору. Для примера:
function vol = findVolume(myfile)
height = [];
width = [];
length = [];
load(myfile);
vol = height * width * length;
Чтобы определить, связано ли конкретное имя переменной с функцией MATLAB, используйте exist
функция. Значение возврата 5 определяет, что имя является встроенной функцией MATLAB.