如何在MATLAB中将最佳拟合线(polyfit)延伸到与y轴在零点相交

3
在MATLAB中,我想绘制带有回归的散点数据。
a = [2004.4 2005.6 2002.1 2002.1 2004.8 2002.6 2003.5 2001.3 2003.5 2002.6];
b = [0.1006 0.0848 0.0502 0.0502 0.0909 0.0385 0.0732 0.0732 0.0896 0.0772];
scatter(a, b, 6);
hold on
p = polyfit(a,b,1);
f = polyval(p,a);
plot(a,f,'Color',[0.7500    0.7500    0.7500],'linewidth',1.5)

然而,我想要延长线条(和x轴),使其穿过 y=0 并在原点处交叉 x 轴,无论那是哪里,让它看起来像这样:

enter image description here

1个回答

3
您只需将点的输入数组更改为 polyval。 您仅使用在 a 中定义的点,并通过这些点绘制最佳拟合线。 因此,请定义更多的点,其中指定了 y=0 发生的点,直到 a 中的最后一个点。鉴于最佳拟合线是 y = mx + b,其中 m 是斜率,b 是截距,则生成 y=0x 值简单地为 -b/m。因此,在 MATLAB 语法中,起始点将简单地是 -p(2)/p(1),这是指您的代码。 polyfit 的输出是一个包含两个值的数组(因为您指定了拟合的顺序为 1),其中第一个是斜率 p(1),最后一个是截距 p(2)

因此,请尝试执行此操作。 我已保留了您的代码,并在我修改的地方放置了注释:

a = [2004.4 2005.6 2002.1 2002.1 2004.8 2002.6 2003.5 2001.3 2003.5 2002.6];
b = [0.1006 0.0848 0.0502 0.0502 0.0909 0.0385 0.0732 0.0732 0.0896 0.0772];
scatter(a, b, 6);
hold on
p = polyfit(a,b,1);
xx = linspace(-p(2)/p(1), max(a)); %// Change
yy = polyval(p, xx); %// Change 
plot(xx,yy,'Color',[0.7500    0.7500    0.7500],'linewidth',1.5) %// Change
xlim([-p(2)/p(1), max(a)]); %// Change

linspace生成从最小值到最大值的线性间隔点数组。默认情况下,点数为100。最小值将是-b/m,最大值将是a中看到的最大值。生成此数组后,我们使用polyval并评估每个值在数组中的线上的点会是什么。我还修改了对您的plot的调用,以便我使用这些新点,并使图形整洁,我更改了显示的x值的限制,使其跨越从x截距到a中的最大值。这是通过xlim完成的,我们可以指定要在图表中关注的最小和最大x值。

我们得到以下图形:

enter image description here


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接