资源简介
matlab叠前反演的代码,采用马尔科夫共轭梯度法,针对一维模型的反演。
代码片段和文件信息
function best_x=golddiv(xd)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%黄金分割法求单峰下降区间的极小点%%%%%%%%%%%%
%输入:
%[jintui_ajintui_b]=jintuifa(xd)
%function best_x=golddiv(xd)
% 目标函数:f=mrf_obj(xi)
%先由进退法搜索出单峰下降区间,再在单峰下降区间里面利用黄金分割方法...
%搜索出迭代步长,得到的步长为精确步长
%黄金分割法
%best_x为最优的x值,x为初始向量,d为搜索方向
%精确度:epsilon
%当保留的区间长度|b-a|<=epsilon时停止迭代
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
global i
[jintui_ajintui_b]=jintuifa(xd);
epsilon=1e-8;%设置默认的epsilon
z2=jintui_a+0.618*(jintui_b-jintui_a);%h1左点
f2=mrf_obj(x+z2*di);
z1=jintui_a+0.382*(jintui_b-jintui_a);%h2,右点
f1=mrf_obj(x+z1*di);
while(abs(jintui_b-jintui_a)>epsilon) %abs a=0b=1 golden linesearch如果区间不够小
if f1 jintui_b=z2;%右点往左缩进
z2=z1;
f2=f1;
z1=jintui_a+0.382*(jintui_b-jintui_a);%转h2
f1=mrf_obj(x+z1*di);
elseif f1==f2%如果左右相等
jintui_a=z1;%一起往内缩进
jintui_b=z2;
z2=jintui_a+0.618*(jintui_b-jintui_a);
f2=mrf_obj(x+z2*di);%转h1
z1=jintui_a+0.382*(jintui_b-jintui_a);
f1=mrf_obj(x+z1*di);
else
jintui_a=z1;
z1=z2;
f1=f2;
z2=jintui_a+0.618*(jintui_b-jintui_a);%h5
f2=mrf_obj(x+z2*di);
end
end%while
best_x=(jintui_a+jintui_b)/2;%最优的x值
%best_fx=subs(yxbest_x);%最优的函数值
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 1593 2014-09-26 13:33 无约束0dB\golddiv.m
文件 1439 2014-09-26 13:33 无约束0dB\jintuifa.m
文件 3320304 2014-09-26 13:33 无约束0dB\m.mat
文件 113 2014-09-26 13:33 无约束0dB\mrf_obj.m
文件 3245338 2014-09-26 13:33 无约束0dB\smooth_lnm.mat
文件 3598403 2014-09-26 13:33 无约束0dB\syn_d.mat
文件 3192 2014-09-26 13:33 无约束0dB\Unti
- 上一篇:移动窗口最小二乘多项式平滑(sg smooth)
- 下一篇:EOF分解
评论
共有 条评论