Я думаю, что наиболее краткое решение дано в комментарии Михаила.Я уточню это подробнее ...
Во-первых, вы захотите изменить свою анонимную функцию s
, чтобы она могла работать с векторными входами того же размера, что иа также скалярные входные данные (, как предложено Клементом Дж. ) с использованием поэлементных арифметических операторов следующим образом:
s = @(x,y,z) (1-exp(-x.*y)-z).*exp(-x.*y); %# Note the periods
Затем при условии, что у вас есть векторыv
и w
, определенные в данном рабочем пространстве, вы можете создать новую функцию sy
, которая при заданном скалярном значении y
будет суммироваться по s
, вычисленной для каждого набора значений в v
и w
:
sy = @(y) sum(s(v,y,w));
Если вы хотите оценить эту функцию, используя массив значений для y
, вы можете добавить вызов функции ARRAYFUN следующим образом:
sy = @(y) arrayfun(@(yi) sum(s(v,yi,w)),y);
Обратите внимание, что значения для v
и w
, которые будут использоваться в функции sy
, будут фиксированными на то, что они были при создании функции .Другими словами, изменение v
и w
в рабочей области не изменит значения, используемые sy
.Обратите внимание, что я не назвал новую анонимную функцию sum
, поскольку уже существует встроенная функция с таким именем .