matlab - 如何在 MATLAB 中扩展最佳拟合线(polyfit)以在零处穿过 y 轴

标签 matlab plot regression linear-regression

在 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

最佳答案

您只需将输入的点数组更改为 polyval。您仅使用 a 中定义的点并绘制通过这些点的最佳拟合线。因此,定义 more 点,在其中指定 y=0 发生的点,直到 a 中的最后一个点。考虑到最佳拟合线是 y = mx + b,其中 m 是斜率,b 是截距,x 生成 y=0 的值就是 -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

关于matlab - 如何在 MATLAB 中扩展最佳拟合线(polyfit)以在零处穿过 y 轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35098996/

相关文章:

matlab - 矩阵乘法给出两个不同的答案

matlab - 如何(自动)测量图像中像素缺陷的大小?

python-3.x - fit_intercept 参数如何通过 scikit learn 影响线性回归

r - 将图例添加到具有重叠密度图的 ggplot 直方图

python - 正交匹配追踪回归——我用错了吗?

r - Tidymodels 包 : Visualising a random forest model using ggplot() to show the most important predictors

python - 如何在matlab中进行日志记录: anything similar to logging like python

matlab - 取决于距离函数,matlab 中的 k-means 内存不足?

r - 绘制因子(分类数据)的等价相关矩阵?和混合类型?

python - 将带有背景的文本精确定位在 matplotlib 图的一角