专栏首页matlab爱好者最小二乘法原理及matlab实现

最小二乘法原理及matlab实现

最小二乘法(least squares method),也称最小平方法,是一种古老而常用的数学工具,在自然科学、工程技术和人工智能等领域有着广泛地应用,其核心原理就是通过将误差平方和最小化来寻找数据的最佳匹配函数。

最小二乘法原理浅析:

在实际应用中,往往通过测量或模拟得到函数y=f(x)在某些点x1,x2,..., xn处对应的函数值y1,y2,...,yn, 且点xi互不相同,由于f(x)的解析形式并不清楚,因此需要寻求函数y=f(x)的近似表达式y=p(x)。一般情况下,p(x)由k个线性无关函数p1(x),p2(x),...,pk(x)线性组合而成,即有:

p(x)=a1*p1(x)+ a2*p2(x)+…+ak*pk(x) (k<n-1)

上式中,a1, a2, ..., ak为待定常数。线性无关函数组p1(x), p2(x), ..., pk(x)称为基函数。常用的基函数有:

1, x, x^2, ..., x^k;

sin(x), sin(2x), ..., sin(kx)等

最小二乘法就是通过计算寻找一组系数使得所有数据点p(xi)与yi之差的平方和最小,即:

下面以多项式基函数为例,来演示整个计算过程:

p(x)=a0+ a1*x+…+ak*x^k (k<n-1);

令误差平方和函数:

D(a1, a2, ..., ak) = sum((p(xi)-yi)^2),

上式中sum为求和记号,为了求出符合条件的系数a,将上式右边依次对ai(i=0,1,2,…,k) 求偏导,将得到k+1个关于a1, a2, ..., ak线性方程组,经整理写成矩阵形式如下:

上式通过左右两边同时左乘基组系数矩阵的逆即可得到:A=X|-1|Y,此处X|-1|表示基组系数矩阵的逆。

matlab实现

clc;clear;close all;
x = linspace(-5,5,30);
a0 = -4;  a1 = -1.8; 
a2 = 1.13; a3 = -1.5;
y = a0 + a1*x + a2*x.^2 + a3*x.^3;
% 对y加入噪声以便模拟验证
yy = a0 + a1*x + a2*x.^2 + a3*x.^3 + 20*randn(1,30);
N = 3;
% 计算基组系数矩阵
X = getBGCM(x,N);
% 由模拟值yy计算Y值
Y = getY(x,yy,N);
% X*A = Y,左右两边同时左除X,即得:A = X\Y; 
A = X\Y;
% 验证计算结果
yt = getMY(A,x,3);
% 绘制图像
plot(x,y,'r.-',x,yy,'bo-',x,yt,'ks-');
title('最小二乘法拟合验证测试');
xlabel('X 轴');
ylabel('Y 轴');
legend('真实值','真实值加噪声','拟合值');

~~~~~~~~~~效果图~~~~~~~~~~

本文分享自微信公众号 - matlab爱好者(matlabaihaozhe),作者:matlab爱好者

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-10-10

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Matlab 自定义函数初讲

    在Matalb中使用函数可以把一个较大的任务分解为多个较小的任务,我这个Big project就是由个数多到我都不愿意看的一个个子函数构成的。每个子函数完成特定...

    matlab爱好者
  • 模拟退火算法优化指派问题

    之前二狗已经分别介绍过了,如何用模拟退火算法和遗传算法,进行背包问题的求解。其实背包问题是可以看成是一个可以看成是一个比较特殊的,有线性约束的,0-1规划问题。...

    matlab爱好者
  • 你了解matlab局部函数吗?

    什么是局部函数呢?局部函数就是在某个局部范围内起作用的函数,超出作用范围,将不能被使用。通过添加局部函数,可以避免创建和管理单独的函数文件,可使代码编写一气呵成...

    matlab爱好者
  • 简介不同的文件格之Fasta格式

    在浏览核酸蛋白质数据库的时候会经常遇见不同的文件格式,常见的有Fasta格式文件、NBRF/PIR格式文件、 EMBL/SWISSPROT格式文件、Clusta...

    HUBU生信
  • Java发送邮件的简单实现

    使用Oracle官方的JavaMail进行实现,JavaMail下载地址:https://java.net/projects/javamail/pages/Ho...

    卡尔曼和玻尔兹曼谁曼
  • 下一代数据分析 将如何改善企业与客户的互动?

    2000年,彼得·莱曼(Peter Lyman)和哈尔·瓦里安(HalR. Varian)开展了一项史无前例的研究。用计算机存储术语来说,他们的目标是弄清楚全球...

    BestSDK
  • python builtins 内建函数

    如果iterable的所有元素都是真的(或者iterable是空的),返回True。

    葫芦
  • Python高阶函数_map/reduce/filter函数

    如果你读过Google的那篇大名鼎鼎的论文"MapReduce: Simplified Data Processing on Large Clusters",你...

    小破孩的梦想空间
  • 习题 8: 打印,打印

    1 2 3 4 'one' 'two' 'three' 'four' True False False True '%r %r %r %r' '%r %r...

    hankleo
  • 浅谈linux模拟多线程崩溃和多进程崩溃

    结论是: 多线程下如果其中一个线程崩溃了会导致其他线程(整个进程)都崩溃; 多进程下如果其中一个进程崩溃了对其余进程没有影响;

    砸漏

扫码关注云+社区

领取腾讯云代金券