规划问题(一)

线性规划

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

  • matlab函数:linprog:

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

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

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

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

  • 拓展没看懂,略。

整数规划spa

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

min∑cij·xij.net

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

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

 

指派问题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\n',xx(i),yy(i),f);
    elseif all(b<0)
        fprintf('(%.1f,%.1f)是极大值点,对应的极大值为%.1f\n',xx(i),yy(i),f);
    elseif any(b>0)&any(b<0)
         fprintf('不是极值点\n');
    else
        fprintf('没法判断\n');
    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.
相关文章
相关标签/搜索