2016-04-11 72 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