zoukankan      html  css  js  c++  java
  • 规划问题(一)

    线性规划

    • 定义:在一组线性约束条件的限制下,求一线性目标函数最大或最小的问题。

    • matlab函数:linprog:

               [x,y]=linprog(f,a,b,aeq,beq,lb,ub)

    其中,x是最优解时自变量的取值,y是最优解,f是价值向量,就是目标函数的系数,a是线性不等式的约束的系数矩阵,b是不等式的的另一侧的系数矩阵,aeq是等式的约束的系数矩阵,beq是等式约束的另一侧的系数矩阵,lb是X上界,ub是下界。

    其中,求的是最小值。具体使用办法:

    http://blog.sina.com.cn/s/blog_4afe685f0101gxgg.html

    • 拓展没看懂,略。

    整数规划

    • 定义:数学规划中的变量部分或全部限制为整数时,成为整数规划。(所以有可能没有整数解)
    • 指派问题:n人做n项工作,第i人做第j项工作,花费cij的时间,问如何分配?

    min∑cij·xij

    s.t.:第j列只有一个人是1,第i行只有一个是1.

    用法和linprog几乎一样,也是求最小值。

     

    指派问题2.7,

    如何把二维决策变量变成一维决策变量?  c=c(:)

    其他的看不懂了!这个a到底是什么鬼啊!!!

    例2.8注意混合整数规划中,lb ub怎么写。

     

     非线性规划

    • 定义:如果目标函数或约束条件中包含非线性函数,就称这种规划问题为非线性规划问题。
    • [x,fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
    • fun是函数,要定义一个函数;nonlcon也要另外定义函数!

     约束极值问题

    •  规划问题:带有约束条件的极值问题;
    • 二次规划:自变量是二次函数,约束条件又全是线性的。===》    quadprog
    • 罚函数法:转化成求解无约束条件极值问题。

      例题:飞行管理问题

    • 这个PPT写的要比书上更清楚;
    • 程序怎么写?
    • 目标函数是delta*delta'
    • 约束条件是1.不碰撞;2.调的角度最大三十度;
     

    有关自定义函数:

    function [output 1,....] = name(input1,...)

    调用的话,函数一定要放在当前目录下,要不然就报错说“未定义函数或变量”。

    有关极限的函数limit:

     求导数:

    diff(expr,v,n)

    v是变量,n是阶数。

    对于一些简单的运算:;

    simplify:https://zhidao.baidu.com/question/208585283.html

                   各种化简↑;

     pretty 分数线居中显示。

     求极值:

    对函数求导=0即可:

    solve函数

    syms x
    y=balabalaba;
    dy=diff(y);
    dy_zero=solve(dy);
    dy_zero_num=double(dy_zero);%变成数值类型
    ezplot(y);%画图
    

     此处求得的是X轴坐标,就算求出来的点也是驻点,不一定是极值点。

    再利用高数的知识:

    • 所以要求 Hessian阵:如果是正定阵,则是极小值,如果驻点处是负定阵则是极大值,如果是不定阵,则不是极值点。

         Hessian矩阵的特征值就是形容其在该点附近特征向量方向的凹凸性,特征值越大,凸性越强;

    • subs():matlab中subs()是符号计算函数,表示将符号表达式中的某些符号变量替换为指定的新的变量,常用调用方式为:subs(S,OLD,NEW)

          表示将符号表达式S中的符号变量OLD替换为新的值NEW。

    syms x
    syms y
    f=x^3-y^3+3*x^2+3*y^2-9*x;
    df=jacobian(f); %求一阶导
    d2f=jacobian(df); %求hessian阵
    [xx,yy]=solve(df) %求驻点
    xx=double(xx);yy=double(yy);
    for i=1:length(xx)
        a=subs(d2f,{x,y},{xx(i),yy(i)});
        b=eig(a); %求特征值
        f=subs(f,{x,y},{xx(i),yy(i)});f=double(f);
        if all(b>0)
            fprintf('(%.1f,%.1f)是极小值点,对应的极小值为%.1f ',xx(i),yy(i),f);
        elseif all(b<0)
            fprintf('(%.1f,%.1f)是极大值点,对应的极大值为%.1f ',xx(i),yy(i),f);
        elseif any(b>0)&any(b<0)
             fprintf('不是极值点 ');
        else
            fprintf('无法判断 ');
        end
    end

     以上是符号解,以下是数值解


    另一种 fminunc函数和fminsearch函数等等等等一堆函数;

    还有梯度法。

    还能用optimtool,这个感觉就是上面代码的另一种图形化形式而已,不看了(其实是不会哈哈哈)。

    求积分:

    不定积分:int(expr,v)

    定积分:int(expr,v,a,b)

     

     求级数:

    symsum(expr,v,a,b)

    cell数组的用法:

    见台大郭老师PPT。

    structure:

    和C很像。

     

     求常微分方程:

     初值问题是指在自变量的某值给出适当个数的附加条件,用来确定微分方程的特解的这类问题

     

     

    https://wenku.baidu.com/view/797c7be9998fcc22bcd10d64.html

    syms y(x)
    dsolve(x.^2+y+(x-2*y)*diff(y)==0)

    求高阶微分方程:

    • 必须变成一阶微分方程组;
    • 把一阶方程组写成两个参数t和y,返回一个列向量的M文件F.m;
    • [T,Y]=solver('F',tspan,y0)
    • 输入参数F是用M文件定义的常微分方程组,tspan是求解区间,y0是初值列向量,solver:ode45,ode23,ode113

    后话:参考书是《数学建模算法与应用》,以上随手记录,加强印象~

    初值问题是指在自变量的某值给出适当个数的附加条件,用来确定微分方程的特解的这类问题
    [Chū zhí wèntí shì zhǐ zài zì biànliàng de mǒu zhí gěi chū shìdàng gè shǔ de fùjiā tiáojiàn, yòng lái quèdìng wéifēn fāngchéng de tè jiě de zhè lèi wèntí]
    The initial value problem is an additional condition that gives an appropriate number of values ​​for an independent variable to determine such a special solution to a differential equation.
  • 相关阅读:
    new function
    Confluence5.1 最新版的安装&破解&汉化
    ganglia 启动命令
    ganglia Web前端清除当机节点
    git初始化
    递归算法的时间复杂度分析
    tcp dump 截取http
    java.io.Serializable浅析
    java 复用类的三种方式区别 组合,继承,代理的区别
    Linux netstat命令详解
  • 原文地址:https://www.cnblogs.com/flowerIron/p/11440631.html
Copyright © 2011-2022 走看看