fzero - Root of nonlinear function - MATLAB (original) (raw)

Root of nonlinear function

Syntax

Description

[x](#btoc6lj-1-x) = fzero([fun](#btoc6lj-1-fun),[x0](#btoc6lj-1-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](#btoc6lj-1-x) = fzero([fun](#btoc6lj-1-fun),[x0](#btoc6lj-1-x0),[options](#btoc6lj-1-options)) uses options to modify the solution process.

example

[x](#btoc6lj-1-x) = fzero([problem](#btoc6lj-1-problem)) solves a root-finding problem specified by problem.

example

[[x](#btoc6lj-1-x),[fval](#btoc6lj-1-fval),[exitflag](#btoc6lj-1-exitflag),[output](#btoc6lj-1-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.

example

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)

Find the zero of cosine between 1 and 2.

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

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

Find a zero of the function f(x) = x_3 – 2_x – 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)

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

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)

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)

Figure Optimization Plot Function contains 2 axes objects. Axes object 1 with title Current Point, xlabel Variable number, ylabel Current point contains an object of type bar. Axes object 2 with title Current Function Value: -3.21625e-16, xlabel Iteration, ylabel Function value contains an object of type scatter.

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.

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]

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 scalarx and returns a scalarfun(x).

fzero solves fun(x) = 0. To solve an equation fun(x) = c(x), instead solvefun2(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.

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, orNaN.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 Optimization Solver Output Functions.
PlotFcns Plots various measures of progress while the algorithm executes. Select from predefined plots or write your own. Pass a function name, function handle, or a cell array of function names or handles. The default is none ([]): @optimplotx plots the current point.@optimplotfval plots the function value.For information on writing a custom plot function, see Optimization Solver Plot Functions.
TolX Termination tolerance onx, 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].

Alternative Functionality

App

The Optimize Live Editor task provides a visual interface forfzero.

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.

Extended Capabilities

expand all

For C/C++ code generation:

Version History

Introduced before R2006a