Main Content

Esta página es para la versión anterior. La página correspondiente en inglés ha sido eliminada en la versión actual.

fzero

Raíz de una función no lineal

Descripción

x = fzero(fun,x0) trata de encontrar un punto x donde fun(x) = 0. Esta solución es donde fun(x) cambia de 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 resolución.

ejemplo

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

ejemplo

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

ejemplo

Ejemplos

contraer todo

Calcule π encontrando el cero de la función sinusoidal 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 cos(1) y cos(2) tienen un signo diferente.

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

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

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

Guarde f.m en la ruta de MATLAB®.

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

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

Puesto que f(x) es un polinomio, puede encontrar el mismo cero real y un par de ceros complejos conjugados utilizando el comando roots.

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

Encuentre la raíz de una función que tiene un parámetro adicional.

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

Represente el proceso de resolución estableciendo algunas funciones de gráfica.

Defina la función y el punto inicial.

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

Examine el proceso de resolución estableciendo opciones que incluyen funciones de gráfica.

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

Ejecute fzero, incluido 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.

x = 1.8115

Resuelva un problema definido por una estructura de problema.

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

Resuelva el problema.

x = fzero(problem)
x = 1.8115

Encuentre un punto donde exp(-exp(-x)) = x y muestre información sobre el proceso de resolució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 desea.

Argumentos de entrada

contraer todo

Función que desea resolver, especificada como un identificador de una función con valor escalar o como el nombre de una función de ese tipo. fun acepta un escalar x y devuelve un escalar fun(x).

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

Para incluir parámetros adicionales en la función, consulte el ejemplo Raíz de una función con un parámetro adicional y la sección Pasar parámetros adicionales.

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 escalar real o un vector real de 2 elementos.

  • Escalar: fzero empieza en x0 y trata de localizar un punto x1 donde fun(x1) tiene el signo opuesto a fun(x0). Después, fzero disminuye de forma iterativa el intervalo donde fun cambia de signo para alcanzar una solución.

  • Vector de 2 elementos: fzero comprueba que fun(x0(1)) y fun(x0(2)) tienen signos opuestos y genera error si no los tienen. Después, disminuye de forma iterativa el intervalo donde fun cambia de signo para alcanzar 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 llamarla con un escalar x0.

Ejemplo: 3

Ejemplo: [2,17]

Tipos de datos: double

Opciones para el proceso de resolución, especificadas como una estructura. Cree o modifique la estructura options utilizando optimset. fzero utiliza estos campos de estructura de options.

Display

Nivel de visualización (consulte Visualización iterativa):

  • 'off' no muestra salida alguna.

  • 'iter' muestra la salida en cada iteración.

  • 'final' solo muestra la salida final.

  • 'notify' (predeterminado) solo muestra salidas si la función no converge.

FunValCheck

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

  • 'on' muestra un error cuando la función objetivo devuelve un valor complex, Inf o NaN.

  • La opción predeterminada, 'off', no muestra ningún error.

OutputFcn

Especifica una o varias funciones definidas por el usuario a las que una función de optimización llama en cada iteración, ya sea como un identificador de función o como un arreglo de celdas de identificadores de función. La opción predeterminada es ninguno ([]). Consulte Sintaxis de función de salida y función de gráfica.

PlotFcns

Representa varias medidas de progreso mientras el algoritmo se ejecuta. Seleccione una de las gráficas predefinidas o escriba la suya propia. Pase un nombre de función, un identificador de función o un arreglo de celdas de nombres o identificadores de función. La opción predeterminada es ninguno ([]):

  • @optimplotx representa el punto actual.

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

Las funciones de gráfica personalizadas utilizan la misma sintaxis que las funciones de salida. Consulte Funciones de salida para Optimization Toolbox y Sintaxis de función de salida y función de gráfica.

TolX

Tolerancia de terminación en x, un escalar positivo. El valor predeterminado es eps, 2.2204e–16. Consulte Tolerancias y criterios de detención.

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

Tipos de datos: struct

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

objective

Función objetivo

x0

Punto inicial para x, escalar o vector 2D

solver

'fzero'

options

Estructura de opciones, típicamente creada utilizando optimset

Tipos de datos: struct

Argumentos de salida

contraer todo

Ubicación de una raíz o cambio de signo, devuelta como un escalar.

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

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

1

La función ha convergido a una solución x.

-1

La función de salida o la función de gráfica han terminado el algoritmo.

-3

Se encontró un valor de función NaN o Inf al buscar un intervalo que contiene un cambio de signo.

-4

Se encontró un valor de función complejo al buscar un intervalo que contiene un cambio de signo.

-5

El algoritmo puede haber convergido en un punto singular.

-6

fzero no detectó un cambio de signo.

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

intervaliterations

Número de iteraciones realizadas para encontrar un intervalo que contiene una raíz

iterations

Número de iteraciones de búsqueda de cero

funcCount

Número de evaluaciones de función

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 métodos de bisección, secante e interpolación cuadrática inversa. Se proporciona una versión Angol 60, con algunas mejoras, en [1]. Hay una versión Fortran, en la que se basa fzero, en [2].

Funcionalidad alternativa

App

La tarea Optimize de Live Editor proporciona una interfaz visual para fzero.

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

Historial de versiones

Introducido antes de R2006a