2013-10-14 136 views
0

如何獲取特定點的座標?Matlab獲取點座標

我想用Y = 18.1得到點的X座標; Y = 33; Y = 70 這些點需要躺在我繪製的功能上。

示例代碼

t = [0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 130 135 140 145 150 155 160 165 170 175 180]; 
y = [0 5 9 19 25 32 46 65 79 90 100 115 123 141 153 159 160 171 181 185 193 200 205 211 215 220 223 222 225 224 228 231 231 228 235 234 231]; 
plot(t,y) , grid on 
+0

你是什麼意思「點需要躺在功能上」?你怎麼能確定他們這樣做?如果繪製的功能不能跨越您正在談論的要點,您是否希望返回錯誤? – chwi

+0

如果您繪製給定的值,繪圖函數將在您的數據點之間進行線性插值。從那裏開始,你必須決定這是否是你想要的,以及如何處理存在多種解決方案的情況。除此之外,'interp1'應該做你想要的... – groovingandi

+0

你的功能顯然不是單調的,因此不可逆。對於某些「Y」值,可能有兩個或多個對應的「X」值。在那種情況下,你想要哪個「X」值? –

回答

1

不幸的是,你正在努力尋找的與y相關t的值,你的函數不是單調的,所以我們需要實際編寫了一個模擬線性插值。請注意,可能有更好的方法,但我現在還不知道。請嘗試以下代碼,其中yVals是您希望關聯的t的值,而possArray將包含可能滿足這些條件的所有t的值。

clc; close all; clear all; 
t = [0 5 10 15 20 25 30 35 40 45 50 55 60 65 70 75 80 85 90 95 100 105 110 115 120 125 130 135 140 145 150 155 160 165 170 175 180]; 
y = [0 5 9 19 25 32 46 65 79 90 100 115 123 141 153 159 160 171 181 185 193 200 205 211 215 220 223 222 225 224 228 231 231 228 235 234 231]; 
plot(t,y) 
grid on 
hold on 
yVals = [18.1,33,70,222.5,230]; 
possArray = cell(1,numel(yVals)); 
iter = 1; 
for val = yVals; 
    poss = []; 
    possNum = 1; 
    for i = 1:numel(y)-1 
     if y(i) <= val && y(i+1) >= val 
      minDiff = val-y(i); 
      yDiff = y(i+1)-y(i); 
      percAlong = minDiff/yDiff; 
      poss(possNum) = (t(i+1)-t(i))*percAlong+t(i);  
      possNum = possNum+1; 
     end 
    end 
    possArray{iter} = poss; 
    iter = iter + 1; 
end  

colors = hsv(numel(yVals)); 
legendCell = cell(numel(yVals)+1,1); 
legendCell{1} = 'Original Line'; 
for i = 1:numel(yVals) 
    plot(possArray{i},yVals(i)*ones(size(possArray{i})),... 
     'x','MarkerSize',10,'LineWidth',2,'Color',colors(i,:)) 
    legendCell{i+1} = ['Values for Y = ' ,num2str(yVals(i))]; 
end 
legend(legendCell) 
hold off 

如前所述,這是線性插值,所以如果你需要更復雜的是你,這個概念應該然而,類似上述

UPDATE

更新代碼稍微乾淨些,並添加了一個圖表,表明單個值可能會出現多種可能性,並且代碼將返回所有可能性。

+0

感謝您的解決方案,它爲我做了一份出色的工作! –

+0

+1所寫的時間 – chwi

+0

@MarianZlatev沒問題。請花時間瞭解它的工作原理。無論是不是作業問題,分析這些事情總是一個好主意,這樣以後你可以更好地裝備,並且可以針對未來問題提出一些創造性的解決方案 – MZimmerman6