【问题标题】:Plotting a Line from a known point to points in a fitted curve in MATLAB在 MATLAB 中绘制从已知点到拟合曲线中点的线
【发布时间】:2014-11-15 11:28:16
【问题描述】:

我有一组数据,我在 MATLAB 中使用 2 的幂拟合并绘制并拟合了它们的点。我正在尝试在该曲线上绘制 3 条线作为切线。这些行中的每一行都从 (x,y) 的坐标开始:(2,0) (4,0) (9,0)。

MATLAB 是否可以从曲线绘制直线到第一个已知点,直到直线与曲线只有一个解(与曲线相切)?

我觉得这需要某种指定的间隔,告诉 MATLAB 步进坐标,直到找到最近的点。有谁知道这是否已经完成或完全可以完成?

【问题讨论】:

  • 我可能错了,但是给定曲线c的拟合参数a,b,...,你不能直接求解对于 min[c(a,b,...) - (x,y)]?有several methods
  • 当然 Matlab 几乎可以做你想做的所有事情,但我不明白你想要什么。也许添加你已经拥有的情节,并添加一些你仍然想添加的线条的画线?

标签: matlab


【解决方案1】:

从一个不在曲线上的点开始,你想画一条与之相切的线。在像 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 或 xmin 和 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')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多