matlab学习——非线性规划

一元无约束规划

[x, fval]= fminbnd (f,x1,x2)其中fun为目标函数,支持字符串,inline函数,句柄函数,[x1,x2]为优化区间。输出x为最优解,fval为最优值

例1 求函数y=2e^{-x}sin(x)在区间【0,8】上的最大值、最小值。

代码 如下

y='2*exp(-x)*sin(x)'
[xmin,fmin]=fminbnd(y,0,8)
%fplot(y,[0,8])

答案是

y =
    '2*exp(-x)*sin(x)'
xmin =
    3.9270
fmin =
   -0.0279

 

也可以画图来看看最大值最小值的位置

求最大值的时候可以这样

y_1='-2*exp(-x)*sin(x)'
[xmax,ymax]=fminbnd(y_1,0,8)
ymax=-ymax
y_1 =
    '-2*exp(-x)*sin(x)'
xmax =
    0.7854
ymax =
   -0.6448
ymax =
    0.6448

 

也可以运用inline函数求解

y_2=inline('2*exp(-x)*sin(x)')
[xmax_1,ymax_1]=fminbnd(y_2,0,8)
y_2 =
     内联函数:
     y_2(x) = 2*exp(-x)*sin(x)
xmax_1 =
    3.9270
ymax_1 =
   -0.0279

答案有几分不一样,这是由各种函数的内置算法不同影响的。

当然 ,我们也可以运用句柄函数。

先写一个m文件

function f=fun1(x)
f=2*exp(-x)*sin(x);

函数也有几种调用形式

[x1,y1]=fminbnd('f',0,8)
[x2,y2]=fminbnd('f(x)',0,8)
[x3,y3]=fminbnd(@f,0,8)

运行结果是相同的

多元无约束优化

[x, fval]= fminunc(fun,x0)

[x, fval]= fminsearch(fun,x0)

其中:输入参数fun为目标函数,支持字符串,inline函数、句柄函数,x0为初值,必须得有

注意:fminunc,fminsearch只支持函数fun自变量单变量符号,如x(1),x(2)等

例2 求解f=100(y-x^{2})^{2}+(1-x)^{2}的最小值

f='100*(x(1)-x(2)^2)^2+(1-x(2))^2'
[x,fval]=fminunc(f,[0,0])
[x_1,fval_1]=fminsearch(f,[0,0])

答案为


x =
    1.0000    1.0000
fval 
   1.9474e-11
x_1 =
    1.0000    1.0000
fval_1 =
   3.6862e-10

 有约束优化

[x, fval]= fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon)

参数解释

fun为目标函数,支持字符串、inline函数,句柄函数,x0初值,A线性不等式约束系数、b线性不等式约束常数项、Aeq线性等式约束系数,线性beq等式约束常数,nonlcon非线性约束,支持句柄函数。

先创建两个句柄函数

function f1=fun(x)
f1=x(1)^2+4*x(2)^2;

function [c,ceq]=fun(x)
c=x(1)^2+x(2)^2-10;
ceq=0;
x0=[10,10];
A=[-3,-4];b=-13;
lb=[0,0];
[x,f]=fmincon(@f1,x0,A,b,[],[],lb,[],@f3)

答案如下

x =

    2.9991    1.0007


f =

   13.0000

再看一个例子

例 4

matlab学习——非线性规划_第1张图片

先构造两个句柄函数

function f2=f(x)
f2=x(1)^2+4*x(2)^2+x(3)^2;


function [c,ceq]=fun(x)
c=[x(1)^2+x(2)^2-x(3)-100,-3*x(1)^3-x(2)^2+10*x(3)^0.5+20];
ceq=3*x(1)-x(2)^2+x(3)-50;%当非线性不等式约束有多个的时候,就要用矩阵写出约束条件。

 

代码

x0=[1,1,1];
A=[-3,-4,-1];b=13;
lb=[0,0,0];
[x,f]=fmincon(@f2,x0,A,b,[],[],lb,[],@f4)

x =

   10.8390    0.0005   17.4831


f =

  423.1423

 

你可能感兴趣的:(matlab学习——非线性规划)