1. 程式人生 > >遞推最小二乘法——Matlab實現演算法

遞推最小二乘法——Matlab實現演算法

遞推最小二乘法

主要用於求解超定方程的未知解

實現程式碼見部落格最下方

演算法實現

  • 利用遞推最小二乘法,求解Ax=b的解
  • A為m*x維的矩陣,元素服從獨立同分布的正態分佈
  • b為m維的已知向量,元素也是服從獨立同分布的正態分佈

設計思路

  • 首先設定好迭代所需要的初始引數
  • 將A中的10000個方程提取出來,依次做10000次迭代
  • 最後將每一次迭代的x的結果輸出

數值實驗

  • 遞推最小二乘法未知解
    這裡寫圖片描述

結果分析

  • 由上圖可以得知,由於一開始的未知解是隨機生成的,誤差比較大,經過了10000次的迭代之後,開始震盪收斂於某個值。因為隨機生成的矩陣的元素是正態分佈的,因此10個未知解都大致收斂於0附近的值上。

程式碼實現

clear;
format long;
A = randn([10000 10]);
b = randn([10000 1]);
x = rand(10,1);
I = eye(10, 10);
P = (10^6) * I;

for k = 1:10000
    Ak = A(k,:);
    Q1 = P*(Ak');
    Q2 = 1 + Ak * P * (Ak');
    Q = Q1/Q2;
    x = x + Q * (b(k) - Ak*x);
    P = (I - Q*Ak)*P;
    result2(:,k) = x;
    result1(k) = k;
end
result1 = result1';
%result = [result1; result2];
plot(result1, result2);