在曲线的一部分上画一条线

时间:2011-04-23 09:34:55

标签: matlab

我有两个数组451x1,我想为我的数据的一部分拟合一条线,对于x = 3.8 -4.1,我想用y = 0来评估对拟合线的截取,你有什么想法吗? (在matlab中) enter image description here

data

3 个答案:

答案 0 :(得分:3)

您可以通过indexing您想要使用的曲线点轻松执行线性回归,并将它们传递给函数POLYFIT。这是执行此操作的代码和拟合线的图:

index = (x >= 3.8) & (x <= 4.1);   %# Get the index of the line segment
p = polyfit(x(index),y(index),1);  %# Fit polynomial coefficients for line
yfit = p(2)+x.*p(1);  %# Compute the best-fit line
plot(x,y);            %# Plot the data
hold on;              %# Add to the plot
plot(x,yfit,'r');     %# Plot the best-fit line
axis([1 7 0 4e10]);   %# Adjust the axes limits

enter image description here

然后你可以计算这条线截取x轴的位置(即y = 0),如下所示:

>> -p(2)/p(1)

ans =

    3.5264

答案 1 :(得分:1)

我只是猜测你的问题是估计一条零y截距的线,虽然老实说,“想要用y = 0来评估对拟合线的截取”对我来说对英语没什么意义。所以这只是一个完整的猜测,除非你选择澄清你的问题。

  1. 删除不在感兴趣区间内的那部分数据。 (或者,如果您愿意,只提取那部分。)

  2. 在感兴趣的数据中插入零y截距线。

    斜率= x(:)\ y(:);

答案 2 :(得分:1)

你会x尊重y,如:

> ndx= find(x>= 3.8& x<= 4.1);
> b= [y(ndx) ones(size(ndx))]\ x(ndx)

现在b(2)是“拦截”行y= 0