Самое надежное решение - инициализировать все ваши переменные в 0
в верхней части функции . Тогда нет никаких шансов, что они не существуют, и они правильно влияют на суммирование.
В качестве альтернативы ...
Вы могли бы (читай: не должен ) здесь использовать очень неприятный трюк eval
для гибкости ...
vars = {'var1','var2','var3','var4'};
tot = 0;
for ii = 1:numel(vars)
if exist(vars{ii}, 'var')
tot = tot + eval(var);
end
end
Я говорю, что это "противно", потому что eval
следует избегать (прочитайте связанный блог). Проверка существования имени переменной смягчает некоторые противоречия, но все еще не идеальна.
Как предлагается в блоге MathWorks по evading eval , лучшим вариантом будет структура с динамичностью c имена полей. Вы можете использовать почти тот же синтаксис, что и выше, но замените оператор if
на
if isfield( myStruct, vars{ii} )
tot = tot + myStruct.(vars{ii});
end
Это позволит избежать динамически именованных переменных и сохранить ваше рабочее пространство чистым!