//目录

最小二乘优化

最小二乘优化

在之前有一个, 我们用的是解方程的方法(嘿嘿,要是无解咋办呢?),当然也可以用多项式拟合。

最小二乘优化是一个什么问题呢?

最小化这个 ,这也是最小二乘优化的定义,在Matlab中有处理这个最小二乘优化问题的函数:

lsqlin,lsqcurvefit,Lsqnonlin,Lsqnonneg四个函数,四个函数功能也不一样呢,求的的最优化表达式也不一样。

 

lsqlin函数

lsqlin函数功能:

 

解释一下这个式子:上面的2指的是平方,下面的2是2-范数。

 

 


x = [19 25 31 38 44]';
y = [19.0 32.3 49.0 73.3 97.8]';
r = [ones(5,1) x.^2];
ab=lsqlin(r,y);
x0 = 19:0.1:44;
y0 = ab(1) + ab(2)*x0.^2;
plot(x,y,'o',x0,y0,'r');

  

同样得到ab(1)和ab(2);

可以看出,他主要用来解线性的拟合。

 

lsqcurvefit函数

栗子:拟合曲线​ 中的参数

P95

调用形式:

非线性拟合时,每一次的运行结果可能都不相同

数据没找到,不是很好操作。

 

 


x0 = -10:0.01:10;
y0 = normpdf(x0,0,1);
save normpdfdata x0 y0;

 

clc,clear;
load normpdfdata
mf = @(cs,xdata)1/sqrt(2*pi)/cs(2)*exp(-(xdata-cs(1)).^2/cs(2)^2/2);
cs = lsqcurvefit(mf,rand(2,1),x0,y0);

  


使用了匿名函数mf,不重新定义和一个fun函数的.m文件了。

拟合出来和原来生成数据的二项式分布的参数u,e及其接近了。

 

lsqnonlin函数


clc,clear
load normpdfdata
F = @(cs)1/sqrt(2*pi)/cs(2)*exp(-(x0-cs(1)).^2/cs(2)^2/2)-y0;
cs0 = rand(2,1);
cs = lsqnonlin(F,cs0);

  

参数拟合的效果还是十分准的。

 

lsqnonneg函数

到了最后一个函数了。嘿嘿,我发现书的排版还是有问题的,他应该和第一个lsqlin函数放在一起说的。因为他们的功能很类似哦。

 

P97栗子5.11:

咦~~,你会发现不在像前面的一个 或者函数的形式,而是要求两个参数x。

其实不必大惊小怪,其实还是一个式子,就按照矩阵乘法乘起来,就是两个参数的组合成的

直接代入:


c = [0.0372 0.2869
    0.6861 0.7071
    0.6233 0.6245
    0.6344 0.6170];
d = [0.8587;
    0.1781
    0.0747
    0.8405];
x = lsqnonneg(c,d);

  

 

 

至此:

拟合常用方法就完成了,线性拟合,非线性拟合两个部分。

 

 

posted @ 2018-01-09 13:58  小草的大树梦  阅读(1147)  评论(0编辑  收藏  举报