向量作为matlab中的函数输入?

时间:2013-09-18 12:48:50

标签: matlab

我想写 接收带有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作为函数的输入??

2 个答案:

答案 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));

或者,将AB作为两个单独的参数传递(从可读性上讲很有意义)应该按照您在问题中描述的方式工作...

答案 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