问题
I've been searching the net for a couple of mornings and found nothing, hope you can help.
I have an anonymous function like this
f = @(x,y) [sin(2*pi*x).*cos(2*pi*y), cos(2*pi*x).*sin(2*pi*y)];
that needs to be evaluated on an array of points, something like
x = 0:0.1:1;
y = 0:0.1:1;
w = f(x',y');
Now, in the above example everything works fine, the result w is a 11x2 matrix with in each row the correct value f(x(i), y(i)). The problem comes when I change my function to have constant values:
f = @(x,y) [0, 1];
Now, even with array inputs like before, I only get out a 1x2 array like w = [0,1]; while of course I want to have the same structure as before, i.e. a 11x2 matrix.
I have no idea why Matlab is doing this...
EDIT 1 Sorry, I thought it was pretty clear from what I wrote in the original question, but I see some of you asking, so here is a clarification: what I want is to have again a 11x2 matrix, since I am feeding the function with arrays with 11 elements. This means I expect to have an output exactly like in the first example, just with changed values in it: a matrix with 11 rows and 2 columns, with only values 0 in the first column and only values 1 in the second, since for all x(i) and y(i) the answer should be the vector [0,1]. It means I expect to have:
w = [0 1
0 1
0 1
...
0 1]
seems pretty natural to me...
回答1:
You are defining a function f = @(x,y) [0, 1];
which has the input parameters x,y and the output [0,1]
. What else do you expect to happen?
Update:
This should match your description:
g=@(x,y)[zeros(size(x)),ones(size(y))]
g(x',y')
回答2:
Defining an anonymous function f
as
f = @(x,y) [0,1];
naturally returns [0,1]
for any inputs x
and y
regardless of the length of those vectors.
This behavior puzzled me also until I realized that I expected f(a,b)
to loop over a
and b
as if I had written
for inc = 1:length(a)
f(a(inc), b(inc))
end
However, f(a,b)
does not loop over the length of its inputs, so it merely returns [0,1]
regardless of the length of a
and b
.
The desired behavior can be obtained by defining f
as
g=@(x,y)[zeros(size(x)),ones(size(y))]
as Daniel stated in his answer.
来源:https://stackoverflow.com/questions/19616619/matlab-constant-anonymous-function-returns-only-one-value-instead-of-an-array