File:Linear least squares.svg

Description Illustration of linear least squares.
Date (UTC)
Source self-made with MATLAB, tweaked in Inkscape.
Author Oleg Alexandrov
Permission
(Reusing this file)
Public domain I, the copyright holder of this work, release this work into the public domain. This applies worldwide.
In some countries this may not be legally possible; if so:
I grant anyone the right to use this work for any purpose, without any conditions, unless such conditions are required by law.
Category:Self-published work#Linear%20least%20squares.svgCategory:PD-self#Linear%20least%20squares.svg
SVG development
InfoField
Source code
InfoField

MATLAB code

% Illustration of linear least squares.
function main()
   
   % KSmrq's colors
   red    = [0.867 0.06 0.14];
   blue   = [0, 129, 205]/256;
   green  = [0, 200,  70]/256;
   yellow = [254, 194,   0]/256;
   white = 0.99*[1, 1, 1];
   gray = 0.2*white;
   
% Set up the grid and other parameters
   N = 100;
   A = -2.2; B = 2; 
   X = linspace(A, B, N);
   C=-4; D = 4;
   
   % Set up the figure
   lw = 4; % linewidth
   fs = 18; % font size
   figure(1); clf; hold on;
   set(gca, 'fontsize', fs);
   set(gca, 'linewidth', lw/2.5)
   hold on; grid on;

   % random numbers
   a = 1.1; b = 3.5; c = 1.4;
   M = 50;
   XX=linspace(A+0.3, B-0.3, M+1);
   Xr = 0*(1:M);
   Yr = Xr;
   for i=1:M
      r=rand(1);
      Xr(i) = XX(i)*r+XX(i+1)*(1-r);
      Yr(i) = a*Xr(i) + b + c*0.4*erfinv(2*rand(1) - 1);
   end

   myrad = 0.05;
   for i=1:length(Xr)
      ball(Xr(i), Yr(i), myrad, red);
   end


   % least squares fitting
   Yr = Yr';
   Mat = [Xr' (0*Xr+1)'];
   V=Mat'*Yr;
   V=(Mat'*Mat)\V;
   ae = V(1); be = V(2);   
   plot(X, ae*X+be, 'b', 'linewidth', lw);

   grid on;
   set(gca, 'GridLineStyle', '-', 'xcolor', gray);
   set(gca, 'GridLineStyle', '-', 'ycolor', gray);
   set(gca, 'XTick', [-2 -1 0 1 2]);


   axis equal;
   axis([-2, 2, 1, 6]);
   
   saveas(gcf, 'Linear_least_squares.eps', 'psc2'); % save as eps
   %plot2svg('Linear_least_squares.svg'); % save as svg

   
function ball(x, y, r, color)
   Theta=0:0.1:2*pi;
   X=r*cos(Theta)+x;
   Y=r*sin(Theta)+y;
   H=fill(X, Y, color);
   set(H, 'EdgeColor', 'none');
Category:Linear regression
Category:Linear regression Category:PD-self Category:Self-published work Category:Valid SVG created with MATLAB code