matlab6——数值微分和方程求解(三)非线性方程求解、极值计算

非线性方程数值求解

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章