我想写 接收带有x和y的2x1矩阵的函数。(无标量输入) 可能吗? 我尝试如下:
function [d] = dist(A,B)
d=sqrt(((A(1)-B(1))^2+(A(2)-B(2))^2));
end
A和B是2 * 1矩阵。 如何将vector作为函数的输入??
答案 0 :(得分:1)
如果你想传递两个向量(因为你有A和B,每个有两个元素)作为一个参数,你可以创建一个2x2矩阵或4x1向量来传入。或者你可以决定传入一个单元格数组(这会给你更多的灵活性)。例如:
A = [1 2];
B = [4 5];
C = [A; B];
d = myDistance(C);
function m = myDistance(x)
dxy = diff(x); % do both x(2,1) - x(1,1) and x(2,2) - x(1,2) in one operation
m = sqrt(sum(dxy.^2));
或者,将A
和B
作为两个单独的参数传递(从可读性上讲很有意义)应该按照您在问题中描述的方式工作...
答案 1 :(得分:1)
我对你的问题有不同的解释,我想你问的是如何使你的函数输出两个(x,y)坐标列表的所有距离?如果是这样的话就像这样:
function [d] = Dist(A,B)
d=sqrt(((A(:,1)-B(:,1)).^2+(A(:,2)-B(:,2)).^2));
end
因此,您需要将^
从矩阵运算更改为元素向量运算.^
,然后您需要访问第一列,但所有行,即(1,:)
e.g。
A = [0,0;
0,1;
1,1]
B = [1,1;
1,1;
1,1]
Dist(A,B)
ans =
1.41421
1.00000
0.00000
顺便说一句,你可以像这样结束这个功能,但仍然得到相同的结果:
function [d] = Dist(A,B)
d=sqrt(sum((A-B).^2,2));
end