| 查看: 1571 | 回复: 7 | |||
| 当前主题已经存档。 | |||
[交流]
【求助】递推极大似然法和递推最小二乘法的matlab编程
|
|||
|
已知模型为Y=HX+V,其中V为测量误差,已知Y和H的20组测量值,求向量X. 现利用递推极大似然法和递推最小二乘法在matlab中编程实现,比较结果,谢谢,最好有程序。非常着急,请不吝赐教! |
» 猜你喜欢
有没有人能给点建议
已经有5人回复
假如你的研究生提出不合理要求
已经有12人回复
实验室接单子
已经有7人回复
全日制(定向)博士
已经有5人回复
萌生出自己或许不适合搞科研的想法,现在跑or等等看?
已经有4人回复
Materials Today Chemistry审稿周期
已经有4人回复
参与限项
已经有3人回复
对氯苯硼酸纯化
已经有3人回复
所感
已经有4人回复
要不要辞职读博?
已经有7人回复
cheer.up20(金币+10):太感谢了!好人一生平安 2010-03-24 20:53
cheer.up20(金币+5): 2010-03-24 20:56
cheer.up20(金币+5): 2010-03-24 20:56
|
迭代最小二乘 Matlab code : Y=rand(20,1); % set Y. H=rand(20,20);% set H. X=zeros(size(Y));%initial value X_0. dt=1.8/max(eig(H'*H)); % a time step parameter, 0 err_1=1e-3; % the stopping criterion. err_2=100; iter=0; while err_2>err_1 X=X-dt*(H'*(H*X-Y)); %update X. iter=iter+1; err_2=sum((H*X-Y).^2); %compute the residuals if mod(iter,1000)==1 fprintf(['Iteration %d: the residuals is %f\n'],iter,err_2); %display in the window. end end fprintf('The algorithm is convereged at the %dth iteration with residuals=%f\n',iter,err_2); 极大似然的话要有对V的分布假设。如果假设每次观测所产生的误差V是独立同高斯分布且方差已知,则极大似然得到的结果等同最小二乘(欧氏距离意义下)。 若假设V是其他分布,则结果与普通最小二乘有差异。要计算的话也很简单,写出对似然泛函的变分,将上述代码中的 H'*(H*X-Y)换成计算上述变分所得到的表达式即可。若V的分布比较特别,所产生的似然函数不是线性的,则上述迭代步长dt的选取不一定能保证迭代收敛。这时需要一些复杂一点的优化工具,例如线搜索。 |
2楼2010-03-24 18:46:16
3楼2010-03-24 21:21:14
★
小木虫(金币+0.5):给个红包,谢谢回帖交流
cheer.up20(金币+10):谢谢,可否加你QQ435033488 2010-03-25 09:14
小木虫(金币+0.5):给个红包,谢谢回帖交流
cheer.up20(金币+10):谢谢,可否加你QQ435033488 2010-03-25 09:14
|
基本一样。 % problem: Y=HX+V. %input: Y--m*n % H--m*s %output: X--s*n. m=18;n=20;s=22;%set dimensions Y=rand(m,n); % set Y. H=rand(m,s);% set H. X=zeros(s,n);%initial value X_0. dt=1.8/max(eig(H'*H)); % a time step parameter, 0 err_1=1e-3; % the stopping criterion. err_2=100; iter=0; while err_2>err_1 X=X-dt*(H'*(H*X-Y)); %update X. iter=iter+1; err_2=norm(H*X-Y,'fro'); %compute the residuals if mod(iter,1000)==1 fprintf(['Iteration %d: the residuals is %f\n'],iter,err_2); %display in the window. end end fprintf('The algorithm is convereged at the %dth iteration with residuals=%f\n',iter,err_2); |
4楼2010-03-24 21:54:29
5楼2010-03-24 22:47:18
6楼2010-03-25 12:06:09
7楼2010-03-25 13:07:15
8楼2010-03-27 21:56:05












回复此楼