matlab求解最优化问题(数学建模) |
您所在的位置:网站首页 › matlab怎么求带有参数的方程的最大值 › matlab求解最优化问题(数学建模) |
matlab求解最优化问题(数学建模)
1.线性规划
matlab中线性规划优化计算方法和实例 在matlab中用于线性规划优化计算的是linprog()函数。 公式:[x,fval,exitflag,output,lambda]=linprog(c,A,b,Aeq,beq,lb,ub,x0); %x:表示最优解,fval:表示目标函数最优值,exitflag:表示求解的结果是成功还是失败,1代表成功。 %output优化过程中的各种输出信息,lambda:结构体,包含最优解处的拉格朗日乘子。 %c:目标函数系数矩阵,如果求最小值,那么c就是各个变量的系数,如果求最大值,那么c就是各个变量的系数的相反数,A:不等式约束的系数矩阵,b:不等式约束的常向量。 %Aeq:等式约束的系数矩阵,beq:等式约束的常向量,lb、ub表示自变量的上下范围。 %x0:表示变量的初始值,可以缺省。 线性规划优化计算求最优解的方法很多,有单纯形法,大M法,内点法等,linprog函数集中了这几种线性规划算法。 例1: 例2: 上面解决了简单的线性规划问题的求解,线性规划有两种比较特殊的情况,即整数规划和0-1整数规划。(在旧版本中的matlab是不能直接求解这两种特殊的的线性规划。bintprog函数可以用来求0-1整数规划,但求解过程比较麻烦,而且最新版的matlab已经遗弃了这个函数,同时提供了一个比较新的函数——intlinprog) 公式:[x,fval,exitflag]=intlinprog(c,intcon,A,b,Aeq,beq,lb,ub) %该函数的使用和linprog函数的使用十分相似,其仅仅在linprog函数的基础上多了一个参数——intcon。 通过一个例子来了解一下该函数的用法: 在这个例子中,变量的取值范围不再是有理数集,而是整数集。 >> c=[-1;-1]; >> intcon=[1,2];%intcon为整数约束变量的位置。 >> b=[-1;11;-1]; >> c=[-1;-1]; >> intcon=[1,2]; >> a=[-4,2;4,2;0,-2]; >> b=[-1;11;-1]; >> lb=[0;0]; >> [x,fval]=intlinprog(c,intcon,a,b,[],[],lb) x = 2 1 fval = -3求解0-1整数规划时,只需要在求解整数规划的基础上加上一个对变量的最大值约束为1就行了。 看一个例子 matlab中二次规划优化计算方法和实例 什么是二次规划? · 非线性规划的目标函数自变量为x的二次函数; · 约束条件全是线性的; 在matlab中用于二次规划优化计算的是quadprog()函数。 公式:[x,fval,exitflag,output,lambda]=quadprog(H,f,A,b,Aeq,beq,lb,ub,x0,options) %上述参数与线性规划中的参数含义相同,H为实对称矩阵,在求解前需要把二次规划化为标准形式。
从而原问题的最优值为:-10.3214 例2: 原问题的最优值为:11.0305 3.非线性规划在matlab软件中,函数fmincon用于求解非线性规划问题。 [x,fval,exitflag,output,lambda,grad,hessian]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options) %nonlcon表示非线性约束条件(需要写自定义函数),x0为初值。
fmincon函数是默认从给定的x0为中心开始搜索,直至找到函数的z最小值,并返回距离x0最近的函数最小值对应的值,在计算的时候就必须预先判定函数最小值的对应的x值的大概范围,确保定的初值x0在所求的x附近,以减少计算量。 在利用调用f(x)就可以求得最小值了 如果给的是周期函数 那给不同的值一般应该会得到不同x值 但应该f(x)值是一致的 例2: fmincon求解优化问题,最优解不一定唯一。选择不同的迭代初始值x0,可能得到不同的局部最优解(局部最优解不一定为全局最优解) 例3 一、无约束一元函数最优解 在matlab中用于一元无约束优化计算的是fminbnd()函数。 公式:[x,fval,exitflag,output]=fminbnd(fun,x1,x2,options) 例: 二、无约束多元函数最优解 在matlab中用于多元无约束优化计算的是fminunc()函数fminsearch函数。 公式[x,fval,exitflag,output,grad,hessian] =fminunc(fun,x0,options) 公式[x,fval,exitflag,output]=fminsearch(fun,x0,options) 当目标函数阶数大于2时,fminunc()比fminsearch()更有效;当目标函数高度不连续时,fminsearch()更具稳健性。 |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |