
二元函数极值
-电焊原理
2023年2月16日发(作者:权重的计算方法)MATLAB求解⼆元(多元)函数极值
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为例⼦,采⽤字符串建⽴函数
然⽽此题的问题在于,⽆法找到合适的初值,初值每变动⼀次,fmin也随之变动。
为此,画出函数图像:
补充:contour为画等⾼线命令
contour(x,y,z,n)n为等⾼线条数;
%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))';
digits15
x0=[0,0];
[x,fmin]=fminsearch(f,x0);
vpa(x,15)
vpa(fmin,15)
[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)
由图可以⼤致得到,函数在所选区域内全部为正,最⼩值接近0,在另外选择的若⼲区域中,结果类似,看出最⼩值⼤概是0。
以p191task2_3为例⼦,⽤.m⽂件建⽴函数
先创建.m函数
再在同⼀个⽬录下写
结果:
%p192task2_3fun
%fun2_3.m
functionf=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)