Matlab:arrayfun,两个矩阵X,Y作为向量的组成部分

时间:2019-07-04 06:43:37

标签: arrays matlab function parameter-passing

假设 X Y 是给定区间内的坐标矩阵

xc = 0, yc = 0
xl = linspace(xc - 10, xc + 10, 2);
yl = linspace(yc - 10, yc + 10, 2);
[X,Y] = meshgrid(xl,yl);

有趣的是某些功能测试(v)的句柄

fun = @(v)test(v);

如何合并两个矩阵 X Y ,以便它们表示向量 v的分量 x,y

res = arrayfun(fun, [X,Y]); //First processed X and then Y

不幸的是,此解决方案不起作用。...

修改函数以传递两个参数 x y 的另一种方式

fun = @(x, y)test(x, y);
res = arrayfun(fun, X, Y); //This works well

但是,如果有解决方案,我想保留该函数的接口。

感谢您的帮助。

2 个答案:

答案 0 :(得分:4)

  • fun重新定义为fun = @(x, y)test([x,y]);
  

无需修改功能test()

xc = 0;
yc = 0;
xl = linspace(xc - 10, xc + 10, 2);
yl = linspace(yc - 10, yc + 10, 2);
[X,Y] = meshgrid(xl,yl);

% Given function test
test =@(v)v(1) + v(2);


% pass x, y as a vector  
fun = @(x, y)test([x,y]);


res = arrayfun(fun, X, Y);

% X =

   -10    10
   -10    10

% Y =

   -10   -10
    10    10

% fun(x, y) = x + y

% res =

   -20     0
     0    20

答案 1 :(得分:1)

来自Matlab doc

B = arrayfun(func,A)将函数func应用于A的元素,一次仅一个元素

B = arrayfun(func,A1,...,An)func应用于数组A1,...,An的元素,以便B(i) = func(A1(i),...,An(i))

因此,您以错误的方式使用arrayfun

使用for循环或两个嵌套循环。

for i=1:size(X,1)
    for j=1:size(X,2)
    res(i,j)=fun([X(i,j),Y(i,j)])
    end
end

您要做什么?

此外,在Matlab中,您应使用%而不是//进行评论

这些是一些相关的问题:

arrayfun when each row of the array is an input

Passing a vector as multiple inputs to a function