MATLAB求解二元(多元)函数极值

版权声明:本文为Cantjie原创文章,转载需获得博主许可 https://blog.csdn.net/cantjie/article/details/70476022

matlab求解二元函数极值

依然是机房中的R2010a版本
命令:
1、x=fminsearch(fun,x0)或x=fminunc(fun,x0)求极小值点x,初值选为x0
2、[x,fmin]=fminsearch(fun,x0)或[x,fmin]=fminunc(fun,x0)
3、fminsearch采用单纯形法,fminunc采用牛顿法

除了fminsearch和fminunc这两种命令外,建立函数还可以用不同的方法:

建立函数的方法

以p191task2_2为例子,采用字符串建立函数

% p191task2_2
%求min(f(x))=(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1)*exp(x(1))
clc,clear
f='(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1)*exp(x(1))';
digits 15
x0=[0,0];
[x,fmin]=fminsearch(f,x0);
vpa(x,15)
vpa(fmin,15)

然而此题的问题在于,无法找到合适的初值,初值每变动一次,fmin也随之变动。
为此,画出函数图像:

[x,y]=meshgrid(-30:0.3:-10,-30:0.3:-10);
f=(4*x.^2+ 2*y.^2+4.*x.*y+2.*y+1).*exp(x);
figure(1)
surf(x,y,f)
figure(2)
contour(x,y,f,100)

结果

补充:contour为画等高线命令
contour(x,y,z,n) n为等高线条数;

由图可以大致得到,函数在所选区域内全部为正,最小值接近0,在另外选择的若干区域中,结果类似,看出最小值大概是0。

以p191task2_3为例子,用.m文件建立函数

先创建.m函数

%p192task2_3 fun
%fun2_3.m
function f=fun2_3(x)
f=4*x(1)^2+5*x(1)*x(2)+2*x(2)^2;

再在同一个目录下写

%p191task2_3.m
clc,clear
[x,y]=meshgrid(-10:0.3:10,-10:0.3:10);
z=4*x.^2+5*x.*y+2*y.^2;
figure(1)
surf(x,y,z)
figure(2)
contour(x,y,z)
x0=[-3,-3];
% [x,fmin]=fminsearch(@fun2_3,x0)
[x,fmin]=fminunc(@fun2_3,x0)

结果:
运行结果

猜你喜欢

转载自blog.csdn.net/cantjie/article/details/70476022