Contenuto principale

fzero

Radice di una funzione non lineare

Descrizione

x = fzero(fun,x0) cerca di trovare un punto x dove fun(x) = 0. Questa soluzione è dove fun(x) cambia segno: fzero non può trovare una radice di una funzione come x^2.

esempio

x = fzero(fun,x0,options) utilizza options per modificare il processo di soluzione.

esempio

x = fzero(problem) risolve un problema di ricerca della radice specificato da problem.

esempio

[x,fval,exitflag,output] = fzero(___) restituisce fun(x) nell'output fval, exitflag che codifica il motivo per cui fzero si è arrestato e una struttura di output contenente informazioni sul processo di soluzione.

esempio

Esempi

comprimi tutto

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 cos(1) e cos(2) hanno segno diverso.

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.0946

Poiché 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)

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

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

comprimi tutto

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: fzero inizia a x0 e cerca di individuare un punto x1 in cui fun(x1) abbia il segno opposto rispetto a fun(x0). Quindi fzero riduce iterativamente l'intervallo in cui fun cambia segno per raggiungere una soluzione.

  • Vettore a 2 elementi: fzero verifica che fun(x0(1)) e fun(x0(2)) abbiano segni opposti e segnala un errore in caso contrario. Quindi riduce iterativamente l'intervallo in cui fun cambia segno per raggiungere una soluzione. Un intervallo x0 deve 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.

Esempio 3

Esempio [2,17]

Tipi di dati: 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.

Display

Livello di visualizzazione:

  • 'off' non visualizza alcun output.

  • 'iter' visualizza l'output ad ogni iterazione.

  • 'final' visualizza solo l'output finale.

  • 'notify' (predefinito) visualizza l'output solo se la funzione non converge.

FunValCheck

Verifica che i valori della funzione obiettivo siano validi.

  • 'on' visualizza un errore quando la funzione obiettivo restituisce un valore pari a complex, Inf o NaN.

  • L'impostazione predefinita 'off' non visualizza alcun errore.

OutputFcn

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 []. Vedere Optimization Solver Output Functions.

PlotFcns

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 ([]):

  • @optimplotx traccia il punto attuale.

  • @optimplotfval traccia il valore della funzione.

Per informazioni sulla scrittura di una funzione personalizzata per la creazione del grafico, vedere Optimization Solver Plot Functions.

TolX

Tolleranza di termine su x, uno scalare positivo. L'impostazione predefinita è eps, 2.2204e–16.

Esempio options = optimset('FunValCheck','on')

Tipi di dati: struct

Problema di risoluzione dell’equazione, specificato come struttura contenente tutti i seguenti campi.

objective

Funzione obiettivo

x0

Punto iniziale per x, scalare reale o vettore a 2 elementi

solver

'fzero'

options

Struttura delle opzioni, solitamente creata utilizzando optimset

Per un esempio, vedere Risoluzione della struttura del problema.

Tipi di dati: struct

Argomenti di output

comprimi tutto

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.

1

La funzione ha raggiunto una soluzione x.

-1

L'algoritmo è stato terminato dalla funzione di output o dalla funzione di creazione del grafico.

-3

Durante la ricerca di un intervallo contenente un cambio di segno è stato rilevato un valore della funzione NaN o Inf.

-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

fzero non ha rilevato alcun cambio di segno.

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

'bisection, interpolation'

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

espandi tutto

Cronologia versioni

Introduzione prima di R2006a