最小二乘(LS)与总体最小二乘(TLS)总结一

 

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




  • 3
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: MATLAB中递推最小二乘法是一种用于估计线性模型参数的技术。在递推最小二乘法中,我们通过逐渐增加观测数据和调整参数来不断优化模型的拟合效果。 在MATLAB中,我们可以使用"lsqcurvefit"函数来实现递推最小二乘编程。该函数需要输入一个自定义的模型函数、初始参数值和观测数据。模型函数通常是一个非线性的方程,其输入参数是需要估计的模型参数和自变量,输出为与观测数据对应的因变量值。观测数据包含自变量和因变量的取值。 在编程过程中,我们首先定义一个递归函数来表示模型的形式。然后,通过使用"lsqcurvefit"函数来调用递归函数,并提供初始参数值和观测数据。该函数将返回估计的最优参数值。为了得到更准确的估计结果,可以多次调用"lsqcurvefit"函数,每次使用之前得到的最优参数值作为初始参数值进行迭代拟合。 通过递推最小二乘编程,我们可以优化模型的参数估计,使其更好地拟合观测数据。这对于许多实际问题中的数据建模和预测非常有用。MATLAB提供了简洁且强大的工具来实现递推最小二乘编程,方便用户进行模型的优化和参数估计。 ### 回答2: MATLAB递推最小二乘编程是一种方法,可以用来对具有递推关系的数据进行最小二乘回归分析。以下是一个简单的包含递推最小二乘编程的MATLAB代码示例: ```matlab % 假设有一组具有递推关系的数据 x = [1, 2, 3, 4, 5]; % x变量 y = [2, 4, 6, 8, 10]; % y变量 % 使用最小二乘法递推拟合 N = length(x); % 数据点数量 A = zeros(N, N); % 构建系数矩阵A b = zeros(N, 1); % 构建目标变量b for i = 1:N for j = 1:N A(i, j) = x(i)^(j-1); % 计算系数矩阵A的每个元素 end b(i) = y(i); % 构建目标变量b end % 求解线性方程组Ax = b coefficients = A \ b; % 打印结果 disp('递推拟合的多项式系数为:'); disp(coefficients'); % 绘制原始数据和拟合线 figure; plot(x, y, 'ro', 'DisplayName', '原始数据'); hold on; plot(x, polyval(flip(coefficients'), x), 'b-', 'DisplayName', '拟合线'); legend; ``` 上述代码首先构建了系数矩阵A和目标变量b,然后通过求解线性方程组Ax = b得到了递推拟合的多项式系数。最后,通过绘制原始数据和拟合线,可以直观地查看拟合效果。 ### 回答3: 在MATLAB中,可以使用递推最小二乘TLS)方法进行编程。递推最小二乘是一种通过将现有的拟合模型与新观测数据相结合来进行参数更新的方法,以逐步改善拟合结果。 编程实现递推最小二乘的一种常用方法是使用递推式,该式将新的观测数据与之前的参数估计相结合。以下是一个简单的MATLAB代码示例,用于实现递推最小二乘: ```matlab % 初始化参数估计 theta = [0; 0]; % 设置观测数据 x = [1; 2; 3; 4]; % 自变量 y = [3; 6; 7; 9]; % 因变量 % 逐步迭代更新参数估计 for i = 1:length(x) % 相关变量 A = [x(i), 1]; % 设计矩阵 b = y(i); % 响应向量 % 计算参数更新 delta_theta = (A'*A)^(-1)*A'*(b - A*theta); % 更新参数估计 theta = theta + delta_theta; end % 输出最终参数估计结果 disp('参数估计结果:'); disp(theta); ``` 在这个例子中,我们假设模型是一条直线 y = a*x + b。通过迭代更新参数估计,可以逐步拟合观测数据,并输出最终的参数估计结果。请注意,这个代码示例中使用的是最简单的递推最小二乘方法,实际使用中可能需要根据具体问题进行适当的修改和改进。 这是MATLAB中实现递推最小二乘方法的一个基本示例,可以根据实际需求进行进一步的修改和改进。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值