文章标题
来源:互联网 发布:凯文史派西 知乎 编辑:程序博客网 时间:2024/05/05 18:05
最小二乘法,通常用在我们已知数学模型,但是不知道模型参数的情况下,通过实测数据,计算数学模型,例如,在题目中,数学模型就是直线方程y=ax+b,但是不知道直线方程的a和b。 本来呢,我们只需要两组(xi,yi),就可以解得a和b,但是由于实测数据都存在误差,所以,我们很容易想到一个办法,我们测很多组数据来让我的a和b更加准确。 “我们测很多组数据来让我的a和b更加准确” ,那么我从数学角度如何体现这句话呢? 比如在此例中,已知数学模型 y=ax+b 我们有很多组数据,那么我们要找一条直线,使得我们测得的每个数据,到这条直线的偏离量的总和最小。(这句话有点拗口,慢慢理解下) 那么怎么用数学描述“偏离量总和最小”这个概念呢? 数学家运用了方差!
数学模型 y=ax+b 设F=ax+b-y 那么对于模型上的点(注意是模型上的点,也就是理论值),F=ax+b-y=0 但是对于实际值来说,F=axi+b-yi 一定不等于0。那么我们就要找到一对a和b,使得F尽可能接近于0。 也就是说,“偏离量总和最小”这个概念,在数学上实际上就是要求F的方差最小。 即 Σ F^2→0 (F的平方和趋近于0) 即 Σ(axi+b-yi)^2→0 那么我们得到一个方程f(a,b)=Σ(axi+b-yi)^2,我们要找到合适的a,b使得f(a,b)最小! 也就是说,我们要找到的实际上是f(a,b)的最小值点。(因为方差不可能小于0) 因此我们需要求f(a,b)的极值点。我们借助数学工具偏导。 如果有一组a,b使得 ∂f(a,b)/∂a=0 ∂f(a,b)/∂b=0 那么f(a,b)就是极值点,如果a,b只有一对,那么它就是最小值点。 即 ∂( Σ(axi+b-yi)^2 )/∂a=0 ∂( Σ(axi+b-yi)^2 )/∂b=0 化简得到 a*Σxi^2 + b*Σxi = Σ(xi*yi) a*Σxi + b*N = Σyi 其中N是(xi,yi)的个数。即我们测了多少组数据 解上面的二元方程,我们就可以得到唯一的一组a,b啦,这就是我们所需要的a和b O(∩_∩)O~是不是蛮简单的?
Matlab最基础的程序如下:
- %原始数据
- X=[163 123 150 123 141];
- Y=[186 126 172 125 148];
- n=5; %一共5个变量
- x2=sum(X.^2); % 求Σ(xi^2)
- x1=sum(X); % 求Σ(xi)
- x1y1=sum(X.*Y); % 求Σ(xi*yi)
- y1=sum(Y); % 求Σ(yi)
- a=(n*x1y1-x1*y1)/(n*x2-x1*x1); %解出直线斜率b=(y1-a*x1)/n
- b=(y1-a*x1)/n; %解出直线截距
- %作图
- % 先把原始数据点用蓝色十字描出来
- figure
- plot(X,Y,’+’);
- hold on
- % 用红色绘制拟合出的直线
- px=linspace(120,165,45);%这里直线区间根据自己实际需求改写
- py=a*px+b;
- plot(px,py,’r’);
%原始数据X=[163 123 150 123 141];Y=[186 126 172 125 148];n=5; %一共5个变量x2=sum(X.^2); % 求Σ(xi^2)x1=sum(X); % 求Σ(xi)x1y1=sum(X.*Y); % 求Σ(xi*yi)y1=sum(Y); % 求Σ(yi)a=(n*x1y1-x1*y1)/(n*x2-x1*x1); %解出直线斜率b=(y1-a*x1)/nb=(y1-a*x1)/n; %解出直线截距%作图% 先把原始数据点用蓝色十字描出来figureplot(X,Y,'+'); hold on% 用红色绘制拟合出的直线px=linspace(120,165,45);%这里直线区间根据自己实际需求改写py=a*px+b;plot(px,py,'r');结果 a=1.5555 b=-66.365
0 0
- 文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题 文章标题 文章标题 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 文章标题
- 表单中数据的校验
- 关于algorithm 104的总结
- git在mac上的配置及使用
- WeMall的Android app商城中的wemall doraemon代码
- mysql innodb 事务操作的表锁及行锁-Deadlock found when trying to get lock; try restarting transaction的优化
- 文章标题
- "No template named hello"
- Android TextView设置个别字体样式
- 哈希桶处理哈希冲突
- Linux系统下Go的下载、安装及配置环境变量,并集成到intellij IDEA中
- mysql和oracle数据库引擎介绍
- King--差分约束系统
- 【9】hey,English
- SmartBed2.0的上位机部分(草稿)