# Documentation

### This is machine translation

Translated by
Mouseover text to see original. Click the button below to return to the English verison of the page.

To view all translated materals including this page, select Japan from the country navigator on the bottom of this page.

# fzero

Root of nonlinear function

## Syntax

``x = fzero(fun,x0)``
``x = fzero(fun,x0,options)``
``x = fzero(problem)``
``````[x,fval,exitflag,output] = fzero(___)``````

## Description

example

````x = fzero(fun,x0)` tries to find a point `x` where `fun(x) = 0`. This solution is where `fun(x)` changes sign—`fzero` cannot find a root of a function such as `x^2`.```

example

````x = fzero(fun,x0,options)` uses `options` to modify the solution process.```

example

````x = fzero(problem)` solves a root-finding problem specified by `problem`.```

example

``````[x,fval,exitflag,output] = fzero(___)``` returns `fun(x)` in the `fval` output, `exitflag` encoding the reason `fzero` stopped, and an output structure containing information on the solution process.```

## Examples

collapse all

Calculate by finding the zero of the sine function near `3`.

```fun = @sin; % function x0 = 3; % initial point x = fzero(fun,x0)```
```x = 3.1416 ```

Find the zero of cosine between `1` and `2`.

```fun = @cos; % function x0 = [1 2]; % initial interval x = fzero(fun,x0)```
```x = 1.5708 ```

Note that and differ in sign.

Find a zero of the function f(x) = x3 – 2x – 5.

First, write a file called `f.m`.

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

Save `f.m` on your MATLAB® path.

Find the zero of f(x) near `2`.

```fun = @f; % function x0 = 2; % initial point z = fzero(fun,x0)```
```z = 2.0946```

Since `f(x)` is a polynomial, you can find the same real zero, and a complex conjugate pair of zeros, using the `roots` command.

`roots([1 0 -2 -5])`
``` ans = 2.0946 -1.0473 + 1.1359i -1.0473 - 1.1359i```

Find the root of a function that has an extra parameter.

```myfun = @(x,c) cos(c*x); % parameterized function c = 2; % parameter fun = @(x) myfun(x,c); % function of x alone x = fzero(fun,0.1)```
```x = 0.7854 ```

Plot the solution process by setting some plot functions.

Define the function and initial point.

```fun = @(x)sin(cosh(x)); x0 = 1;```

Examine the solution process by setting options that include plot functions.

`options = optimset('PlotFcns',{@optimplotx,@optimplotfval});`

Run `fzero` including `options`.

`x = fzero(fun,x0,options)`
```x = 1.8115 ```

Solve a problem that is defined by a problem structure.

Define a structure that encodes a root-finding problem.

```problem.objective = @(x)sin(cosh(x)); problem.x0 = 1; problem.solver = 'fzero'; % a required part of the structure problem.options = optimset(@fzero); % default options```

Solve the problem.

`x = fzero(problem)`
```x = 1.8115 ```

Find the point where `exp(-exp(-x)) = x`, and display information about the solution process.

```fun = @(x) exp(-exp(-x)) - x; % function x0 = [0 1]; % initial interval options = optimset('Display','iter'); % show iterations [x fval exitflag output] = fzero(fun,x0,options)```
``` Func-count x f(x) Procedure 2 1 -0.307799 initial 3 0.544459 0.0153522 interpolation 4 0.566101 0.00070708 interpolation 5 0.567143 -1.40255e-08 interpolation 6 0.567143 1.50013e-12 interpolation 7 0.567143 0 interpolation Zero found in the interval [0, 1] ```
```x = 0.5671 ```
```fval = 0 ```
```exitflag = 1 ```
```output = struct with fields: intervaliterations: 0 iterations: 5 funcCount: 7 algorithm: 'bisection, interpolation' message: 'Zero found in the interval [0, 1]' ```

`fval` = 0 means `fun(x) = 0`, as desired.

## Input Arguments

collapse all

Function to solve, specified as a handle to a scalar-valued function or the name of such a function. `fun` accepts a scalar `x` and returns a scalar `fun(x)`.

`fzero` solves `fun(x) = 0`. To solve an equation `fun(x) = c(x)`, instead solve `fun2(x) = fun(x) - c(x) = 0`.

To include extra parameters in your function, see the example Root of Function with Extra Parameter and the section Parameterizing Functions.

Example: `'sin'`

Example: `@myFunction`

Example: `@(x)(x-a)^5 - 3*x + a - 1`

Data Types: `char` | `function_handle` | `string`

Initial value, specified as a real scalar or a 2-element real vector.

• Scalar — `fzero` begins at `x0` and tries to locate a point `x1` where `fun(x1)` has the opposite sign of `fun(x0)`. Then `fzero` iteratively shrinks the interval where `fun` changes sign to reach a solution.

• 2-element vector — `fzero` checks that `fun(x0(1))` and `fun(x0(2))` have opposite signs, and errors if they do not. It then iteratively shrinks the interval where `fun` changes sign to reach a solution. An interval `x0` must be finite; it cannot contain ±`Inf`.

### Tip

Calling `fzero` with an interval (`x0` with two elements) is often faster than calling it with a scalar `x0`.

Example: 3

Example: [2,17]

Data Types: `double`

Options for solution process, specified as a structure. Create or modify the `options` structure using `optimset`. `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) displays output only if the function does not converge. `FunValCheck` Check whether objective function values are valid.`'on'` displays an error when the objective function returns a value that is `complex`, `Inf`, or `NaN`.The default, `'off'`, displays no error. `OutputFcn` Specify one or more user-defined functions that an optimization function calls at each iteration, either as a function handle or as a cell array of function handles. The default is none (`[]`). See Output Functions. `PlotFcns` Plot various measures of progress while the algorithm executes. Select from predefined plots or write your own. Pass a function handle or a cell array of function handles. The default is none (`[]`). `@optimplotx` plots the current point.`@optimplotfval` plots the function value. For information on writing a custom plot function, see Plot Functions. `TolX` Termination tolerance on `x`, a positive scalar. The default is `eps`, 2.2204e–16.

Example: `options = optimset('FunValCheck','on')`

Data Types: `struct`

Root-finding problem, specified as a structure with all of the following fields.

 `objective` Objective function `x0` Initial point for `x`, real scalar or 2-element vector `solver` `'fzero'` `options` Options structure, typically created using `optimset`

For an example, see Solve Problem Structure.

Data Types: `struct`

## Output Arguments

collapse all

Location of root or sign change, returned as a scalar.

Function value at `x`, returned as a scalar.

Integer encoding the exit condition, meaning the reason `fzero` stopped its iterations.

 `1` Function converged to a solution `x`. `-1` Algorithm was terminated by the output function or plot function. `-3` `NaN` or `Inf` function value was encountered while searching for an interval containing a sign change. `-4` Complex function value was encountered while searching for an interval containing a sign change. `-5` Algorithm might have converged to a singular point. `-6` `fzero` did not detect a sign change.

Information about root-finding process, returned as a structure. The fields of the structure are:

 `intervaliterations` Number of iterations taken to find an interval containing a root `iterations` Number of zero-finding iterations `funcCount` Number of function evaluations `algorithm` `'bisection, interpolation'` `message` Exit message

## Algorithms

The `fzero` command is a function file. The algorithm, created by T. Dekker, uses a combination of bisection, secant, and inverse quadratic interpolation methods. An Algol 60 version, with some improvements, is given in [1]. A Fortran version, upon which `fzero` is based, is in [2].

## References

[1] Brent, R., Algorithms for Minimization Without Derivatives, Prentice-Hall, 1973.

[2] Forsythe, G. E., M. A. Malcolm, and C. B. Moler, Computer Methods for Mathematical Computations, Prentice-Hall, 1976.