非线性方程求解、极值计算
非线性方程数值求解
1.单变量非线性方程求解
x=fzero(filename,x0):
filename是待求根方程左端的函数表达式,x0是初始值。
ps:用该函数求解方程时,初始值选取十分重要,可以在确定初始值之前绘制图形大体曲线,确定零点大体位置,然后再估计初值。
2.非线性方程组的求解
x=fsolve(filename,x0,option)
x为返回的近似解,filename是待求根方程左端的函数表达式,x0是初值。
option用于设置优化工具箱的优化参数,可以调用optimset函数来完成。例如,Display参数设置为‘off’时不显示中间结果。
f=@(x) [sin(x(1))+x(2)+x(3)^2*exp(x(1)),x(1)+x(2)+x(3),x(1)*x(2)*x(3)];
x=fsolve(f,[1,1,1],optimset('Display','off'))
%验证:
f(x)
x = 0.022381577931908 -0.022380302441219 -0.000001275490689
ans = 1.0e-06 * -0.593080249610492 -0.000000000001322 0.000638901555530
%结果很小所以比较精确
函数极值的计算
函数极值包括极大值和极小值,或者叫最大值和最小值。MATLAB只考虑最小值 问题的计算,如果要求f(x)的最大值,可以通过求-f(x)的最小值来解决。
无约束最优化问题
函数调用:
[xmin,fmin]=fminbnd(filename,x1,x2,option) [xmin,fmin]=fminsearch(filename,x0,option) [xmin,fmin]=fminunc(filename,x0,option)
- xmin表示极小值点,fmin表示最小值
- filename是定义的目标函数。
- option为优化参数,可以通过optimset函数来设置。
- 第一个函数的输入变量xl、x2分别表示被研究区间的左、右边界。
- 后两个函数的输入变量x0是一个向量,表示极值点的初值。
例子:
f=@(x) x-1./x+5;
[xmin,fmin]=fminbnd(f,-10,-1)
[xmin,fmin]=fminbnd(f,1,10)
结果:
xmin = -9.999946678462546
fmin =-4.899946145244328
xmin =1.000053455645318
fmin =5.000106908433283
有约束最优化问题
即求取一组x,使得目标函数f(x)为最小,且满足约束条件G(x)≤0。记号s.t.是英文subject to的缩写,表示x要满足后面的约束条件。
(约束条件可以进一步细化为:线性不等式约束、线性等式约束、非线性不等式约束、非线性等式约束以及x的下界和上界。)
函数调用:
[xmin,fmin]=fmincon(filename,x0,A,b,Aeq,beq,Lbnd,Ubnd,NonF,option)
- 其中,xmin、fmin、filename、x0和option的含义与求最小值函数相同。
- 其余参数为约束条件,包括线性不等式约束、线性等式约束、x的下界和上界以及定义非线性约束的函数。如果某个约束不存在,则用空矩阵来表示。
例题:
f=@(x) 0.4*x(2)+x(1)^2+x(2)^2-x(1)*x(2)+1/30*x(1)^3;
x0=[0.5;0.5];
A=[-1,-0.5;-0.5,-1];
b=[-0.4;-0.5];
lb=[0;0];
option=optimset('Display','off');
[xmin,fmin]=fmincon(f,x0,A,b,[],[],lb,[],[],option)%没有的条件就用空矩阵代替
结果:
xmin =
0.339562825416758
0.330218614948690
fmin =0.245609812236434