簡體   English   中英

三邊測量代碼Matlab中的錯誤

[英]Error in trilateration code Matlab

下面寫的是三邊測量的代碼。 在由“ ye”和“ xe”(代碼結尾)表示的節點的估計位置中引入了非常小的誤差,例如在第二個節點的情況下,即x(2)= 4和y(2)= 4位置是xe(2)= 3.999999999999999和ye(2)= 3.999999999999999,而不是4,4。 同樣,第三個節點即x(3)= 3,y(3)= 0,估計位置為xe(3)= 3(可以)和ye(3)=-4.440892098500626e-16而不是零。 請提出是什么原因導致此錯誤以及如何將其刪除。 最好的祝福。

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

默認情況下,在MATLAB中,您創建的每個數字都是一個64位雙精度浮點數(或“ double”)。 您可以通過檢查isa(42, 'double')的結果來驗證這一點。

您提到的“錯誤”是由於整數不一定具有精確的浮點表示形式。 實際上,這不是問題(10e-16是一個很小的數字,對吧?)。 您的代碼(至少從這個角度來看,我沒有檢查您的數學知識)很好。 不用擔心

有關如何建立浮點數的更多信息,請查閱Wikipedia或類似來源。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM