我在matlab中有这个功能 -
function [c,arr2]=dist1(i,c,arr1,arr2,A,mx,point)
for j=i+1:mx
if arr1(i,j)==1 & A(j)~=0
x1=point(i,1);
y1=point(i,2);
x2=point(j,1);
y2=point(j,2);
d=((((x1-x2).^2)+((y1-y2).^2)).^(0.5));
if d< 0.5
arr2(c)=i;
c=c+1;
[c,arr2]=dist1(j,c,arr1,arr2,A,mx,point);
end
end
end
end
当我调用此函数时,我得到以下错误 -
Integers can only be raised to positive integral powers.
Error in dist1 (line 9)
d=((((x1-x2).^2)+((y1-y2).^2)).^(0.5));
如果我在0.5
的计算中移除d
的幂,这样可以正常工作。为什么我得到这个错误,这句话似乎没有错。我也检查了x1的值前面一行中的,x2,y1,y2,它们是
x1=208 y1=171 x2=207 y2=162
答案 0 :(得分:2)
错误非常明确:
整数只能提升为正整数。
您的x1
,x2
,y1
,y2
个变量似乎是整数数据类型(例如uint8
,int32
,...)。他们需要double
(或single
)来执行该操作。所以,试试
d = double((((x1-x2).^2)+((y1-y2).^2)).^(0.5))^0.5;
另请注意,由于x1
,x2
,y1
,y2
是标量,因此您可以删除这些点:
d = double((((x1-x2)^2)+((y1-y2)^2))^0.5)^0.5;