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
来源:学生作业帮助网 编辑:作业帮 时间:2024/11/17 20:30:20
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
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
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
由于函数变量比较多,所以初始值的取值可能对结果影响很大
甚至有时会不收敛
这里采取了随机数作为初始值,知道收敛位置的做法
的到一个极值,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
>> f=@(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;
>> [x,fv]=fminsearch(f,[0,0,0])
Exiting: Maximum number of function evaluations ha...
全部展开
>> f=@(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;
>> [x,fv]=fminsearch(f,[0,0,0])
Exiting: Maximum number of function evaluations has been exceeded
- increase MaxFunEvals option.
Current function value: -8421906140161461600000000000000000000000000000000000000000000000000000000000000000000000000000000000.000000
x =
1.0e+35 *
0.2761 0.0955 -6.4727
fv =
-8.4219e+99
初始点选择不同,多少会有些影响
收起
这里x>=0,y>=0时比较好算一点,依据偏导数为零是的点可能为函数极值点来计算:
syms x y z;
z = (1+x)*sqrt((1-x)^2+y^2)+x^2;
dx = diff(z,'x');
dy = diff(z,'y');
%求解dx,dy的偏导数为零的x和y
X = solve('2*x + ((x - 1)^2 + y^2...
全部展开
这里x>=0,y>=0时比较好算一点,依据偏导数为零是的点可能为函数极值点来计算:
syms x y z;
z = (1+x)*sqrt((1-x)^2+y^2)+x^2;
dx = diff(z,'x');
dy = diff(z,'y');
%求解dx,dy的偏导数为零的x和y
X = solve('2*x + ((x - 1)^2 + y^2)^(1/2) + ((2*x - 2)*(x + 1))/(2*((x - 1)^2 + y^2)^(1/2))=0','x');
Y = solve('(y*(x + 1))/((x - 1)^2 + y^2)^(1/2)=0','y');
%得到X=y^2/4,Y=0,当偏导数为零时函数取得极值,又有已知条件x,y的范围得到x,y都为零是有极值
x0=0;y0=0;
Z = (1+x0)*sqrt((1-x0)^2+y0^2)+x0^2;
fprintf('极小值为:%i\n',Z);
求采纳为满意回答。
收起
最小值:
fun=inline('(-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)'); 定义最小值函数
x =
57.775484271854 0.935469699107605 ...
全部展开
最小值:
fun=inline('(-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)'); 定义最小值函数
x =
57.775484271854 0.935469699107605 0.916904439913408
f =
-405.911508501718
EXITFLAG =
1
最大值:
fun=inline('-(-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)') 定义最大值函数
[x,f,EXITFLAG]=fmincon(fun,[1,1,1],[],[],[],[],[rand(),rand(),rand()],[])
x =
0.444703364353194 407.499611143861 141.62469777931
f =
-34.4210889820753
EXITFLAG =
1
收起