上篇文章介紹了最小二乘法的理論與證明、計算過程,這裡給出兩個最小二乘法的計算程式代碼;
Octave代碼
clear all;close all;
% 拟合的資料集
x = [2;6;9;13];
y = [4;8;12;21];
% 資料長度
N = length(x); % 3
%% 計算x平均值
m_x = sum(x)/N;
%%
% 計算t的平均值
m_t = sum(y)/N;
%%
% 計算t*x的平均值
m_xt = sum(y.*x)/N;
%%
% 計算x平方的平均值
m_xx = sum(x.*x)/N;
%% 根據公式計算出f(x;m,c)=mx+c中m的值
w_1 = (m_xt - m_x*m_t)/(m_xx - m_x^2);
%% 計算出f(x;m,c)=mx+c中c的值
w_0 = m_t - w_1*m_x;
%% 在畫闆上繪制出資料集的點
figure(1);hold off
plot(x,y,'bo','markersize',5,'linewidth',2)
set(gca,'xtick',0:1:25)
% 畫布大小為25*25
xplot = [0 25];
yplot = [0 25];
xlim(xplot)
ylim(yplot)
hold on
% 列印出拟合的線段
plot(xplot,w_0+w_1*xplot,'r','linewidth',2)
set(gca,'yTick',0:1:150)
xlabel('x');
ylabel('y');
運作結果

文章首發位址:Solinx
http://www.solinx.co/archives/717