线性规划
-
定义:在一组线性约束条件的限制下,求一线性目标函数最大或最小的问题。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
- 蒙特卡洛法:代码见:https://www.cnblogs.com/caiyishuai/p/11394679.html
感受蒙特卡洛和大数定律差很少的原理了。htm
- 混合整数规划:intlinprog:https://www.cnblogs.com/goodtwo/p/11145699.html
用法和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便可:
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 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
后话:参考书是《数学建模算法与应用》,以上随手记录,增强印象~
