Matlab利用fminarch实现参数估计

更新时间:2023-07-20 19:37:02 阅读: 评论:0

Matlab中用fminarch实现参数估计
发布:Arquine
9Jan
 文章的主要思想来源于Matlab|Simulink仿真世界的一篇类似的文章。我这里把这个思想引入到我们的体系来,并以一个新的例子讲解这一用法。
fminarch用来求解多维无约束的非线性优化问题,它的基本形式是:
[X,FVAL,EXITFLAG,OUTPUT] = FMINSEARCH(FUN,X0,OPTIONS).
大段的Matlab帮助文档我就不翻译解释了,有兴趣的朋友可以参见Matlab联机帮助,我这里只介绍他在参数估计中的作用。
在 参数估计中经常用到正态分布的参数估计。在matlab系统中有一个函数叫做normfit就直接可以完成这样的参数估计,返回均值mu和均方差 sigma的估计,但是这里有一个要求,就是它的输入信息必须是随机的数字序列。如得到1000个服从正态分布的随机数向量R,用命令[
phat pci]=normfit(R),就可以得到参数估计了。然而如果我我们得知某些已经处于pdf函数曲线上的点时,这时需要对函数进行拟合运算。
估计参数的原理是从已知的一序列数据中,对于给定的任何一组参数,计算用其估计数据得到的方差,然后利用fminarch函数求当方差满足最小的时候的参数,这就是需要估计的参数。
来看一下下面的列子:
smu=10,ssig=25;蓝瘦香菇表情包
%假设原来均值方差分别为:10,25
带十字的成语R=randn(1000,1)*ssig+smu;
%生成满足要求的1000个随机数
[y x]=myhist(R);
%生成统计信息,x,y分别表示分组中值序列和落入该组的统计数目
bar(x,y)
%绘制直方图
hold on
plot(x,y,'ro')
%绘制对应点暑假英文
[pms m]=normpdffit(x,y,8,20);
%根据得到的统计信息x,y对其进行参数估计,8,20分别代表均值和方差的初值
t=min(x):(max(x)-min(x))/200:max(x);
%定义绘图区间
ny=normpdf(t,smu,ssig);
%真实分布曲线数据
nyf=normpdf(t,pms(1),pms(2));
%拟合分布曲线数据
plot(t,ny,'r-')
plot(t,nyf,'b-.')
legend('hist','hist value','ture pdf','fit pdf')
%绘制两条曲线作对比
上面例子中所用的几个函数定义如下:
function [h xout]=myhist(data,nbins)
%用于统计信息,生成和pdf函数值相同的hist统计方式。
if nargin==1
    nbins=uint32(1+log(length(data))/log(2));
end
nbins=double(nbins);
data=data(:);山珍海味的意思
[h xout]=hist(data,nbins);
ew=xout(2)-xout(1);
h=h./(ew*length(data));
 
function [pab m]= normpdffit(x,y,a0,b0)
%正态分布pdf参数估计
p=[a0 b0];
opt=optimt('fminarch');
opt.TolX=0.001;
opt.Display='off';
isbn编号[pab m]=fminarch(@normpdf,p,opt,x,y);
%这里需要注意,opt参数已经传递给fminarch,但是对于原计算方差的函数来说,还需要两个参数x,y,这两个参数就写在opt参数的后面,这样可以完成其他参数的传递。
%这里说下以前探索的时候的失败经验:用global把参数公有化,然后函数只传递变化的参数(需要估计的参数),但是失败了。所以了解这种参数传递方法是非常有必要的。
function = normpdf(pab,X,Y)
浑浊的意思%计算对于任何一组参数pab(1),pab(2),给出当前数据下的方差来。
=var(Y-normpdf(X,pab(1),pab(2)));
运行结果如图所示:
从图中可以看出,随机数在这里变成了统计信息,统计信息反映到了绘制的点信息上,图中圆圈所示。真实的pdf为红色曲线,估计的曲线为蓝色虚线。从图中可知,估计的效果非常满意。
如果在函数中加上:
disp 'the result of normfit function:'
[mu sg]=normfit(R)
disp 'the result of fminarch:'
[pms m]=normpdffit(x,y,8,20)
得到结果:
the result of normfit function:
mu =
  10.44306258428258
sg=
  25.61945417031251
the result of fminarch:
pms =
  10.30663244862284  25.32479396733891
m =
    7.093014695522283e-008
 
问题英语与真实值相比,我们这里的拟合结果将比直接用normfit的结果更接近真实值。
可 以这么解释:normfit函数是内部通用的拟合函数,适合范围广,而没有任何先验信息加入,而对于我们的fminarch函数来说,它需要一个先验 信息,即参数的初值。我们在调用的时候用了初值8,20.这个先验信息对更进一步的拟合最后的结果有着相当重要的作用!因此,对于参数估计,先验信息还是 相当重要的。
 
 
可口可乐商标
由于有这种技巧存在,了解了fminarch函数之后,可以有很多的扩展应用。具体有哪些应用。请各位读者跟帖述说。

本文发布于:2023-07-20 19:37:02,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1107491.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:函数   信息   参数   参数估计   估计   方差   统计   曲线
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图