2014-11-15 138 views
0

我有一組數據,其中的點已繪製並使用2的冪在MATLAB中擬合。我試圖畫出3條線作爲切線。這些線中的每條線都從座標(x,y)開始:(2,0)(4,0)(9,0)。從已知點繪製直線到MATLAB中擬合曲線中的點

MATLAB有可能從曲線畫出直線到第一個已知點,直到曲線只有一條曲線(與曲線相切)爲止?

我覺得這需要某種指定的時間間隔,它告訴MATLAB步進座標直到找到最近的點。有誰知道這是否已經完成或可以完成?

+0

我可能是錯的,但考慮到安裝參數_a,B,..._的曲線_c_,你就不能直接解決_min [C(A,B ,. ..) - (x,y)] _?有幾種方法(http://uk.mathworks.com/help/matlab/optimization.html)。 – Notlikethat

+1

當然,Matlab可以做幾乎所有你想做的事情,但我不明白你想要什麼。也許添加你已經有的陰謀,並添加一些線,你仍然想要添加的線或畫線等? –

回答

0

從一個不在曲線上的點開始,你想繪製一條與其相切的線。在像y = 2^x這樣的凸函數的情況下,這隻能從曲線下的一個點(不在其上)。

既然你已經有了它(稱之爲(a,b)),你需要這樣一條線的斜率。斜率由(y-b)/(x-a)值確定,其中(x,y)在曲線上運行。具體而言,「前瞻性」切線在所有x> a上的斜率等於(y-b)/(x-a)的最小值。 「向後看」的切線的斜率等於(yb)/(xa)的最​​大值,這個斜率等於上述的一個非常簡單的實現:我使用find將搜索限制爲x> a或x < a,並用minmax找到斜坡。

x = 0:0.01:4; 
y = 2.^x; 
a = 2; 
b = 3; 
k = min((y(find(x>a))-b)./(x(find(x>a))-a)); 
plot(x,y) 
hold on 
plot(x,k*(x-a)+b,'r') 
k = max((y(find(x<a))-b)./(x(find(x<a))-a)); 
plot(x,k*(x-a)+b,'g') 

tangents