简述最小二乘法基本概念和拟合方法,给出高次函数的拟合公式,配有有matlab仿真程序

本文主要是介绍简述最小二乘法基本概念和拟合方法,给出高次函数的拟合公式,配有有matlab仿真程序,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

最小二乘法是一种常用的曲线拟合算法,尤其对于存在白噪声的数据的拟合尤其有用。本文首先简析最小二乘法的作用,然后再推到高次(以3次为例)多项式的拟合公式,并用MATLAB仿真展示具体的应用示例。

一、最小二乘法的用途

最小二乘法是一种常用的曲线拟合算法,尤其对于存在白噪声的数据的拟合尤其有用。有效估计就是具有最小方差的估计,最小二乘法是一种对于物理量参数的有效估计,这种方法综合考虑所有点的偏差,所评估的参数使得对于所有的测量点方差最小。

二、高次多项式的拟合公式推导

假设需要使用最小二乘法对一个3次函数进行拟合,该函数的真值表达式如下:

y=ax^{3}+bx^{2}+cx+d

在实际应用中,x作为输入,在测量输出y时,往往会引入白噪声V_{x},这样实际在测量数据时表达式变为:

y=ax^{3}+bx^{2}+cx+d+V_{x}

现在给定一组输入值X_{i}=[{x_{1},x_{2},x_{3},..,x_{n}}],会得到含有白噪声的一组测量值Y_{i}=[y_{1},y_{2},y_{3},...],由输入值X_{i}和测量值Y_{i},使用最小二乘法对a,b,c,d四个参数进行估计。

根据最小二乘法的定义,使得

J=\sum_{i=1}^{N}[y_{i}-(ax_{i}^{3}+bx_{i}^{2}+cx_{i}+d))]^{2}为最小。

为此,需要分别对a,b,c,d四个参数求偏导数,并令其为0,即可得到一个线性方程组,如下:

\frac{\partial J}{\partial a}|_{a=\hat{a}}=-2\sum_{i=1}^{N}(y_{i}-\hat{a}x_{i}^{3}-\hat{b}x_{i}^{2}-\hat{c}x_{i}-\hat{d})x_{i}^{3}=0

\frac{\partial J}{\partial b}|_{b=\hat{b}}=-2\sum_{i=1}^{N}(y_{i}-\hat{a}x_{i}^{3}-\hat{b}x_{i}^{2}-\hat{c}x_{i}-\hat{d})x_{i}^{2}=0

\frac{\partial J}{\partial c}|_{c=\hat{c}}=-2\sum_{i=1}^{N}(y_{i}-\hat{a}x_{i}^{3}-\hat{b}x_{i}^{2}-\hat{c}x_{i}-\hat{d})x_{i}=0

\frac{\partial J}{\partial d}|_{d=\hat{d}}=-2\sum_{i=1}^{N}(y_{i}-\hat{a}x_{i}^{3}-\hat{b}x_{i}^{2}-\hat{c}x_{i}-\hat{d})=0

对以上四个线性方程整理可得:

\hat{a}\sum_{i=1}^{N}x_{i}^{6}+\hat{b}\sum_{i=1}^{N}x_{i}^{5}+\hat{c}\sum_{i=1}^{N}x_{i}^{4}+\hat{d}\sum_{i=1}^{N}x_{i}^{3}=\sum_{i=1}^{N}y_{i}x_{i}^{3}

\hat{a}\sum_{i=1}^{N}x_{i}^{5}+\hat{b}\sum_{i=1}^{N}x_{i}^{4}+\hat{c}\sum_{i=1}^{N}x_{i}^{3}+\hat{d}\sum_{i=1}^{N}x_{i}^{2}=\sum_{i=1}^{N}y_{i}x_{i}^{2}

\hat{a}\sum_{i=1}^{N}x_{i}^{4}+\hat{b}\sum_{i=1}^{N}x_{i}^{3}+\hat{c}\sum_{i=1}^{N}x_{i}^{2}+\hat{d}\sum_{i=1}^{N}x_{i}=\sum_{i=1}^{N}y_{i}x_{i}

\hat{a}\sum_{i=1}^{N}x_{i}^{3}+\hat{b}\sum_{i=1}^{N}x_{i}^{2}+\hat{c}\sum_{i=1}^{N}x+\hat{d}N=\sum_{i=1}^{N}y_{i}

写成矩阵的形式可得:

\begin{bmatrix} \sum_{i=1}^{N}x_{i}^{6} & \sum_{i=1}^{N}x_{i}^{5} & \sum_{i=1}^{N}x_{i}^{4} & \sum_{i=1}^{N}x_{i}^{3}\\ \sum_{i=1}^{N}x_{i}^{5} & \sum_{i=1}^{N}x_{i}^{4} & \sum_{i=1}^{N}x_{i}^{3} & \sum_{i=1}^{N}x_{i}^{2}\\ \sum_{i=1}^{N}x_{i}^{4} & \sum_{i=1}^{N}x_{i}^{3} & \sum_{i=1}^{N}x_{i}^{2} & \sum_{i=1}^{N}x_{i}\\ \sum_{i=1}^{N}x_{i}^{3} & \sum_{i=1}^{N}x_{i}^{2} & \sum_{i=1}^{N}x_{i} & N \end{bmatrix}\begin{bmatrix} \hat{a}\\ \hat{b}\\ \hat{c}\\ \hat{d} \end{bmatrix}=\begin{bmatrix} \sum_{i=1}^{N}y_{i}x_{i}^{3}\\ \sum_{i=1}^{N}y_{i}x_{i}^{2}\\ \sum_{i=1}^{N}y_{i}x_{i}\\ \sum_{i=1}^{N}y_{i} \end{bmatrix}

A=\begin{bmatrix} \sum_{i=1}^{N}x_{i}^{6} & \sum_{i=1}^{N}x_{i}^{5} & \sum_{i=1}^{N}x_{i}^{4} & \sum_{i=1}^{N}x_{i}^{3}\\ \sum_{i=1}^{N}x_{i}^{5} & \sum_{i=1}^{N}x_{i}^{4} & \sum_{i=1}^{N}x_{i}^{3} & \sum_{i=1}^{N}x_{i}^{2}\\ \sum_{i=1}^{N}x_{i}^{4} & \sum_{i=1}^{N}x_{i}^{3} & \sum_{i=1}^{N}x_{i}^{2} & \sum_{i=1}^{N}x_{i}\\ \sum_{i=1}^{N}x_{i}^{3} & \sum_{i=1}^{N}x_{i}^{2} & \sum_{i=1}^{N}x_{i} & N \end{bmatrix},B=\begin{bmatrix} \hat{a}\\ \hat{b}\\ \hat{c}\\ \hat{d} \end{bmatrix},C=\begin{bmatrix} \sum_{i=1}^{N}y_{i}x_{i}^{3}\\ \sum_{i=1}^{N}y_{i}x_{i}^{2}\\ \sum_{i=1}^{N}y_{i}x_{i}\\ \sum_{i=1}^{N}y_{i} \end{bmatrix}

可简化写成,A*B=C,于是可得估计参数如下:

B=A^{-1}*C

三、Matlab代码仿真

根据上面推导的公式,对一个3次函数进行参数辨识,以证明该公式的有效性。

需要辨识的三次函数如下:

y=0.5x^3+1.2x^2+2x+5

辨识时对该三次函数加入10*[-0.5,0.5]范围的白噪声。matlab代码实现如下:

clc
clear
close all
X_6_sum=0;X_5_sum=0;X_4_sum=0;X_3_sum=0;X_2_sum=0;X_1_sum=0;
RX_3_sum=0;RX_2_sum=0;RX_1_sum=0;
R_sum=0;N=0;
X=-10:0.01:10;
Y=X;
for count=1:length(X)Y(count)=0.5*X(count)^3+1.2*X(count)^2+2*X(count)+5+10*(rand()-0.5);X_6_sum=X_6_sum+X(count)^6;X_5_sum=X_5_sum+X(count)^5;X_4_sum=X_4_sum+X(count)^4;X_3_sum=X_3_sum+X(count)^3;X_2_sum=X_2_sum+X(count)^2;X_1_sum=X_1_sum+X(count);N=length(X);RX_3_sum=RX_3_sum+Y(count)*X(count)^3;RX_2_sum=RX_2_sum+Y(count)*X(count)^2;RX_1_sum=RX_1_sum+Y(count)*X(count);R_sum=R_sum+Y(count);   
end
plot(X,Y,'b.','MarkerSize',10);
A=[X_6_sum,X_5_sum,X_4_sum,X_3_sum;X_5_sum,X_4_sum,X_3_sum,X_2_sum;X_4_sum,X_3_sum,X_2_sum,X_1_sum;X_3_sum,X_2_sum,X_1_sum,N];
C=[RX_3_sum;RX_2_sum;RX_1_sum;R_sum];
B=inv(A)*C
B1=polyfit(X,Y,3)
Y1=B(1).*X.^3+B(2).*X.^2+B(3).*X+B(4);
hold on
plot(X,Y1,'r','MarkerSize',10);

仿真结果如下:

 其中B为采用上述公式得到的拟合结果,B1为采用matlab自带的函数进行的拟合得到的结果,两者对比可证明结果是一致的,并且和设定的真实参数相差很小,从而证明该公式的正确性。

这篇关于简述最小二乘法基本概念和拟合方法,给出高次函数的拟合公式,配有有matlab仿真程序的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/838813

相关文章

Java学习手册之Filter和Listener使用方法

《Java学习手册之Filter和Listener使用方法》:本文主要介绍Java学习手册之Filter和Listener使用方法的相关资料,Filter是一种拦截器,可以在请求到达Servl... 目录一、Filter(过滤器)1. Filter 的工作原理2. Filter 的配置与使用二、Listen

Pandas统计每行数据中的空值的方法示例

《Pandas统计每行数据中的空值的方法示例》处理缺失数据(NaN值)是一个非常常见的问题,本文主要介绍了Pandas统计每行数据中的空值的方法示例,具有一定的参考价值,感兴趣的可以了解一下... 目录什么是空值?为什么要统计空值?准备工作创建示例数据统计每行空值数量进一步分析www.chinasem.cn处

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Windows 上如果忘记了 MySQL 密码 重置密码的两种方法

《Windows上如果忘记了MySQL密码重置密码的两种方法》:本文主要介绍Windows上如果忘记了MySQL密码重置密码的两种方法,本文通过两种方法结合实例代码给大家介绍的非常详细,感... 目录方法 1:以跳过权限验证模式启动 mysql 并重置密码方法 2:使用 my.ini 文件的临时配置在 Wi

MySQL重复数据处理的七种高效方法

《MySQL重复数据处理的七种高效方法》你是不是也曾遇到过这样的烦恼:明明系统测试时一切正常,上线后却频频出现重复数据,大批量导数据时,总有那么几条不听话的记录导致整个事务莫名回滚,今天,我就跟大家分... 目录1. 重复数据插入问题分析1.1 问题本质1.2 常见场景图2. 基础解决方案:使用异常捕获3.

最详细安装 PostgreSQL方法及常见问题解决

《最详细安装PostgreSQL方法及常见问题解决》:本文主要介绍最详细安装PostgreSQL方法及常见问题解决,介绍了在Windows系统上安装PostgreSQL及Linux系统上安装Po... 目录一、在 Windows 系统上安装 PostgreSQL1. 下载 PostgreSQL 安装包2.

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

SQL中redo log 刷⼊磁盘的常见方法

《SQL中redolog刷⼊磁盘的常见方法》本文主要介绍了SQL中redolog刷⼊磁盘的常见方法,将redolog刷入磁盘的方法确保了数据的持久性和一致性,下面就来具体介绍一下,感兴趣的可以了解... 目录Redo Log 刷入磁盘的方法Redo Log 刷入磁盘的过程代码示例(伪代码)在数据库系统中,r

Python实现图片分割的多种方法总结

《Python实现图片分割的多种方法总结》图片分割是图像处理中的一个重要任务,它的目标是将图像划分为多个区域或者对象,本文为大家整理了一些常用的分割方法,大家可以根据需求自行选择... 目录1. 基于传统图像处理的分割方法(1) 使用固定阈值分割图片(2) 自适应阈值分割(3) 使用图像边缘检测分割(4)

Java中Switch Case多个条件处理方法举例

《Java中SwitchCase多个条件处理方法举例》Java中switch语句用于根据变量值执行不同代码块,适用于多个条件的处理,:本文主要介绍Java中SwitchCase多个条件处理的相... 目录前言基本语法处理多个条件示例1:合并相同代码的多个case示例2:通过字符串合并多个case进阶用法使用