|  | 
 
| 
fzero很多情况下, solve 并不能求得方程的解析解,这时可以采用数值法求解。 % M5 R* P2 ?9 X& x. X1 O
x
EDA365欢迎您登录!您需要 登录 才可以下载或查看,没有帐号?注册  数值求解法包括 fzero 和 fsolve,其区别在于 fzero 只适用于求解一元函数零点,而 fsolve 适用于求解多元函数零点(包括一元函数)。 " d1 U2 _) F% X7 Y6 N, U% W
 当求解一元函数零点时,推荐优先使用 fzero,原因是 fzero 求解一元方程往往更容易,它不仅支持提供初值的搜索,还支持在一个区间上进行搜索。
 " o/ w9 l! m  f; V' F
 . E  s3 [! x9 C' n+ j6 N1 xfzero 的常用形式:
 其中 fun 为函数句柄, x0 为搜索初值, fval 为求解误差。x = fzero(fun,x0)[x,fval] = fzero(fun,x0); \/ l& F: \  d7 h( [
 3 c& g: g( n) I, ^- g3 w7 R, C3 t
 若方程有多个零点,fzero 只能根据你提供的初值求得最靠近初值的一个零点,如果希望求得多个零点,只能够通过改变初值来得到不同的零点。 * e0 C$ p8 B9 I/ l%例:一元方程 sin(x)+cos(x)^2 = 0 y = @(x)sin(x)+cos(x).^2;   [x,fval] = fzero(y,1)  %1为搜索初值- J3 _. M; [9 J- x- W% |1 h9 w) L
 对于初值的选取,目前来说没有什么比较好的办法,只能够通过分析方程的性质,或者通过作图的方法去寻找一个比较靠近零点的初值。另外,fzero 能够提供区间搜索,注意区间两端的端点函数值符号需要反向:
 建议尽量用区间搜索的方式来求解,因为这种方法比单纯的提供一个初始值的运算速度要快一些。而且新版本的 MATLAB 中关于此函数还有多个参数的形式,读者可以参考相关的 help。 ; x, L4 F5 N& y4 oy = @(x)sin(x)+cos(x).^2;  [x,fval] = fzero(y,[-1 1])     %fzero在[-1,1]这个区间进行搜索- e" |+ D' y, l6 C
 
 | 
 |