fzero
Radice di una funzione non lineare
Sintassi
Descrizione
Esempi
Calcolare trovando lo zero della funzione seno vicino a 3.
fun = @sin; % function x0 = 3; % initial point x = fzero(fun,x0)
x = 3.1416
Trovare lo zero del coseno tra 1 e 2.
fun = @cos; % function x0 = [1 2]; % initial interval x = fzero(fun,x0)
x = 1.5708
Si noti che e hanno segno diverso.
Creare una funzione e un punto di partenza scalare a singola precisione x0. Trovare la radice della funzione utilizzando fzero partendo da 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]'
Creare un vettore a due elementi a singola precisione come punto di partenza che racchiuda la radice e confrontare la soluzione e il processo di soluzione.
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]'
Il risultato è identico. Questa volta, fzero utilizzare molte meno valutazioni della funzione.
Confrontare il risultato a singola precisione con lo stesso calcolo eseguito utilizzando dati standard a doppia precisione.
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]'
L'utilizzo di dati a doppia precisione comporta che fzero richieda qualche valutazione della funzione in più. La precisione del risultato è molto più elevata, con un valore della funzione dell'ordine di 2e–16 rispetto al valore a singola precisione dell'ordine di 1e–7.
Trovare uno zero della funzione f(x) = x3 – 2x – 5.
Per prima cosa, scrivere un file chiamato f.m.
function y = f(x)
y = x.^3 - 2*x - 5;Salvare f.m nel percorso di MATLAB®.
Trovare lo zero di f(x) vicino a 2.
fun = @f; % function x0 = 2; % initial point z = fzero(fun,x0)
z =
2.0946Poiché f(x) è un polinomio, è possibile trovare lo stesso zero reale e una coppia di zeri complessi coniugati utilizzando il comando roots.
roots([1 0 -2 -5])
ans = 2.0946 -1.0473 + 1.1359i -1.0473 - 1.1359i
Trovare la radice di una funzione che ha un parametro supplementare.
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
Tracciare il processo di soluzione impostando alcune funzioni di creazione del grafico.
Definire la funzione e il punto iniziale.
fun = @(x)sin(cosh(x)); x0 = 1;
Esaminare il processo di soluzione impostando le opzioni che includono le funzioni di creazione del grafico.
options = optimset(PlotFcns={@optimplotx,@optimplotfval});Eseguire fzero incluso options.
x = fzero(fun,x0,options)

x = 1.8115
Risolvere un problema definito da una struttura di problema.
Definire una struttura che codifica un problema di ricerca della radice.
problem.objective = @(x)sin(cosh(x)); problem.x0 = 1; problem.solver = 'fzero'; % a required part of the structure problem.options = optimset(@fzero); % default options
Risolvere il problema.
x = fzero(problem)
x = 1.8115
Trovare il punto in cui exp(-exp(-x)) = x e visualizzare le informazioni relative al processo di soluzione.
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 che fun(x) = 0, come desiderato.
Argomenti di input
Funzione da risolvere, specificata come handle della funzione a valore scalare o come nome di tale funzione. fun accetta uno scalare x e restituisce uno scalare fun(x).
fzero risolve fun(x) = 0. Anziché risolvere un'equazione fun(x) = c(x), risolvere fun2(x) = fun(x) - c(x) = 0.
Per includere parametri supplementari nella funzione, vedere l'esempio Radice della funzione con parametro supplementare e la sezione Parameterizing Functions.
Esempio "sin"
Esempio @myFunction
Esempio @(x)(x-a)^5 - 3*x + a - 1
Tipi di dati: char | function_handle | string
Valore iniziale, specificato come scalare reale o vettore reale a 2 elementi.
Scalare:
fzeroinizia ax0e cerca di individuare un puntox1in cuifun(x1)abbia il segno opposto rispetto afun(x0). Quindifzeroriduce iterativamente l'intervallo in cuifuncambia segno per raggiungere una soluzione.Vettore a 2 elementi:
fzeroverifica chefun(x0(1))efun(x0(2))abbiano segni opposti e segnala un errore in caso contrario. Quindi riduce iterativamente l'intervallo in cuifuncambia segno per raggiungere una soluzione. Un intervallox0deve essere di tipo finito; non può contenere ±Inf.
Suggerimento
Chiamare fzero con un intervallo (x0 con due elementi) è spesso più rapido che chiamarlo con uno scalare x0.
Suggerimento
Se fzero non riesce a trovare un cambiamento di segno quando x0 è uno scalare ed è possibile individuare un punto x1 dove fun(x1) presenta il segno opposto di fun(x0), passare il vettore [x0,x1] come valore iniziale.
Esempio 3
Esempio [2,17]
Tipi di dati: single | double
Opzioni per il processo di soluzione, specificate come struttura. Creare o modificare la struttura options utilizzando optimset. fzero utilizza questi campi della struttura options.
| Livello di visualizzazione:
|
| Verifica che i valori della funzione obiettivo siano validi.
|
| Specifica una o più funzioni definite dall'utente che una funzione di ottimizzazione chiama ad ogni iterazione, come handle della funzione o array di celle dell'handle della funzione. L'impostazione predefinita è none |
| Traccia varie misure di avanzamento durante l'esecuzione dell'algoritmo. Scegliere tra i grafici predefiniti o crearne uno personalizzato. Passare un nome della funzione, un handle della funzione o un array di celle di nomi delle funzioni o di handle delle funzioni. L'impostazione predefinita è none (
Per informazioni sulla scrittura di una funzione personalizzata per la creazione del grafico, vedere Optimization Solver Plot Functions. |
| Tolleranza di termine su |
Esempio options = optimset("FunValCheck","on")
Tipi di dati: struct
Problema di risoluzione dell’equazione, specificato come struttura contenente tutti i seguenti campi.
| Funzione obiettivo |
| Punto iniziale per x, scalare reale o vettore a 2 elementi |
| 'fzero' |
| Struttura delle opzioni, solitamente creata utilizzando optimset |
Per un esempio, vedere Risoluzione della struttura del problema.
Tipi di dati: struct
Argomenti di output
Posizione della radice o del cambio di segno, restituita come scalare.
Valore della funzione in x, restituito come scalare.
Codifica dell'intero della condizione di uscita, ossia il motivo per cui fzero ha interrotto le iterazioni.
| La funzione ha raggiunto una soluzione |
| L'algoritmo è stato terminato dalla funzione di output o dalla funzione di creazione del grafico. |
| Durante la ricerca di un intervallo contenente un cambio di segno è stato rilevato un valore della funzione |
-4 | Durante la ricerca di un intervallo contenente un cambio di segno è stato rilevato un valore complesso della funzione. |
-5 | L'algoritmo potrebbe aver raggiunto un punto singolare. |
-6 |
|
Informazioni sul processo di ricerca della radice, restituite come struttura. I campi della struttura sono i seguenti:
intervaliterations | Numero di iterazioni impiegate per trovare un intervallo contenente una radice |
iterations | Numero di iterazioni di ricerca dello zero |
funcCount | Numero di valutazioni della funzione |
algorithm |
|
message | Messaggio di uscita |
Algoritmi
Il comando fzero è un file di funzione. L'algoritmo, creato da T. Dekker, utilizza una combinazione dei metodi di bisezione, secante e interpolazione quadratica inversa. Una versione in Algol 60, con alcuni miglioramenti, è riportata in [1]. Una versione Fortran, su cui si basa fzero, è disponibile in [2].
Funzionalità alternative
App
L'attività Optimize (Ottimizza) del Live Editor fornisce un'interfaccia visiva per fzero.
Riferimenti
[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.
Funzionalità estese
Per la generazione di codice C/C++:
L'argomento di input
fundeve essere un handle della funzione e non una struttura o un vettore di caratteri.fzeroignora tutte le opzioni tranneTolXeFunValCheck.fzeronon supporta il quarto argomento di output, la struttura di output.Tutti i dati devono essere a doppia precisione.
Consultare le note su utilizzo e limitazioni nella sezione Generazione di codice C/C++. Le stesse note su utilizzo e limitazioni si applicano alla generazione di codice GPU.
La funzione fzero supporta completamente gli ambienti basati su thread. Per maggiori informazioni, vedere Run MATLAB Functions in Thread-Based Environment.
Cronologia versioni
Introduzione prima di R2006afzero ora accetta un argomento a singola precisione x0 e valori di funzione a singola precisione fun(x). La tolleranza di termine predefinita TolX si regola automaticamente per i dati di tipo single.
L'attività Optimize (Ottimizza) in Live Editor non supporta i dati a singola precisione. La generazione di codice non supporta i dati a singola precisione in fzero.
Vedi anche
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.
Seleziona un sito web
Seleziona un sito web per visualizzare contenuto tradotto dove disponibile e vedere eventi e offerte locali. In base alla tua area geografica, ti consigliamo di selezionare: .
Puoi anche selezionare un sito web dal seguente elenco:
Come ottenere le migliori prestazioni del sito
Per ottenere le migliori prestazioni del sito, seleziona il sito cinese (in cinese o in inglese). I siti MathWorks per gli altri paesi non sono ottimizzati per essere visitati dalla tua area geografica.
Americhe
- 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)