matlab 这样的非线性模型怎么编写?

img

img


要求这样的公式用matlab编写实现,要考虑到当集合W更大的时候要怎么编写。
我用fmincon函数实现不了,可能因为我不太熟。

用于无约束最优化模型求解

函数:可以调用 matlab的的函数, fminsearch、fminunc。

调用格式如下: [x,fval]= fminsearch(fun,x0) or [x,fval]= fminunc(fun,x0)

fun:为函数方程、 x0为初始值

举例:

求解函数方程的最小值:

f=@(x)(3/2)*x(1)^2+(1/2)*x(2)^2-x(1)x(2)-2x(1);

[x fval]=fminsearch(f,[-2,4])

%或者

[x fval]=fminunc(f,[-2,4])

结果一样,都如下所示:

x =

1.0000 1.0000

fval =

-1.0000

因为解决非线性规划问题,都是使用的搜索算法,所以非常依赖初始值,大家需要注意。

二、约束最优化问题

调用方程 [x,fval]=fmincon(fun,x0,A,b,Aeq,beq,lb,ub)

对于方程:

f=@(x)-x(1)*x(2)*x(3);

A=[-1,-2,-2;1,2,2];

b=[0;72];

x0=[10,10,10];

[x,fval]=fmincon(f,x0,A,b)

结果:

x =

24.0000 12.0000 12.0000

fval =

-3.4560e+03

当然我们一般可以用 Lingo 求解,这样又方便,又快捷

min=-x1x2x3;

x1+2x2+2x3>=0;

x1+2x2+2x3<=72;

@free(x1);

@free(x2);

@free(x3);

一样的快捷和实用