Main Content

Esta página aún no se ha traducido para esta versión. Puede ver la versión más reciente de esta página en inglés.

fzero

Raíz de la función no lineal

Descripción

ejemplo

x = fzero(fun,x0) intenta encontrar un punto x donde fun(x) = 0. Esta solución es donde fun(x) cambia el signo:fzero no puede encontrar una raíz de una función como x^2.

ejemplo

x = fzero(fun,x0,options) utiliza options para modificar el proceso de la solución.

ejemplo

x = fzero(problem) resuelve un problema de búsqueda de raíz especificado por problem.

ejemplo

[x,fval,exitflag,output] = fzero(___) devuelve fun(x) en la salida fval , exitflag que codifica la razón fzero detenido, y una estructura de salida que contiene información en el proceso de solución.

Ejemplos

contraer todo

Calcule encontrando el cero de la función sine cerca de 3.

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

Encuentre el cero del coseno entre 1 y 2.

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

Tenga en cuenta que y difieren en signo.

Encontrar un cero de la función f(x) = x3 – 2x – 5.

En primer lugar, escriba un archivo denominado f.m.

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

Guarde f.m en la ruta de acceso MATLAB® .

Encuentre el cero de f(x) cerca de 2.

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

Dado que f(x) es un polinomio, se puede encontrar el mismo cero real y un par de ceros conjugado complejo, utilizando el comando roots .

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

Busque la raíz de una función que tenga un parámetro extra.

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

Trace el proceso de solución estableciendo algunas funciones de trazado.

Defina la función y el punto inicial.

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

Examine el proceso de solución estableciendo opciones que incluyan funciones de trazado.

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

Ejecute fzero incluyendo options.

x = fzero(fun,x0,options)

x = 1.8115

Resuelve un problema definido por una estructura de problemas.

Defina una estructura que Codifique un problema de búsqueda de raíz.

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

Resolver el problema.

x = fzero(problem)
x = 1.8115

Busque el punto donde exp(-exp(-x)) = xy muestre información sobre el proceso de la solución.

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 significa fun(x) = 0, según se desee.

Argumentos de entrada

contraer todo

Función que se debe resolver, especificada como identificador de una función de valor escalar o el nombre de dicha función. fun acepta un escalarx y devuelve un escalarfun(x).

fzero resuelve fun(x) = 0. Para resolver una ecuación fun(x) = c(x), en su lugar, solucione fun2(x) = fun(x) - c(x) = 0.

Para incluir parámetros adicionales en la función, vea el ejemplo Raíz de la función con el parámetro adicional y la sección Parameterizing Functions.

Ejemplo: 'sin'

Ejemplo: @myFunction

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

Tipos de datos: char | function_handle | string

Valor inicial, especificado como un real escalar o un vector real de 2 elementos.

  • Scalar: fzero comienza en x0 e intenta localizar un punto x1 donde fun(x1) tiene el signo opuesto de fun(x0). A continuación, fzero reduce iterativamente el intervalo donde fun cambia el signo para llegar a una solución.

  • Vector de 2 elementos: fzero comprueba que fun(x0(1)) y fun(x0(2)) tienen signos opuestos y errores si no lo hacen. A continuación, se reduce iterativamente el intervalo donde fun cambia el signo para llegar a una solución. Un intervalo x0 debe ser finito; no puede contener ±Inf.

Sugerencia

Llamar a fzero con un intervalo (x0 con dos elementos) suele ser más rápido que llamarlo con un escalarx0.

Ejemplo: 3

Ejemplo: 2.17

Tipos de datos: double

Opciones para el proceso de solución, especificada como una estructura. Cree o modifique la estructura options mediante optimset. fzero utiliza estos campos de estructura options .

Display

Nivel de visualización:

  • 'off' no muestra ningún resultado.

  • 'iter' muestra el resultado en cada iteración.

  • 'final' muestra sólo la salida final.

  • 'notify' (predeterminado) muestra sólo el resultado si la función no converge.

FunValCheck

Compruebe si los valores de la función objetiva son válidos.

  • 'on' muestra un error cuando la función objetiva devuelve un valor que es complex, Info NaN.

  • El valor predeterminado, 'off', no muestra ningún error.

OutputFcn

Especifique una o varias funciones definidas por el usuario que una función de optimización llama en cada iteración, ya sea como un identificador de función o como una matriz de celdas de los identificadores de función. El valor predeterminado es None ([]). (Consulte Funciones de salida del solver de optimización).

PlotFcns

Trazar varias medidas de progreso mientras se ejecuta el algoritmo. Seleccione una de las gráficas predefinidas o escriba la suya. Pase un identificador de función o una matriz de celdas de los controles de función. El valor predeterminado es None ([]).

  • @optimplotx traza el punto actual.

  • @optimplotfval traza el valor de la función.

Para obtener información sobre cómo escribir una función de trazado personalizada, vea Funciones de representación del solver de optimización.

TolX

Tolerancia de la terminación en x, un escalar positivo. El valor predeterminado es eps, 2.2204 e – 16.

Ejemplo: options = optimset('FunValCheck','on')

Tipos de datos: struct

Problema de búsqueda de root, especificado como una estructura con todos los campos siguientes.

objective

Función objetivo

x0

Punto inicial para x, escalar real o vector de 2 elementos

solver

'fzero'

options

Estructura de opciones, creada normalmente mediante optimset

Para obtener un ejemplo, vea Resolver la estructura del problema.

Tipos de datos: struct

Argumentos de salida

contraer todo

Ubicación de la raíz o cambio de signo, devuelto como escalar.

Valor de función en x, devuelto como escalar.

Entero que codifica la condición de salida, es decir, la razón por la que fzero detuvo sus iteraciones.

1

La función convergió en una solución x.

-1

El algoritmo fue terminado por la función de salida o el diagrama.

-3

NaN se encontró el valor de la función o Inf mientras se buscaba un intervalo que contuviera un cambio de signo.

-4

Se encontró un valor de función complejo mientras se buscaba un intervalo que contuviera un cambio de signo.

-5

Algoritmo podría haber convergido a un punto singular.

-6

fzero no detectó un cambio de signo.

Información sobre el proceso de búsqueda de raíces, devuelto como una estructura. Los campos de la estructura son:

intervaliterations

Número de iteraciones tomadas para encontrar un intervalo que contenga una raíz

iterations

Número de iteraciones de búsqueda cero

funcCount

Número de evaluaciones de funciones

algorithm

'bisection, interpolation'

message

Mensaje de salida

Algoritmos

El comando fzero es un archivo de función. El algoritmo, creado por T. Dekker, utiliza una combinación de bisección, secante, y métodos de interpolación cuadrática inversa. Una versión de Algol 60, con algunas mejoras, se da en [1]. Una versión Fortran, en la que se basa fzero , se encuentra en [2].

Referencias

[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.

Capacidades ampliadas

Introducido antes de R2006a