2016-04-11 36 views
0

我写了下面的MATLAB代码来测试最小二乘回归:当我注释掉plot(x, a*x + b);保持在不能正常工作

x = [1 2 3 4 5 6]; 
y = [1 4 9 16 25 36]; 

hold on 
scatter(x, y); 
hold on 
%Linear_regrassion 
    n = length(x); 
    a = (n*sum(x.*y) - sum(x)*sum(y))/n*sum(x.^2) - (sum(x))^2 
    b = mean(y) - a * mean(x) 
%end 
x = 1:8; 
plot(x, a*x + b); 

scatter功能工作正常。它看起来像这样: enter image description here

但是当我添加plot(x, a*x + b);绘制我的推算线,输出看起来是这样的: enter image description here

我的猜测是,我不是用hold on权。我能做些什么来解决这个问题?

+2

检查你的回归系数:'了''是+ 1.0706e 04','B'是'-3.7458e + 04' - 这不可能是适合你显示的蓝色圆圈标记数据,而必须在回归代码中出现错误而不是在绘图中。 – mikkola

+2

看看你的Y轴。那是你的问题。 – MZimmerman6

+0

但的确如此。您正在使用'x'和'y'值来计算回归系数'a'和'b',然后用它们来绘制红线。 – mikkola

回答

5

您对a的计算错误:您需要在计算的分母a中使用括号。但是,hold on运作良好。

x = [1 2 3 4 5 6]; 
y = [1 4 9 16 25 36]; 

scatter(x, y,'*'); 
hold on 
%Linear_regrassion 
    n = length(x); 
    a = (n*sum(x.*y) - sum(x)*sum(y))/(n*sum(x.^2) - (sum(x))^2) 
    b = mean(y) - a * mean(x) 
%end 
x = 1:8; 
plot(x, a*x + b); 
+0

此代码与原始代码有什么区别? – lino

+0

首先,它会产生一个错误。答案也缺乏关于为什么它应该工作的任何细节。 – mikkola

+1

只有在发出绘图命令或带有嵌入式绘图的命令(如scatter())后,才应该使用“hold on”。但真正的“问题”仅仅是情节的出现,因为你的第二个情节比第一个情节有更广泛的y值。 – gariepy