美文网首页数学建模课程笔记【散人】数学建模数学建模艺术
【数学建模算法】(28)插值和拟合:最小二乘优化

【数学建模算法】(28)插值和拟合:最小二乘优化

作者: 热爱学习的高老板 | 来源:发表于2019-08-23 12:27 被阅读7次

    在无约束最优化问题中,有些重要的特殊情形,比如目标函数由若干个函数的平方和构成。这类函数一般可以写成:
    F(x)=\sum_{i=1}^{m} f_{i}^{2}(x), x \in R^{n}
    其中x=\left(x_{1}, \cdots, x_{n}\right)^{T},一般假设m \geq n。我们把极小化这类函数的问题:
    \min F(x)=\sum_{i=1}^{m} f_{i}^{2}(x)
    称为最小二乘优化问题。

    最小二乘优化是一类比较特殊的优化问题,在处理这类问题时,Matlab也提供了一些强大的函数。在 Matlab 优化工具箱中,用于求解最小二乘优化问题的函数有:lsqlin、lsqcurvefit、lsqnonlin、lsqnonneg,用法介绍如下。

    1.lsqlin函数

    求解\min _{x} \frac{1}{2}\|C x-d\|_{2}^{2}
    s.t. \left\{\begin{array}{l}{A^{*} x \leq b} \\ {\text {Aeq}^{*} x=b e q} \\ {l b \leq x \leq u b}\end{array}\right.
    其中C, A, A e q为矩阵,d, b, b e q, l b, u b, x为向量。
    Matlab函数为:
    x=lsqlin(C,d,A,b,Aeq,beq,lb,ub,x0)

    例1 用Isqlin函数求一个形如y=a+b x^{2}的经验公式,使它与下表所示的数据拟合。

    x 19 25 31 38 44
    y 19.0 32.3 49.0 73.3 97.8

    解:程序如下:

    x=[19 25 31 38 44]';
    y=[19.0 32.3 49.0 73.3 97.8]';
    r=[ones(5,1),x.^2];
    ab=lsqlin(r,y)
    x0=19:0.1:44;
    y0=ab(1)+ab(2)*x0.^2;
    plot(x,y,'o',x0,y0,'r')
    

    2.lsqcurvefit函数

    给定输入输出数列xdata,ydata,求参量x使得
    \min _{x} \frac{1}{2} \| F(x, x{ data })-y d a t a \|_{2}^{2}=\frac{1}{2} \sum_{i}\left(F\left(x, x{ dat } a_{i}\right)-y d a t a_{i}\right)^{2}

    Matlab中的函数为:
    X=lsqcurvefit(FUN,X0,XDATA,YDATA,LB,UB,OPTIONS)
    其中FUN是定义函数F(x, x d a t a)的N文件。

    例2 用下面表中的数据拟合函数c(t)=a+b e^{-0.02 k t}中的参数a, b, k

    t_{j} 100 200 300 400 500 600 700 800 900 1000
    c_{j} 4.54 4.99 5.35 5.65 5.90 6.10 6.26 6.39 6.50 6.59

    解:这个问题即解最优化问题:
    \min F(a, b, k)=\sum_{i=1}^{10}\left(a+b e^{-0.02 k t_{j}}-c_{j}\right)^{2}

    解这个问题要分两步:
    首先编写待求函数:

    function f=fun1(x,tdata);
    f=x(1)+x(2)*exp(-0.02*x(3)*tdata); %其中 x(1)=a,x(2)=b,x(3)=k
    

    其中参数x是原函数的待求参数列表,xdata是函数自变量。
    之后在主函数中调用lsqcurvefit,编写程序:

    td=100:100:1000;
    cd=[4.54 4.99 5.35 5.65 5.90 6.10 6.26 6.39 6.50 6.59];
    x0=[0.2 0.05 0.05];
    x=lsqcurvefit(@fun1,x0,td,cd)
    

    3.lsqnonlin函数

    已知函数向量F(x)=\left[f_{1}(x), \cdots, f_{k}(x)\right]^{T},求x使得:
    \min _{x} \frac{1}{2}\|F(x)\|_{2}^{2}
    Matlab中的函数为:

    X=lsqnonlin(FUN,X0,LB,UB,OPTIONS)
    

    用该函数求解例2:
    首先编写含有待求参数的函数:

    function f=fun2(x);
    td=100:100:1000;
    cd=[4.54 4.99 5.35 5.65 5.90 6.10 6.26 6.39 6.50 6.59];
    f=x(1)+x(2)*exp(-0.02*x(3)*td)-cd;
    

    之后调用函数lsqnonlin,编写如下程序:

    x0=[0.2 0.05 0.05]; %初始值是任意取的
    x=lsqnonlin(@fun2,x0)
    

    4.lsqnonneg函数

    求解非负x,使得满足\min _{x} \frac{1}{2}\|C x-d\|_{2}^{2}
    Matlab中的函数为:

    X =lsqnonneg(C,d,X0,OPTIONS)
    

    例3 已知C=\left[\begin{array}{ll}{0.0372} & {0.2869} \\ {0.6861} & {0.7071} \\ {0.6233} & {0.6245} \\ {0.6344} & {0.6170}\end{array}\right]d=\left[\begin{array}{l}{0.8587} \\ {0.1781} \\ {0.0747} \\ {0.8405}\end{array}\right],求x(x \geq 0)满足\min _{x} \frac{1}{2}\|C x-d\|_{2}^{2}最小。

    编写程序如下:

    c=[0.0372 0.2869;0.6861 0.7071;0.6233 0.6245;0.6344 0.6170];
    d=[0.8587;0.1781;0.0747;0.8405];
    x=lsqnonneg(c,d)
    

    相关文章

      网友评论

        本文标题:【数学建模算法】(28)插值和拟合:最小二乘优化

        本文链接:https://www.haomeiwen.com/subject/njeosctx.html