假设 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
但是,如果有解决方案,我想保留该函数的接口。
感谢您的帮助。
答案 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中,您应使用%
而不是//
进行评论
这些是一些相关的问题: