我想构造一个匿名函数,该函数通过将M个匿名函数与预先存储的1个变量相乘来接收M> 0个输入。我需要在for循环中迭代地执行此操作,在该循环中,我不能显式插入“ x”,“ y”等作为函数的输入。
让我举一个简单的例子,说明我想要不加循环地获得什么:
f = {@(z) 1; @(z) (-z.^2+1)};
F1 = @(x,y) f{1}(x) * f{2}(y);
F2 = @(x,y) f{1}(y) * f{2}(x);
F3 = @(x,y) F1(x,y) + F2(x,y);
figure; ezmesh(F3,[-1,1,-1,1]);
在这里,我的2个变量分别是x和y,我可以显式地写出
,因此F3(x,y)=(y ^ 2-1)+(x ^ 2-1)。
在执行循环并使用varargin时,似乎无法以某种方式“识别”输入变量的顺序。这就是我想要做的:
f = {@(z) 1; @(z) (-z.^2+1)};
% BUILD F1
F1 = @(varargin) 1;
for i = 1:2
F1 = @(varargin) F1(varargin{i}) .* f{i}(varargin{i});
end
% BUILD F2
F2 = @(varargin) 1; k = 2;
for i = 1:2
F2 = @(varargin) F2(varargin{i}) .* f{k}(varargin{i});
k = k-1;
end
% BUILD F3
F3 = @(varargin) F1(varargin{1}) + F2(varargin{2});
figure; ezmesh(F3,[-1,1,-1,1]);
似乎F1的构建正确(即F1(x,y)= -y ^ 2 + 1),但F2并非正确。从图中可以看出,F2不是-x ^ 2 + 1,而是-y ^ 2 + 1。
对错误有任何想法吗?干杯!