fzero
Raíz de una función no lineal
Sintaxis
Descripción
Ejemplos
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 y tienen un signo diferente.
Cree una función y un punto de inicio escalar de precisión simple x0. Encuentre la raíz de la función usando fzero empezando por x0.
f = @(x)cosh(x)-2*sinh(x); x0 = single(1); [x,fval,exitflag,output] = fzero(f,x0)
x = single
0.5493
fval = single
1.1921e-07
exitflag = single
1
output = struct with fields:
intervaliterations: 9
iterations: 3
funcCount: 21
algorithm: 'bisection, interpolation'
message: 'Zero found in the interval [0.547452, 1.32]'
Cree un vector de precisión simple de dos elementos como un punto de inicio que acota la raíz y compare la solución y el proceso de solución.
x0 = single([-1,1]); [x2,fval2,exitflag2,output2] = fzero(f,x0)
x2 = single
0.5493
fval2 = single
1.1921e-07
exitflag2 = single
1
output2 = struct with fields:
intervaliterations: 0
iterations: 5
funcCount: 7
algorithm: 'bisection, interpolation'
message: 'Zero found in the interval [-1, 1]'
El resultado es el mismo. Esta vez, fzero utiliza muchas menos evaluaciones de función.
Compare el resultado de precisión simple con el mismo cálculo usando datos de doble precisión estándar.
x0 = [-1,1]; [x3,fval3,exitflag3,output3] = fzero(f,x0)
x3 = 0.5493
fval3 = -2.2204e-16
exitflag3 = 1
output3 = struct with fields:
intervaliterations: 0
iterations: 7
funcCount: 9
algorithm: 'bisection, interpolation'
message: 'Zero found in the interval [-1, 1]'
Usar datos de doble precisión provoca que fzero requiera algunas evaluaciones de función más. La precisión del resultado es mucho más elevada, con un valor de función en el orden de 2e–16 en comparación con el valor de precisión simple en el orden de 1e–7.
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.0946Como 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)

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
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:
fzerocomienza enx0e intenta localizar un puntox1dondefun(x1)tiene el signo opuesto afun(x0). Entoncesfzeroreduce el intervalo de forma iterativa dondefuncambia el signo para llegar a una solución.Vector de 2 elementos:
fzerocomprueba quefun(x0(1))yfun(x0(2))tienen signos opuestos y si no es así, devuelve un error. Entonces reduce el intervalo de forma iterativa dondefuncambia el signo para llegar a una solución. Un intervalox0debe 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.
Sugerencia
Si fzero no encuentra un cambio de signo cuando x0 es un escalar y usted puede ubicar un punto x1 donde fun(x1) tiene el signo opuesto de fun(x0), pase el vector [x0,x1] como el valor inicial.
Ejemplo: 3
Ejemplo: [2,17]
Tipos de datos: single | 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.
| Nivel de visualización:
|
| Comprobar si los valores de la función objetivo son válidos.
|
| 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 |
| 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 (
Para obtener más información sobre cómo escribir una función de representación gráfica personalizada, consulte Optimization Solver Plot Functions. |
| Tolerancia de terminación en |
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.
| Función objetivo |
| Punto inicial para x, escalar real o vector de 2 elementos. |
| 'fzero' |
| Estructura de opciones, normalmente creada utilizando optimset |
Para ver un ejemplo, consulte Solucionar una estructura de problema.
Tipos de datos: struct
Argumentos de salida
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.
| La función no convergió en una solución |
| El algoritmo fue terminado por la función de salida o la función de representación. |
| Se encontró un valor de función |
-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 |
|
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 |
|
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
Para generación de código C/C++:
El argumento de entrada
fundebe ser un identificador de función y no una estructura o un vector de caracteres.fzeroignora todas las opciones exceptoTolXyFunValCheck.fzerono es compatible con el cuarto argumento de salida, la estructura de salida.Todos los datos deben ser de doble precisión.
Consulte las notas y limitaciones de uso en la sección de generación de código C/C++. Las mismas notas y limitaciones de uso son aplicables a la generación de código GPU.
La función fzero es totalmente compatible con entornos basados en subprocesos. Para obtener más información, consulte Ejecutar funciones de MATLAB en entornos basados en subprocesos.
Historial de versiones
Introducido antes de R2006afzero ahora acepta un argumento de precisión simple x0 y valores de función de precisión simple fun(x). La tolerancia de finalización predeterminada TolX se ajusta automáticamente para datos de tipo single.
La tarea Optimize de Live Editor no admite datos de precisión simple. La generación de código no es compatible con datos de precisión simple en fzero.
Consulte también
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Seleccione un país/idioma
Seleccione un país/idioma para obtener contenido traducido, si está disponible, y ver eventos y ofertas de productos y servicios locales. Según su ubicación geográfica, recomendamos que seleccione: .
También puede seleccionar uno de estos países/idiomas:
Cómo obtener el mejor rendimiento
Seleccione China (en idioma chino o inglés) para obtener el mejor rendimiento. Los sitios web de otros países no están optimizados para ser accedidos desde su ubicación geográfica.
América
- América Latina (Español)
- Canada (English)
- United States (English)
Europa
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)