我有一组数据,我的点已经绘制并使用2的幂拟合在MATLAB中。我试图在该曲线上绘制3条直线作为切线。这些行中的每一行都从坐标(x,y):( 2,0)(4,0)(9,0)的坐标开始。
MATLAB是否可以从曲线到第一个已知点绘制直线,直到该线只有一条解(曲线相切)和曲线?
我觉得这需要某种指定的间隔,告诉MATLAB逐步调整坐标,直到找到最近的点。有谁知道这是否已经完成或者可以完成?
答案 0 :(得分:0)
从不在曲线上的点开始,您想绘制一条与其相切的线。在像y = 2 ^ x这样的凸函数的情况下,这仅可能来自曲线下方的点(不在其上方)。
由于你已经有了这个点(称之为(a,b)),你需要这样一条线的斜率。斜率由值(y-b)/(x-a)确定,其中(x,y)在曲线上运行。具体地,“前视”切线的斜率等于所有x> a的(y-b)/(x-a)的最小值。并且“向后看”切线的斜率等于所有x的最大值(y-b)/(x-a)
以上是一个非常直接的实现:我使用find
将搜索限制为x> a或x< a并将min
和max
找到斜坡。
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')