matlab求多元函数最值在线等

问题描述:

matlab求多元函数最值在线等
y1= -15.3954*x1+0.1630*x2+0.1133*x3+0.1679*x1^2-0.0002*x2^2-0.0004*x3^2-0.0004*x1^3
1个回答 分类:综合 2014-11-10

问题解答:

我来补答
由于函数变量比较多,所以初始值的取值可能对结果影响很大
甚至有时会不收敛
这里采取了随机数作为初始值,知道收敛位置的做法
的到一个极值,521.8202
我试了一下,在比较大的范围内,极值都是收敛于这个值
但是在某些范围是不能够得到收敛的极值的
实际上你的这个函数是没有最值的,只是在某区域有个极值
fun=@(x) -15.3954*x(1)+0.1630*x(2)+0.1133*x(3)+0.1679*x(1)^2-0.0002*x(2)^2-0.0004*x(3)^2-0.0004*x(1)^3;
flag=0;
while (flag~=1);
[x,fval,flag] = fminsearch(@(x) -fun(x),1000*rand(1,4));
end
disp(['当x1-x4的取值' num2str(x) '时']);
disp(['函数有极大值' num2str(-fval)]);
结果:
当x1-x4的取值222.0579 407.4999 141.625 199.4355时
函数有极大值521.8202
再问: x4是什么?
再答: 这个写错,多出来的 可以不用管,就是这句3写了4多给了一个初值
[x,fval,flag] = fminsearch(@(x) -fun(x),1000*rand(1,3));

前面三个数是x1~x3没有问题
 
 
展开全文阅读
剩余:2000