Thursday, August 13, 2009

zero function

fzero

Find zero of a function of one variable

Syntax

  • x = fzero(fun,x0)
    x = fzero(fun,x0,options)
    x = fzero(fun,x0,options,P1,P2,...)
    [x,fval] = fzero(...)
    [x,fval,exitflag] = fzero(...)
    [x,fval,exitflag,output] = fzero(...)

Description

x = fzero(fun,x0) tries to find a zero of fun near x0, if x0 is a scalar. The value x returned by fzero is near a point where fun changes sign, or NaN if the search fails. In this case, the search terminates when the search interval is expanded until an Inf, NaN, or complex value is found.

If x0 is a vector of length two, fzero assumes x0 is an interval where the sign of fun(x0(1)) differs from the sign of fun(x0(2)). An error occurs if this is not true. Calling fzero with such an interval guarantees fzero will return a value near a point where fun changes sign.

x = fzero(fun,x0,options) minimizes with the optimization parameters specified in the structure options. You can define these parameters using the optimset function. fzero uses these options structure fields:


Display
Level of display. 'off' displays no output; 'iter' displays output at each iteration; 'final' displays just the final output; 'notify' (default) dislays output only if the function does not converge.
TolX
Termination tolerance on x.

x = fzero(fun,x0,options,P1,P2,...) provides for additional arguments passed to the function, fun. Use options = [] as a placeholder if no options are set.

[x,fval] = fzero(...) returns the value of the objective function fun at the solution x.

[x,fval,exitflag] = fzero(...) returns a value exitflag that describes the exit condition of fzero:


>0
Indicates that the function found a zero x.
<0
No interval was found with a sign change, or a NaN or Inf function value was encountered during search for an interval containing a sign change, or a complex function value was encountered during the search for an interval containing a sign change.

[x,fval,exitflag,output] = fzero(...) returns a structure output that contains information about the optimization:


output.algorithm
The algorithm used
output.funcCount
The number of function evaluations
output.iterations
The number of iterations taken

    Note For the purposes of this command, zeros are considered to be points where the function actually crosses, not just touches, the x-axis.

Arguments

fun is the function whose zero is to be computed. It accepts a vector x and returns a scalar f, the objective function evaluated at x. The function fun can be specified as a function handle.

  • x = fzero(@myfun,x0)

where myfun is a MATLAB function such as

  • function f = myfun(x)
    f = ... % Compute function value at x

fun can also be an inline object.

  • x = fzero(inline('sin(x*x)'),x0);

Other arguments are described in the syntax descriptions above.

Examples

Example 1. Calculate by finding the zero of the sine function near 3.

  • x = fzero(@sin,3)
    x =
    3.1416

Example 2. To find the zero of cosine between 1 and 2

  • x = fzero(@cos,[1 2])
    x =

1.5708

Note that cos(1) and cos(2) differ in sign.

Example 3. To find a zero of the function

write an M-file called f.m.

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

To find the zero near 2

  • z = fzero(@f,2)
    z =
    2.0946

Because this function is a polynomial, the statement roots([1 0 -2 -5]) finds the same real zero, and a complex conjugate pair of zeros.

  •     2.0946
    -1.0473 + 1.1359i
    -1.0473 - 1.1359i

Algorithm

The fzero command is an M-file. The algorithm, which was originated by T. Dekker, uses a combination of bisection, secant, and inverse quadratic interpolation methods. An Algol 60 version, with some improvements.

Limitations

The fzero command finds a point where the function changes sign. If the function is continuous, this is also a point where the function has a value near zero. If the function is not continuous, fzero may return values that are discontinuous points instead of zeros. For example, fzero(@tan,1) returns 1.5708, a discontinuous point in tan.

Furthermore, the fzero command defines a zero as a point where the function crosses the x-axis. Points where the function touches, but does not cross, the x-axis are not valid zeros. For example, y = x.^2 is a parabola that touches the x-axis at 0. Because the function never crosses the x-axis, however, no zero is found. For functions with no valid zeros, fzero executes until Inf, NaN, or a complex value is detected.

No comments:

Post a Comment