遞推最小二乘法——Matlab實現演算法
阿新 • • 發佈:2019-02-20
遞推最小二乘法
主要用於求解超定方程的未知解
實現程式碼見部落格最下方
演算法實現
- 利用遞推最小二乘法,求解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);