Используйте переменные рабочего пространства в функции Matlab

Я хотел бы использовать данные, загруженные в мое рабочее пространство, в функции Matlab. Это начало моей функции.

function [totalProfit] = compute(p,exit)

%% Declaration of variables

entry=0;
T = length(data);
.
.
.
end

Я получаю сообщение об ошибке:

Неопределенная функция или переменная "данные".

Где ошибка?

3 ответа

Решение

Переменная data, вероятно, была определена вне функции, поэтому она выходит за рамки.

Проходить data в качестве параметра для compute и тогда он будет доступен внутри функции.

Вы можете использовать evalin для работы с переменными из другого рабочего пространства. В вашем примере это может быть

T = evalin('caller','length(data)')

Но учтите, что в большинстве случаев вы получаете более чистый код, если определяете переменную в качестве входного аргумента для функции. Так что для вашего случая это будет

function [totalProfit] = compute(p,exit,data)    
   T = length(data) ;
end

Ран верен, но я хотел упомянуть кое-что еще. Как правило, только переменные, которые передаются в качестве аргументов функции, могут использоваться внутри этой функции, поэтому, если вы хотите использовать существующие переменные внутри функции, передайте их в качестве входных аргументов.

Можно создавать глобальные переменные, которые позволяют вам использовать их внутри функций, не передавая их в качестве аргументов, но обычно это не лучший способ написания кода. Временами, когда я использовал глобальные переменные, я вызываю несколько функций из одного скрипта, и у меня есть некоторые константы, которые будут использоваться всеми функциями (например, гравитация является общей). Альтернативой глобальным переменным является использование структуры, в которой есть переменные, которые вы хотите передать функции, поэтому вам нужен только один дополнительный входной аргумент, но вы все равно должны быть немного осторожнее.

Другие вопросы по тегам