非线性方程的求解

在MATLAB中,非线性方程求解所采用的算法是二分法、secant法和逆二次内插法的组合。用fzero函数求单变量函数的零点,其调用格式为:

x = fzero(fun, x0) 如果x0为标量,函数试图找到x0附近fun函数的零点。fzero函数返回的x值为fun函数改变符号处邻域内的点,或者是NaN(如果搜索失败)。这里,当函数发现Inf、NaN或复数时,搜索终止。若x0为一长度为2的矢量,fzero函数假设x0为一区间,其中fun(x0(1))的符号与fun(x0(2))的符号相反。当该情况不为真时,发生错误。用此区间调用fzero函数可以保证fzero函数返回fun函数改变符号处附近的点。

x = fzero(fun,x0,options) 用options结构指定的优化参数进行最小化。

x = fzero(fun,x0,options,P1,P2,...) 提供其他变量如P1, P2等并传递给目标函数fun。如果没有选项设置,则令options=[ ]。

[x, fval] = fzero(...) 返回解x处目标函数的值。

[x, fval, exitflag] = fzero(...) 返回exitflag参数,描述退出条件。

[x, fval, exitflag, output] = fzero(...) 返回包含优化信息的输出结构output。

【例23】 通过计算sin函数在3附近的零点来计算:

code.matlab
>> x = fzero(@sin,3)
x =
    3.1416

【例24】 找出下面函数的零点:

\[f(x)={x}^{3}-2x-5\]

首先编写目标函数的M文件fzeroo.m。

code.matlab
function y = f(x)
y = x.^3-2*x-5;

寻找2附近的零点:

code.matlab
>> z = fzero(@fzeroo,2)
z =
    2.0946