0

我想写一个函数来接收一个包含 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 矩阵。如何将向量作为函数的输入?

4

2 回答 2

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

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

于 2013-09-18T12:54:49.583 回答
1

我对你的问题有不同的解释,我想你是在问如何让你的函数输出两个 (x,y) 坐标列表的所有距离?如果是这样,那么像这样:

function [d] = Dist(A,B)
    d=sqrt(((A(:,1)-B(:,1)).^2+(A(:,2)-B(:,2)).^2));
end

因此,您需要将^矩阵运算从矩阵运算更改为元素向量运算.^,然后您需要访问第一列但所有行,即(1,:)

例如

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
于 2013-09-18T12:58:09.943 回答