fzero
Raíz de una función no lineal
Sintaxis
Descripción
Ejemplos
Raíz empezando por un punto
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
Raíz empezando por un intervalo
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.
Raíz de una función definida por un archivo
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
Raíz de una función con un parámetro extra
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
Opciones no predeterminadas
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
Solucionar una estructura de problema
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
Más información de la solución
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
fun
— Función que se desea resolver
identificador de función | nombre de función
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
x0
— Valor inicial
escalar | vector de 2 elementos
Valor inicial, especificado como un escalar real o un vector real de 2 elementos.
Escalar:
fzero
comienza enx0
e intenta localizar un puntox1
dondefun(x1)
tiene el signo opuesto afun(x0)
. Entoncesfzero
reduce el intervalo de forma iterativa dondefun
cambia el signo para llegar a una solución.Vector de 2 elementos:
fzero
comprueba quefun(x0(1))
yfun(x0(2))
tienen signos opuestos y si no es así, devuelve un error. Entonces reduce el intervalo de forma iterativa dondefun
cambia el signo para llegar a una solución. Un intervalox0
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
options
— Opciones para el proceso de solución
estructura, normalmente creada utilizando optimset
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
problem
— Problema de búsqueda de raíces
estructura
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
x
— Ubicación de raíz o cambio de signo
escalar real
Ubicación de raíz o cambio de signo, devuelta como un escalar.
fval
— Valor de función en x
escalar real
Valor de función en x
, devuelto como escalar.
exitflag
— Valor entero codificando la condición de salida
valor entero
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 |
|
output
— Información sobre el proceso de búsqueda de raíz
estructura
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
Generación de código C/C++
Genere código C y C++ mediante MATLAB® Coder™.
Para generación de código C/C++:
El argumento de entrada
fun
debe ser un identificador de función y no una estructura o un vector de caracteres.fzero
ignora todas las opciones exceptoTolX
yFunValCheck
.fzero
no es compatible con el cuarto argumento de salida, la estructura de salida.
Entorno basado en subprocesos
Ejecute código en segundo plano con MATLAB® backgroundPool
o acelere código con Parallel Computing Toolbox™ ThreadPool
.
Esta función es totalmente compatible con entornos basados en subprocesos. Para obtener más información, consulte Ejecutar funciones de MATLAB en un entorno basado en subprocesos.
Historial de versiones
Introducido antes de R2006a
Consulte también
Comando de MATLAB
Ha hecho clic en un enlace que corresponde a este comando de MATLAB:
Ejecute el comando introduciéndolo en la ventana de comandos de MATLAB. Los navegadores web no admiten comandos de MATLAB.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- 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)