exponenta event banner

Непредвиденные результаты при загрузке переменных в функцию

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

См. также

Связанные темы