当前位置:编程学习 > Matlab >>

非线性规划问题的matlab求解

函数:[x, fval] = fmincon(FUN, X0, A, B, Aeq, Beq, LB, UB, NONLCON)
 
返回的x:是一个向量——在取得目标函数最小时各个xi的取值;
 
返回的fval:目标函数的最小值;
 
参数FUN:目标函数;
 
参数X0:向量x的初始值;
 
参数A:线性不等式约束的系数矩阵,若没有线性不等式约束,则A = [];
 
参数B:线性不等式约束右端的常数列,若没有线性不等式约束,则B = [];
 
参数Aeq:线性等式约束的系数矩阵,若没有等式约束,则Aeq = [];
 
参数Beq:线性等式约束右端的常数列,若没有等式约束,则Beq = [];
 
参数LB:x的下界,常遇到的x1, x2, x3 >= 0,0就是下界,可用zeros(3, 1)生成一个3行1列的向量来表示,其中向量的每个元素的值为0;
 
参数UB:x的上界;
 
参数NONLCON:用.m文件定义的非线性向量函数C(x), Ceq(x)。
 
-------------------------------------------------------------------------------------------------------------
 
求f(x)的最小值及f(x)取得最小值时x的取值:
 
min f(x) = x1^2 + x2^2 + 8
 
约束条件:
 
x1^2 - x2 >= 0
 
-x1 - x2^2 + 2 = 0
 
x1, x2 >= 0
 
-------------------------------------------------------------------------------------------------------------
 
编写目标函数.m文件(不要写在主.m文件里)FUN.m(文件名要与函数名相同)
 
 
[plain]  
%写下面两行就可以了  
function f = FUN(x);  
f = x(1)^2 + x(2)^2 + 8;  
保存。
 
编写非线性约束向量函数.m文件(不要写在主.m文件里)NONLCON.m(文件名要与函数名相同)
 
 
[plain]  
%写下面3行就可以了  
function [g, ceq] = NONLCON(x);  
g = -x(1)^2 + x(2);     %非线性不等式约束  
ceq = -x(1) - x(2)^2 + 2;       %非线性等式约束  
保存。
 
最后编写主体.m文件
 
[plain]  
X0 = rand(2, 1);  
A = [];  
B = [];  
Aeq = [];  
Beq = [];  
LB = zeros(2, 1);  
UB = [];  
[x, fval] = fmincon('FUN', X0, A, B, Aeq, Beq, LB, UB, 'NONLCON')  
保存运行,得
 
[plain]  
x =  
  
    1.0000  
    1.0000  
  
  
fval =  
  
    10  
 
 
函数:[x, fval] = fmincon(FUN, X0, A, B, Aeq, Beq, LB, UB, NONLCON)
 
返回的x:是一个向量——在取得目标函数最小时各个xi的取值;
 
返回的fval:目标函数的最小值;
 
参数FUN:目标函数;
 
参数X0:向量x的初始值;
 
参数A:线性不等式约束的系数矩阵,若没有线性不等式约束,则A = [];
 
参数B:线性不等式约束右端的常数列,若没有线性不等式约束,则B = [];
 
参数Aeq:线性等式约束的系数矩阵,若没有等式约束,则Aeq = [];
 
参数Beq:线性等式约束右端的常数列,若没有等式约束,则Beq = [];
 
参数LB:x的下界,常遇到的x1, x2, x3 >= 0,0就是下界,可用zeros(3, 1)生成一个3行1列的向量来表示,其中向量的每个元素的值为0;
 
参数UB:x的上界;
 
参数NONLCON:用.m文件定义的非线性向量函数C(x), Ceq(x)。
 
-------------------------------------------------------------------------------------------------------------
 
求f(x)的最小值及f(x)取得最小值时x的取值:
 
min f(x) = x1^2 + x2^2 + 8
 
约束条件:
 
x1^2 - x2 >= 0
 
-x1 - x2^2 + 2 = 0
 
x1, x2 >= 0
 
-------------------------------------------------------------------------------------------------------------
 
编写目标函数.m文件(不要写在主.m文件里)FUN.m(文件名要与函数名相同)
 
 
[plain] 
%写下面两行就可以了  
function f = FUN(x);  
f = x(1)^2 + x(2)^2 + 8;  
保存。
 
编写非线性约束向量函数.m文件(不要写在主.m文件里)NONLCON.m(文件名要与函数名相同)
 
 
[plain]  
%写下面3行就可以了  
function [g, ceq] = NONLCON(x);  
g = -x(1)^2 + x(2);     %非线性不等式约束  
ceq = -x(1) - x(2)^2 + 2;       %非线性等式约束  
保存。
 
最后编写主体.m文件
 
[plain] 
X0 = rand(2, 1);  
A = [];  
B = [];  
Aeq = [];  
Beq = [];  
LB = zeros(2, 1);  
UB = [];  
[x, fval] = fmincon('FUN', X0, A, B, Aeq, Beq, LB, UB, 'NONLCON')  
保存运行,得
 
[plain]  
  
    1.0000  
    1.0000  
  
  
fval =  
  
    10  
 
 
补充:综合编程 , 其他综合 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,