数据的直线拟合:
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
>> 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).