2016-04-02 19 views
0

以下は三辺測量用のコードです。 "ye"と "xe"(コードの終わり)で表されるノードの推定位置には、例えばx(2)= 4、y(2)= 4の第2ノードの場合に、位置はxe(2)= 3.999999999999999、ye(2)= 3.999999999999999、4,4の代わりです。同様に、第3のノード、すなわちx(3)= 3、y(3)= 0は、推定位置は0でなくxe(3)= 3(これは問題ない)およびye(3)= - 4.440892098500626e-16である。このエラーの原因とその原因を示唆してください。宜しくお願いします。三辺測量コードのエラーMatlab

x = [1,4,3]; % X coordinates of the three nodes to be localized 
y = [4,4,0]; % X coordinates of the three nodes to be localized 

% X and Y coordinates of the three antennas(a, b and c) that will be used 
% to localize the three nodes mentioned above 
xa=2; ya=3; 
xb=1; yb=2; 
xc=3; yc=2; 

for i=1:3 
% Find distances from user to all 3 transmitters: 
da = sqrt((x(i)-xa)^2+(y(i)-ya)^2); 
db = sqrt((x(i)-xb)^2+(y(i)-yb)^2); 
dc = sqrt((x(i)-xc)^2+(y(i)-yc)^2); 

va = ((db*db-dc*dc) - (xb*xb-xc*xc) - (yb*yb-yc*yc))/2; 
vb = ((db*db-da*da) - (xb*xb-xa*xa) - (yb*yb-ya*ya))/2; 

temp1 = vb*(xc-xb) - va*(xa-xb); 
temp2 = (ya-yb)*(xc-xb) - (yc-yb)*(xa-xb); 

% Estimated user position: 
ye(i) = temp1/temp2; 
xe(i) = (va - y(i)*(yc-yb))/(xc-xb); 
end 

答えて

0

デフォルトでは、作成する数値はすべて64ビットの倍精度浮動小数点数(または 'double')です。これは、たとえばisa(42, 'double')の結果を確認することで確認できます。

あなたが言及している 'エラー'は、整数が必ずしも正確な浮動小数点表現を持つとは限らないという事実によるものです。実際には、これは問題ではありません(10e-16はかなり小さい数字です)。あなたのコード(少なくともこの観点から、私はあなたの数学をチェックしていませんでした)は問題ありません。心配しないでください。

浮動小数点数の構築方法の詳細については、Wikipediaなどのソースを参照してください。