我想写一个函数来接收一个包含 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 矩阵。如何将向量作为函数的输入?
我想写一个函数来接收一个包含 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 矩阵。如何将向量作为函数的输入?
如果您想传递两个向量(因为您有 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
andB
作为两个单独的参数(这对可读性很有意义)应该按照您在问题中描述的方式工作......
我对你的问题有不同的解释,我想你是在问如何让你的函数输出两个 (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