Прежде всего, вы должны прочитать этот ответ , который дает ряд причин избегать использования eval
.Очень мало случаев, когда необходимо eval
, во всех остальных случаях это просто усложняет ситуацию.В этом случае вы используете для динамического генерирования имен переменных, что считается очень плохой практикой.Как подробно описано в связанном ответе и в последующих статьях, связанных с этим ответом, имена динамических переменных усложняют чтение кода, его труднее поддерживать и медленнее выполнять в MATLAB.
Таким образом, вместо определения функций f1
, f2
, f3
, ... fN
, что вы делаете, это определяете функции f{1}
, f{2}
, f{3}
, ... f{N}
.То есть f
- это массив ячеек, где каждый элемент является анонимной функцией (или любой другой дескриптор функции).
Например, вместо
f1=@(x) a1*x+1;
f2=@(x) a2*x+1;
f3=@(x) a3*x+1;
f4=@(x) a4*x+1;
вы делаете
N = 4;
a = [4.5, 3.4, 7.1, 2.1];
f = cell(N,1);
for ii=1:N
f{ii} = @(x) a(ii) * x + 1;
end
С этими изменениями мы можем легко ответить на вопрос.Теперь мы можем написать функцию, которая выводит сумму функций в f
:
function y = sum_of_functions(f,x)
y = 0;
for ii=1:numel(f)
y = y + f{ii}(x);
end
end
. Вы можете поместить это в файл с именем sum_of_functions.m
или в конец своей функции.файл или файл сценария, это не имеет значения.Теперь, в вашем коде, когда вы хотите оценить y = f1(x) + f2(x) + f3(x)...
, вы пишете y = sum_of_functions(f,x)
.