-1

我已经在网上搜索了几个早上,没有找到任何东西,希望你能帮忙。

我有一个像这样的匿名函数

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]

对我来说似乎很自然...

4

2 回答 2

1

您正在定义一个f = @(x,y) [0, 1];具有输入参数 x,y 和输出的函数[0,1]。你还期望发生什么?

更新:

这应该符合您的描述:

g=@(x,y)[zeros(size(x)),ones(size(y))]
g(x',y')
于 2013-10-27T09:49:21.477 回答
0

将匿名函数定义f

f = @(x,y) [0,1];

自然返回[0,1]任何输入xy无论这些向量的长度如何。

这种行为也让我感到困惑,直到我意识到我希望f(a,b)循环a并且b好像我已经写了

for inc = 1:length(a)
    f(a(inc), b(inc))
end

但是,f(a,b)它不会循环其输入的长度,因此[0,1]无论aand的长度如何,它都只会返回b

期望的行为可以通过定义f

g=@(x,y)[zeros(size(x)),ones(size(y))]

正如丹尼尔在他的回答中所说。

于 2018-11-26T19:47:18.053 回答