⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ercichazhi.m

📁 用malab编译的、利用二次插值求解的优化算法
💻 M
字号:
function [afxin,fxin]=ercichazhi(a,b,epsilon)
% ERCICHAZHI——用二次插值法求目标函数的最小点和最小值
% afxin——目标函数的最小点
% fxin——目标函数的最小值
% a,b——初始搜索区间上下限
% epsilon——收敛精度
% K——表示初始点af2第一次被插值点af4置换前后的状态
% J——表示判断循环过程中是否导致c2=0或(af4-af1)*(af3-af4)<=0的一个开关变量
% J==0表示循环过程中未导致上述情况出现;否则若J==1表示循环过程中导致了上述情况出现

f=inline(input('请输入目标函数:','s'));
af1=a;af3=b;af2=(af1+af3)/2;
f1=f(af1);f2=f(af2);f3=f(af3);
K=0;
c1=(f3-f1)/(af3-af1);c2=((f2-f1)/(af2-af1)-c1)/(af2-af3);
if c2~=0
    af4=0.5*(af1+af3-c1/c2);
    if (af4-af1)*(af3-af4)>0
        f4=f(af4);
        while K==0||(K~=0&&abs(af4-af2)>epsilon)
            J=0;
            if af2<af4
                if f2>f4
                    f1=f2;af1=af2;af2=af4;f2=f4;K=1;
                else
                    f3=f4;af3=af4;
                end
            else
                if f2>f4
                    f3=f2;af3=af2;af2=af4;f2=f4;K=1;
                else
                    f1=f4;af1=af4;
                end
            end
            c1=(f3-f1)/(af3-af1);c2=((f2-f1)/(af2-af1)-c1)/(af2-af3);
            if c2==0
                J=1;break;
            end
            af4=0.5*(af1+af3-c1/c2);
            if (af4-af1)*(af3-af4)<=0
                J=1;break;
            end
            f4=f(af4);
        end
        if J==0
            if f2>f4
                afxin=af4;fxin=f4;
            else
                afxin=af2;fxin=f2;
            end
        else
            afxin=af2;fxin=f2;
        end
    else
        afxin=af2;fxin=f2;
    end
else
    afxin=f2;fxin=f2;
end   

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -