Если имеется функция, загружающая данные из 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 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.