利用MATLAB求多元函数的极值分两种情况,(1)无约束条件;(2)有约束条件。
(2)有约束条件下求极小值的方法:
假设多变量非线性函数的数学模型为
min f(x)
c(x)<=0
ceq(x)=0
A·x<=b
Aeq·x<=x<=beq
lb<=x<=ub
X, b,beq,lb,ub为矢量,A,Aeq为矩阵,c(X),ceq(X)为函数(可非线性)。
命令格式: x = fmincon(fun,x0,A,b)
x = fmincon(fun,x0,A,b,Aeq,beq)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)
[x,fval] = fmincon(...)
[x,fval,exitflag] = fmincon(...)
[x,fval,exitflag,output] = fmincon(...)
[x,fval,exitflag,output,lambda] = fmincon(...)
[x,fval,exitflag,output,lambda,grad] =
fmincon(...) [x,fval,exitflag,output,lambda,grad,hessian]= fmincon(...)
例如
求函数 满足条件 的极小值
解:首先,编制 M-file文件
function f myfun(x)
f=-x(1)*x(2)*x(3)
然后重写约束条件为两个小于或等于一个常数的不等式,
因为约束条件是线性的,
用矩阵表示为Ax<=b 其中;
其次,猜测估计提供一个起点,调用优化程序。
x0 = [10; 10;
10]; %
猜测可能的结果作为起点
[x,fval] = fmincon(@myfun,x0,A,b)
x =
24.0000
12.0000
12.0000
fval =
-3.4560e+03
A*x-b=
-72
0
当x1=24,x2=12,x3=12,时函数有极小值-3.4560e+03