我一直在网上搜索几个早上但什么都没发现,希望你能帮忙。
我有一个像这样的匿名函数
f = @(x,y) [sin(2*pi*x).*cos(2*pi*y), cos(2*pi*x).*sin(2*pi*y)];
需要在点数组上进行评估,例如
x = 0:0.1:1;
y = 0:0.1:1;
w = f(x',y');
现在,在上面的例子中一切正常,结果w是一个11x2矩阵,每行中有正确的值f(x(i),y(i))。 当我将我的函数更改为具有常量值时会出现问题:
f = @(x,y) [0, 1];
现在,即使像之前一样使用数组输入,我也只得到一个像w = [0,1]的1x2数组; 当然,我希望拥有与以前相同的结构,即11x2矩阵。
我不知道为什么Matlab会这样做......
编辑1 对不起,我认为从原始问题中写的内容非常清楚,但是我看到你们中的一些人在询问,所以这里有一个澄清:我想要的是再次使用一个11x2矩阵,因为我用数组来提供函数有11个元素。 这意味着我希望输出与第一个示例中的输出完全相同,只需更改其中的值:一个包含11行和2列的矩阵,第一列中的值仅为0,而第二列中的值仅为1,因为对于所有x(i)和y(i)答案应该是向量[0,1]。 这意味着我希望:
w = [0 1
0 1
0 1
...
0 1]
对我来说似乎很自然......
答案 0 :(得分:1)
您正在定义一个函数f = @(x,y) [0, 1];
,它具有输入参数x,y和输出[0,1]
。您还期望发生什么?
更新
这应符合您的描述:
g=@(x,y)[zeros(size(x)),ones(size(y))]
g(x',y')
答案 1 :(得分:0)
将匿名函数f
定义为
f = @(x,y) [0,1];
对于任何输入[0,1]
和x
,自然返回y
,而与这些向量的长度无关。
这种行为也使我感到困惑,直到我意识到我期望f(a,b)
像写过一样遍历a
和b
for inc = 1:length(a)
f(a(inc), b(inc))
end
但是,f(a,b)
不会在输入的长度上循环,因此无论[0,1]
和a
的长度如何,它仅返回b
。
可以通过将f
定义为
g=@(x,y)[zeros(size(x)),ones(size(y))]
如丹尼尔在他的answer中所述。