无约束一维极值——抛物线法

抛物线法是求无约束一维极值问题的一种方法,也叫二次插值法,其理论依据为二次多项式可以在最优点附近较好地逼近函数的形状,做法是在函数的最优点附近取三个构造点,然后用这三个点构造一条抛物线,把这条抛物线的极值点作为函数的极值点的近似。

每次构造 一条抛物线后,抛物线的极值点就可作为一个新的构造点,新的构造点与原来的三个构造点经过某种算法,得到下一步抛物线逼近的三个构造点,这就是抛物线法的算法过程。

编写抛物线法的MATLAB代码如下:

function root = Parabola(f,a,b,x,eps)
%抛物线法求函数f在区间[a,b]上的一个零点
%函数名: f
%区间左端点: a
%区间右端点: b
%初始迭代点: x
%根的精度: eps
%求出的函数零点: root
    if(nargin == 4)
        eps=1.0e-4;
    end
    f1 = subs(sym(f),findsym(sym(f)),a);
    f2 = subs(sym(f),findsym(sym(f)),b);
    if(f1 ==0)
        root = a;
    end
    if(f2 == 0)
        root= b;
    end
    if(f1*f2> 0)
        disp('两端点函数值乘积大于0');
        return;
    else
        tol= 1;
        fa = subs(sym(f), findsym(sym(f)),a);
        fb = subs(sym(f), findsym(sym(f)),a);
        fx = subs(sym(f), findsym(sym(f)),x);
        d1=(fb-fa)/(b-a);
        d2=(fx- fb)/(x- b);
        d3=(f2- f1)/(x-a);
        B=d2+d3*(x-b);
        root=x-2+ fx/(B+ sign(B) * sqrt(B^2-4* fx*d3));
        t= zeros(3);
        t(1)=a;
        t(2)=b;
        t(3)=x;
        while(tol> eps)
            t(1) = t(2);        %保存3个点
            t(2) = t(3);
            t(3)= root;
            f1 = subs(sym(f),findsym(sym(f)),t(1));    %计算3个点的函数值
            f2 = subs(sym(f),findsym(sym(f)),t(2));
            f3 = subs(sym(f),findsym(sym(f)),t(3));
            d1 =(f2- f1)/(t(2)-t(1));                   %计算3个差分
            d2= (f3- f2)/(t(3)- t(2));
            d3= (d2- d1)/(t(3)- t(1));
            B=d2+d3* (t(3)- t(2));                      %计算算法中的B
            root= t(3)-2* f3/(B+ sign(B) * sqrt(B^2-4*f3*d3));
            tol= abs(root- t(3));
        end
    end
end

例 采用抛物线法求方程lgx+x1/2=2在区间[1,4]上的一个根。

解:根据抛物线算法,编写代码如下:

clear all
clc
syms x
f = sqrt(x) + log(x)-1;
r = Parabola( f,1,3,2)

结果如下:
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值