资源简介

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\Untitled.m

评论

共有 条评论