最小二乘(LS)與總體最小二乘(TLS)總結一

ccwwff發表於2015-12-30

 

資料的直線擬合:
1. Data:  Y = X*B, B = (a, b), 擬合直線y = ax + b。

>> X =[0.50000   1.00000;   0.80000   1.00000;   1.10000   1.00000;   1.80000   1.00000;   4.00000   1.00000]
X =


   0.50000   1.00000
   0.80000   1.00000
   1.10000   1.00000
   1.80000   1.00000
   4.00000   1.00000


>> Y = [7.10000   4.40000   3.20000   1.90000   0.9]'
Y =


   7.10000
   4.40000
   3.20000
   1.90000
   0.90000


1. LS:

>> B = inv(X'*X) * (X' * Y)
B =

  -1.4052
   5.8046

擬合出直線:a = -1.4052, b = 5.8046;

2. TLS:  法向量A = [t0 t1], 擬合直線 t0*(x-MX) + t1*(y-MY)=0.

>> MX = mean(X(:,1))
MX =  1.6400
>> MY = mean(Y)
MY =  3.5000
>> [m, n] = size(X)
m =  5
n =  2
>> C = ones(m, 2);

>> dX = X(:, 1) .- MX;

>> C(:, 1)=dX

>> dY = Y .- MY;

>> C(:, 1)=dX;

>> C(:, 2)=dY;
>> C
C =


  -1.14000   3.60000
  -0.84000   0.90000
  -0.54000  -0.30000
   0.16000  -1.60000
   2.36000  -2.60000


>>  [MU, MS] = eigs(C'*C)
MU =


  -0.46502  -0.88530
   0.88530  -0.46502


MS =


Diagonal Matrix


   29.0052         0
         0    2.0668


>> A = MU(:, 2)
A =


  -0.88530
  -0.46502


>> t0 = A(1,1)
t0 = -0.88530
>>  t1 = A(2,1)
t1 = -0.46502
>> a = -t0/t1
a = -1.9038
>> b = (t0.*MX+t1.*MY)./t1
b =  6.6222
>> B
B =


  -1.4052
   5.8046


>> PX=[0, 1, 2, 3, 4]
PX =


   0   1   2   3   4


>> PX=[0, 1, 2, 3, 4]'
PX =


   0
   1
   2
   3
   4


>> PY0=PX.*B(1,1) + B(2, 1)
PY0 =


   5.80456
   4.39934
   2.99412
   1.58890
   0.18368


>> PY1=PX.*a + b
PY1 =


   6.62224
   4.71843
   2.81463
   0.91083
  -0.99298


>> plot(X(:, 1), Y, 'o');
>> hold on
>> plot(MX, MY, '*');
>> plot(PX, PY0);
>> plot(PX, PY1);
>> plot(PX, PY1, 'r');



3. y = C * exp(A*x);   線性化擬合: Y = Ax + B,   y = ln(Y), C = exp(B).




相關文章