您现在的位置:e-works > 智造书屋 > 书籍列表 > 机械工程设计分析和MATLAB应用(第3版) > 非线性方程的数值解

第八章 代数方程和常微分方程求解

第四节 非线性方程的数值解

1.一维非线性方程
对于一维非线性方程f(x)=0求解,可以看做是单变量的极小化问题,通过不断缩小搜索区间来逼近一维问题的真解。因此,可以使用一维非线性方程优化解函数来求解。其调用格式是
[x,fx,flag]=fzero(fun,x0)
其中,输入参数中fun是非线性方程的函数表达式;x0是根的初值;输出参数中x是非线性方程的数值解;fx是数值解的函数值;返回参数flag>0时,表示求解成功,否则求解出现问题。
函数fzero所使用的算法为二分法、secant法和逆二次插值法的组合。

例8-4  求解一维非线性方程1的数值解。
% 求解单变量x非线性方程
x0=0.1;                                           % 解的初值
[xz,fz,flag]=fzero('atan(x)+exp(x)',x0);
disp('求解成功性判断参数:'), flag
disp('非线性方程的解:'),xz
disp('非线性方程解的函数值:'),fz

M文件运行结果:
求解成功性判断参数:
flag =
     1
非线性方程的解:
xz =
   -0.6066
非线性方程解的函数值:
fz =
 -1.1102e-016
可见,得到解的误差非常小,而且判断参数flag>0,表示求解成功。

2.多维非线性方程组
对于多维非线性方程组F(x)=0,其中f(x)=0是有多个非线性函数组成的向量函数

1 
 

使用多维非线性方程组优化解函数求解的调用格式是
[x,fval,flag]=fsolve(fun,x0)
其中,输入参数中fun是非线性方程组的向量函数表达式;x0是根的初值;输出参数中x是非线性方程(组)的数值解;fval是数值解的函数值;返回参数flag>0时,表示求解成功,否则求解出现问题。
函数fsolve的作用是从根的初值x0开始,以逐渐减小误差的算法,搜索出满足多维非线性方程组fun的实根x和对应的函数值fval。

例8-5  求二维非线性方程组1的数值解。
x0=[2;3];                                        % 解的初值
% 定义非线性方程组表达式f和向量x
fun=inline('[2*x(1)-x(2)^2-exp(-x(1));-x(1)^3+x(1)*x(2)-exp(-x(2))]','x')
[xn,fval,flag]=fsolve(fun,x0);
disp('求解成功性判断参数:'), flag
if flag>0
    disp('方程组的解成功')
elseif flag<=0
    disp('方程组的解不成功')
end
disp('非线性方程组的解:'),xn
disp('非线性方程组解的函数值:'),fval

M文件运行结果:
求解成功性判断参数:
flag =
     1
方程组的解成功
非线性方程组的解:
xn =
    0.9978
    1.2755
非线性方程组解的函数值:
fval =
  1.0e-006 *
   -0.1945
   -0.3372
可见,两个非线性方程组解的函数值非常接近于0,说明其解的误差很小,而且判断参数flag>0,表示求解成功。