2015-05-29 95 views
1

我有兩個向量XYZ具有不同的大小。我們可以稱之爲數據1和數據2,其中:MATLAB - 與向量的相關

Data1 = [1000 3:55 2000; ... 
      950 2200 4.5; ... 
     1050 2350 5.5; ... 
     1025 2500 6; ... 
     1075 2600 7; ... 
     1000 2700 8]; 

Data2 = [1000 2650 7.95; ... 
     1000 2750 8.16; ... 
     1000 2700 9; ... 
     1025 3000 10]; 

可接受的最小差的點之間是100米的深度(Z)的位置(X,Y)和0.2。

在這種情況下,矢量之間的點將是P_Data1 = [1000 2700 8]和P_Data2 = [1000 2650 7.95],因爲距離是可以接受的,並且深度是最接近的。

有誰知道,能做到這一點的相關性,以幫助我的功能?我認爲,在Matalab中,這個問題有一些功能和高性能,因爲我會對數千個點進行計算。

我目前使用嵌套循環,但表現很糟糕,因爲我計算所有的距離,然後對每個點的深度之間所有分歧,並過濾矩陣。

總之,我想和不同的尺寸,以所確定的範圍的兩個矢量之間再降深處發現的點。

我感謝所有幫助!

+1

所以,你要尋找的是也符合在x和y的要求,最近深度測量? – nkjt

+1

'Data1'中有一個錯誤。我認爲它應該是'1000 3.55 2000;'而不是'3:55'。 – kkuilla

+0

嗯,這是一個愚蠢的問題,但我不認爲你需要這種關聯。基於你所說的,你可以簡單地從數據2中減去數據1,它返回一個矩陣,取其絕對值(即eq取每個元素的絕對值),然後通過第1列和第2列的條件進行過濾(簡稱XY)必須小於200,第3列必須小於0.2,我在這裏做錯了什麼? – GameOfThrows

回答

1
Data1 = [950 2200 4.5; ... 
     1050 2350 5.5; ... 
     1025 2500 6; ... 
     1075 2600 7; ... 
     1000 2700 8]; 

Data2 = [1000 2650 7.95; ... 
     1000 2750 8.16; ... 
     1000 2700 9; ... 
     1025 3000 10]; 

vec1 = Data1(:,3); 
vec2 = Data2(:,3); 
[p,q] = meshgrid(vec1, vec2); 
output1 = 0; %initial set 

while output1 == 0 
sub = [abs(p(:)-q(:))]; 
[M,I] = min(sub); 
IndData1 = floor(I/4); 
IndData2 = mod(I,IndData1); 

%this basically computes the smallest possible Z 
%Check if it works for condition 2: 
checkcolumn1 = abs(Data1(IndData1,1) - Data2(IndData2,1)); 
checkcolumn2 = abs(Data1(IndData1,2) - Data2(IndData2,2)); 
if checkcolumn1 < 200 && checkcolumn2 <200 
    output1 = Data1(IndData1,:); 
    output2 = Data2(IndData2,:); 
else 
min(sub) = 1000000 %huge high number to basically remove the min 
end 
end 

所以這個程序應該做你問什麼,基本上,它首先計算在Z列的最小,你可以添加一個條件,它具有的方式小於0.2,我只是假設有必須是小於0.2的某個值。然後它會嘗試查看是否可以實現第一個條件。雖然它使用循環進行搜索,但實際上它非常高效,因爲只要找到正確的值,它就會跳出循環。