Main Content

fzero

Raíz de una función no lineal

Descripción

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) usa options para modificar el proceso de solución.

ejemplo

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

ejemplo

[x,fval,exitflag,output] = fzero(___) devuelve fun(x) en la salida fval, exitflag codificando el motivo por el que fzero paró y una estructura de salida que contiene información sobre el proceso de solución.

ejemplo

Ejemplos

contraer todo

Calcule π buscando el cero de la función de seno cerca de 3.

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

Encuentre el cero de 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.

Primero, escriba un archivo con el nombre f.m.

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

Guarde f.m en su ruta de MATLAB®.

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

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

Como f(x) es un polinomio, puede encontrar el mismo cero real y un par conjugado complejo de ceros 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 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

Represente el proceso de solución configurando algunas funciones de representación gráfica.

Defina la función y el punto inicial.

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

Examine el proceso de solución configurando opciones que incluyan funciones de representación gráfica.

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

Ejecute fzero incluyendo 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

Solucione un problema que está definido por una estructura de problema.

Defina una estructura que codifica un problema de búsqueda de raíces.

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

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

Argumentos de entrada

contraer todo

Función que se desea resolver, especificada como un identificador para una función de valores escalares o el nombre de una función así. 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), en su lugar resuelva fun2(x) = fun(x) - c(x) = 0.

Para incluir parámetros extra en su función, consulte el ejemplo Raíz de una función con un parámetro extra y la sección Parametrizar funciones.

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 comienza en x0 e intenta localizar un punto x1 donde fun(x1) tiene el signo opuesto a fun(x0). Entonces fzero reduce el intervalo de forma iterativa 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 si no es así, devuelve un error. Entonces reduce el intervalo de forma iterativa 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 llamarla con un escalar x0.

Ejemplo: 3

Ejemplo: [2,17]

Tipos de datos: double

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

Display

Nivel de visualización:

  • 'off' no muestra la salida.

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

  • 'final' muestra solo la salida final.

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

FunValCheck

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

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

  • El valor predeterminado, 'off', no muestra error.

OutputFcn

Especificar una o más funciones definidas por el usuario a las que una función de optimización llama en cada iteración, ya sea como identificador de función o como arreglo de celdas de identificadores de función. El valor predeterminado es ninguno []. Consulte Optimization Solver Output Functions.

PlotFcns

Representar varias medidas de progreso mientras se ejecuta el algoritmo. Seleccione desde las gráficas predefinidas o cree la suya. Pase un nombre o identificador de función o un arreglo de celdas de nombres o identificadores de función. El valor predeterminado es ninguno ([]):

  • @optimplotx representa el punto actual.

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

Para obtener más información sobre cómo escribir una función de representación gráfica personalizada, consulte Optimization Solver Plot Functions.

TolX

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

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

Tipos de datos: struct

Problema de búsqueda de raíces, 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, normalmente creada utilizando optimset

Para ver un ejemplo, consulte Solucionar una estructura de problema.

Tipos de datos: struct

Argumentos de salida

contraer todo

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

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

Valor entero codificando la condición de salida, o sea, el motivo por el que fzero paró sus iteraciones.

1

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

-1

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

-3

Se encontró un valor de función NaN o Inf mientras se buscaba un intervalo que contenga un cambio de signo.

-4

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

-5

Es posible que el algoritmo haya convergido en un punto singular.

-6

fzero no ha detectado un cambio de signo.

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

intervaliterations

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

iterations

Número de iteraciones en las que se encuentran ceros

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 bisección, secante, y métodos inversos de interpolación cuadrática. Puede obtener una versión mejorada de Algol 60 en [1]. Puede encontrar 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