急求关于matlab解多元非线性函数最大值的问题!!!!!!在线等!!!!

2024-12-20 10:59:14
推荐回答(3个)
回答1:

参考代码:

beta=[0.352857611372806 0.147037574095378 0.104674909015145 0.646763721286202 0.432786865123937 0.184573723821254 -72.2558042754852 -221.318306468610 -105.099496331776 -92.1692117077900 3.01793432332517 38.8257158044091 8.33224554279042 4.74414058982192 159.315211549941];
bb=beta;
f(x)=@(x)bb(15)+bb(1)*(x(1)*x(2))+bb(2)*(x(1)*x(3))+bb(3)*(x(1)*x(4))+bb(4)*(x(2)*x(3))+bb(5)*(x(2)*x(4))+bb(6)*(x(3)*x(4))+bb(7)*x(1)+bb(8)*x(2)+bb(9)*x(3)+bb(10)*x(4)+bb(11)*(x(1).^2)+bb(12)*(x(2).^2)+bb(13)*(x(3).^2)+bb(14)*(x(4).^2);%函数形式

lb = [5 1 1 2];
ub = [23 5.5 14.5 20];

% 初值
x0 = (lb+ub)/2;
opt = optimset('Display','off');
warning off optim:fmincon:SwitchingToMediumScale

% 求最小值
[x,fval,exitflag] = fmincon(fx,x0,[],[],[],[],lb,ub,[],opt);
fprintf('\nMin f(x) = %.5g, at x = %s, EXITFLAG = %i\n', fx(x), mat2str(x,5), exitflag);

% 求最大值
[x,fval,exitflag] = fmincon(@(x)-fx(x),x0,[],[],[],[],lb,ub,[],opt);
fprintf('Max f(x) = %.5g, at x = %s, EXITFLAG = %i\n', fx(x), mat2str(x,5), exitflag);

求得结果:

Min f(x) = -1300.6, at x = [11.505 2.6958 5.9972 9.3475], EXITFLAG = 5
Max f(x) = 627.87, at x = [23 5.5 14.5 20], EXITFLAG = 1

根据运行情况,最小值与初值选择关系不大,而最大值对初值比较敏感,选择不同的初值可能会收敛到不同的局部极值点。可以把初值改为

x0 = lb + rand(1,4).*(ub-lb);

多试几次。

回答2:

x1=11.505267,x2= 2.695821, x3=6, 5.9971159, x4=9.3474538

Z=1300.58433018611 最大值

x1=5., x2= 5.5,  x3=1., x4=2.

Z=411.244821379153 最小值


回答3:

什么控制算法?