递推最小二乘法——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);
  • 15
    点赞
  • 146
    收藏
    觉得还不错? 一键收藏
  • 15
    评论
Matlab中的递推最小二乘法是一种用于求解线性方程组Ax=b的方法。该方法利用递推的方式,通过迭代计算来逐步优化解的精度。在这个方法中,首先设置好迭代所需要的初始参数,然后将方程组中的每个方程逐个提取出来,进行迭代计算。最后将每次迭代的解输出。 具体的算法实现可以参考博客最下方提供的代码。代码中首先定义了矩阵A和向量b,然后设置了初始参数x和P。接下来使用循环进行迭代计算,迭代次数为10000次。在每次迭代中,通过计算矩阵Q和更新解x和P的值,逐步优化解的精度。最后将每次迭代的解存储在result2中,并将迭代次数存储在result1中。 通过数值实验可以得到结果分析,可以看出,在迭代的过程中,解逐渐收敛于某个值。由于初始解是随机生成的,因此解的误差比较大,但经过10000次的迭代后,解开始收敛于0附近的值。这是因为在算法中,矩阵A的元素服从独立同分布的正态分布,因此解也大致收敛于0附近的值。 总结起来,Matlab中的递推最小二乘法是一种用于求解线性方程组的方法,通过迭代计算逐步优化解的精度。在具体的实现中,需要设置好初始参数,并使用循环进行迭代计算,最后得到收敛于某个值的解。<span class="em">1</span> #### 引用[.reference_title] - *1* [递推最小二乘法——Matlab实现算法](https://blog.csdn.net/qq_36312878/article/details/80945593)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 15
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值