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

%%函数系数赋值
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);
fx=@(bb,x)bb(15)+bb(1)*(x1*x2)+bb(2)*(x1*x3)+bb(3)*(x1*x4)+bb(4)*(x2*x3)+bb(5)*(x2*x4)+bb(6)*(x3*x4)+bb(7)*x1+bb(8)*x2+bb(9)*x3+bb(10)*x4+bb(11)*(x1.^2)+bb(12)*(x2.^2)+bb(13)*(x3.^2)+bb(14)*(x4.^2);%函数形式
%%其中,x1的区间为[5,23]、x2区间为[1,5.5]、x3区间[1,14.5]、x4 区间[2,20]
%%求目标函数fx在约束范围内的最大值及最小值,并求fx取得最值下对应的x1、x2、x3、x4

跪求大侠帮我写个matlab的求解代码,分不多了,就这么点了。

参考代码:

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);

多试几次。

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-07-27

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 最小值


本回答被提问者采纳
第2个回答  2014-07-26
什么控制算法?追问

楼上大侠代码的算法是subspace trust region(信赖域反射算法),求出的极值对应的变量好像和实际情况不符合啊,不知道用其他算法能不能行,你有什么看法,说一下 啊

matlab解多元非线性方程 求大神
x = num2str(x)f = f(x)得到的最优解为:x = -3.3140659e-018 3088.6297 1.1046886e-018 6911.3703 f = 1.4204e+005 说明 1、最优解的x1、x3在浮点数误差意义上为0;2、由于x1的结果是很小的负值,导致目标函数的y1为无穷大,所以该项的x1应加绝对值符号(x1-x4都应该是正...

关于matlab多元非线性优化问题,大神来帮帮忙啊
你在上个问题中的第一个约束条件最右边的常数是220,不知道为什么这里变成了2500.再考虑到还有Ax<=b构成的线性不等式约束,即使把上面的2500改成220,也无法找到可行解。因为该线性不等式的第一个就是x1-15*x3<=0,而x1最小值为500,x3最大值为30,不等式根本不可能满足。优化问题并非随便一写就...

matlab解多元非线性方程 求大神
首先定义函数:function f=fx(x)f(1)=3*x(1)-cos(x(2)*x(3))-0.5;f(2)=x(1)^2-81*(x(2)+0.1)^2+sin(x(3))+1.06;f(3)=exp(-x(1)*x(2))+20*x(3)+(10*pi-3)\/3;>> x=fsolve(@fx,[1,1,1])最后求得x =0.5000 0.0000 -0.5236 ...

多元非线性 Matlab求最大值
[x,f]=fminsearch(fun,[a,b,c]);%a,b,c为最大值附近的点 x -f 这样求得的是极大值,若函数只有一个顶点,则极大值为最大值,若函数有几个不同的顶点,最好先画图,再根据图估计a,b,c。

MATLAB 的多元非线性方程求极值问题
应该是前两行存为文件fun.m,后两句 x0=[5,2.75,6,27,60] %起始点 [x,fval]=fminunc(@fun,x0)在命令窗口里调用。从你的表达式看,五个变元之间没有耦合,可以分开来求,很容易可以判断,函数最小值应该发生在x1、x2、x3=inf,x4、x5=-inf处。

关于matlab多元非线性优化问题,大神来帮帮忙啊 老是不能运行啊_百度知...
1、按照函数fmincon的参数顺序,在非线性约束之前,还应该有变量上限,即 [x,fval,exitflag,output,lambda,grad,hession]=fmincon('funn',x0,A,b,[],[],vlb,[],'nonlin')2、非线性等式约束只需要写成方程左侧就可以了:y=-0.01*x(2)*x(4)+220y=-x(2)*(x(1)*x(3)+x(2)*x(4...

利用matlab 求解非线性规划问题
利用matlab 求解非线性规划问题,其运行代码编写,可以这样来考虑:1、创建目标函数,myobj(x)f=-(2*x1+3*x1^2+3*x2+x2^2+x3)2、创建约束条件函数,mycon(x)根据给出的条件,来写不等式条件和等式条件 3、使用fmincon()函数,求解x1,x2,x3。即 [x,fval,exitflag]=fmincon(@myobj,x...

Matlab问题!逐步多元非线性回归 以及求极值问题
第一步 data=[1.0 13.0 1.5 0.330;1.4 19.0 3.0 0.366;1.8 25.0 1.0 0.294;2.2 10.0 2.5 0.476;2.6 16.0 0.5 0.209;3.0 22.0 2.0 0.451;3.4 28.0 3.5 0.482];x1=data(:,1);x2=data(:,2);x3=data(:,3);y=data(:,4);mat=[ones(size(x1...

如何使用MATLAB解非线性方程组
用solve函数。例如:x^2+y^3=10 x^3-y^2=1 其中x,y为方程组的未知量 在Matlab的命名窗口中输入:syms x y [x y]=solve('x^2+y=10','x^2-y^2=1','x','y')输出计算结果为:x = (37^(1\/2)\/2 + 21\/2)^(1\/2)(21\/2 - 37^(1\/2)\/2)^(1\/2)-(21\/2 - 1\/2*...

MATLAB的solve函数求非线性解方程或方程组
MATLAB的solve函数是一个强大的工具,用于处理各种代数方程和非线性方程的求解任务。它的使用方法包括但不限于:单变量方程求解通过以下步骤,我们可以使用solve函数来求解一个单变量方程:编写程序:[x, sol] = solve(equation, variable)运行结果:程序执行后,输出变量x的解sol方程组求解对于方程组,其...

相似回答