Main Content

La traduzione di questa pagina non è aggiornata. Fai clic qui per vedere l'ultima versione in inglese.

integral

Integrazione numerica

Descrizione

esempio

q = integral(fun,xmin,xmax) integra numericamente la funzione fun da xmin a xmax, utilizzando la quadratura adattativa globale e le tolleranze di errore predefinite.

esempio

q = integral(fun,xmin,xmax,Name,Value) specifica ulteriori opzioni con uno o più argomenti della coppia Name,Value. Ad esempio, specificare 'WayPoints' seguito da un vettore di numeri reali o complessi per indicare punti specifici da utilizzare per l'integratore.

Esempi

comprimi tutto

Creare la funzione f(x)=e-x2(lnx)2.

fun = @(x) exp(-x.^2).*log(x).^2;

Valutare l’integrale da x=0 a x=Inf.

q = integral(fun,0,Inf)
q = 1.9475

Creare la funzione f(x)=1/(x3-2x-c) con un parametro c.

fun = @(x,c) 1./(x.^3-2*x-c);

Valutare l’integrale da x=0 a x=2 in corrispondenza di c=5.

q = integral(@(x) fun(x,5),0,2)
q = -0.4605

Vedere Parameterizing Functions, per maggiori informazioni su questa tecnica.

Creare la funzione f(x)=ln(x).

fun = @(x)log(x);

Valutare l’integrale da x=0 a x=1 con le tolleranze di errore predefinite.

format long
q1 = integral(fun,0,1)
q1 = 
  -1.000000010959678

Valutare nuovamente l'integrale, questa volta con una precisione di 12 posizioni decimali. Impostare RelTol su zero in modo che integral cerchi di soddisfare solo la tolleranza di errore assoluto.

q2 = integral(fun,0,1,'RelTol',0,'AbsTol',1e-12)
q2 = 
  -1.000000000000010

Creare la funzione f(z)=1/(2z-1).

fun = @(z) 1./(2*z-1);

Integrare nel piano complesso sul percorso triangolare da 0 a 1+1i a 1-1i a 0, specificando i waypoint.

q = integral(fun,0,0,'Waypoints',[1+1i,1-1i])
q = 0.0000 - 3.1416i

Creare la funzione con valore di vettore f(x)=[sinx,sin2x,sin3x,sin4x,sin5x] e integrare da x=0 a x=1. Specificare 'ArrayValued',true per valutare l’integrale di una funzione con valore di array o di vettore.

fun = @(x)sin((1:5)*x);
q = integral(fun,0,1,'ArrayValued',true)
q = 1×5

    0.4597    0.7081    0.6633    0.4134    0.1433

Creare la funzione f(x)=x5e-xsinx.

fun = @(x)x.^5.*exp(-x).*sin(x);

Valutare l’integrale da x=0 a x=Inf, regolando le tolleranze assolute e relative.

format long
q = integral(fun,0,Inf,'RelTol',1e-8,'AbsTol',1e-13)
q = 
 -14.999999999998360

Argomenti di input

comprimi tutto

Integranda, specificata come un handle della funzione che definisce la funzione da integrare da xmin a xmax.

Per i problemi a valore scalare, la funzione y = fun(x) deve accettare un argomento vettoriale x e restituire un risultato vettoriale y. Di solito, questo significa che fun deve utilizzare gli operatori dell’array anziché quelli della matrice. Ad esempio, utilizzare .* (times) piuttosto che * (mtimes). Se l’opzione 'ArrayValued' è impostata su true, fun deve accettare uno scalare e restituire un array di dimensioni fisse.

Limite inferiore di x, specificato come valore scalare reale (finito o infinito) o valore scalare complesso (finito). Se xmin o xmax è complesso, integral approssima l’integrale del percorso da xmin a xmax su un percorso rettilineo.

Tipi di dati: double | single
Supporto numeri complessi:

Limite superiore di x, specificato come numero reale (finito o infinito) o numero complesso (finito). Se xmin o xmax è complesso, integral approssima l’integrale del percorso da xmin a xmax su un percorso rettilineo.

Tipi di dati: double | single
Supporto numeri complessi:

Argomenti nome-valore

Specificare coppie opzionali di argomenti come Name1=Value1,...,NameN=ValueN, dove Name è il nome dell’argomento e Value è il valore corrispondente. Gli argomenti nome-valore devono comparire dopo gli altri argomenti, mentre l'ordine delle coppie non è rilevante.

Per le release antecedenti alla R2021a, utilizzare le virgole per separare ciascun nome e valore e includere Name tra virgolette.

Esempio integral(fun,a,b,'AbsTol',1e-12) imposta la tolleranza di errore assoluto a circa 12 posizioni decimali di precisione.

Tolleranza di errore assoluto, specificata come la coppia separata da virgola composta da 'AbsTol' e un numero reale non negativo. integral utilizza la tolleranza di errore assoluto per limitare una stima dell’errore assoluto |qQ|, dove q è il valore calcolato dell’integrale e Q è il valore esatto (sconosciuto). integral potrebbe fornire un maggior numero di posizioni decimali di precisione se viene diminuita la tolleranza di errore assoluto.

Nota

AbsTol e RelTol lavorano insieme. integral potrebbe soddisfare la tolleranza di errore assoluto o la tolleranza di errore relativo, ma non necessariamente entrambe. Per maggiori informazioni sull’utilizzo di queste tolleranze, vedere la sezione Suggerimenti.

Esempio integral(fun,a,b,'AbsTol',1e-12) imposta la tolleranza di errore assoluto a circa 12 posizioni decimali di precisione.

Tipi di dati: single | double

Tolleranza di errore relativo, specificata come la coppia separata da virgola composta da 'RelTol' e un numero reale non negativo. integral la tolleranza di errore relativo per limitare una stima dell’errore relativo |qQ|/|Q|, dove q è il valore calcolato dell’integrale e Q è il valore esatto (sconosciuto). integral potrebbe fornire più cifre significative di precisione se viene diminuita la tolleranza dell’errore relativo.

Nota

RelTol e AbsTol lavorano insieme. integral potrebbe soddisfare la tolleranza di errore relativo o la tolleranza di errore assoluto, ma non necessariamente entrambe. Per maggiori informazioni sull’utilizzo di queste tolleranze, vedere la sezione Tips (Suggerimenti).

Esempio integral(fun,a,b,'RelTol',1e-9) imposta la tolleranza di errore relativo su circa 9 cifre significative.

Tipi di dati: single | double

Flag di funzione con valore di array, specificato come la coppia separata da virgola composta da 'ArrayValued' e da un 1 (true) numerico o logico o 0 (false). Impostare questo flag su true o 1 per indicare che fun è una funzione che accetta un input scalare e restituisce un vettore, una matrice o un array N-D di output.

Il valore predefinito di false indica che fun è una funzione che accetta un input vettoriale e restituisce un output vettoriale.

Esempio integral(fun,a,b,'ArrayValued',true) indica che l’integranda è una funzione con valore di array.

Integrazione di waypoint, specificata come la coppia separata da virgola composta da 'Waypoints' e un vettore di numeri reali o complessi. Utilizzare i waypoint per indicare i punti nell'intervallo di integrazione che si desidera che vengano utilizzati dall'integratore nella griglia iniziale:

  • Aggiungere altri punti di valutazione in prossimità di feature interessanti della funzione, come ad esempio un estremo locale.

  • Integrare in modo efficiente attraverso le discontinuità dell'integranda specificando le posizioni delle discontinuità.

  • Eseguire integrazioni di contorni complessi specificando numeri complessi come waypoint. Se xmin, xmax o qualsiasi voce del vettore dei waypoint è complessa, l'integrazione viene eseguita su una sequenza di percorsi rettilinei nel piano complesso. In questo caso, tutti i limiti di integrazione e i waypoint devono essere finiti.

Non utilizzare waypoint per specificare le singolarità. Dividere invece l'intervallo e sommare i risultati di integrazioni separate con le singolarità agli estremi.

Esempio integral(fun,a,b,'Waypoints',[1+1i,1-1i]) specifica due waypoint complessi lungo l'intervallo di integrazione.

Tipi di dati: single | double
Supporto numeri complessi:

Suggerimenti

  • La funzione integral cerca di soddisfare:

    abs(q - Q) <= max(AbsTol,RelTol*abs(q))
    dove q è il valore calcolato dell’integrale e Q è il valore esatto (sconosciuto). Le tolleranze assolute e relative forniscono un compromesso tra precisione e tempo di calcolo. Di norma, la tolleranza relativa determina la precisione dell'integrazione. Tuttavia, se abs(q) è sufficientemente piccolo, la tolleranza assoluta determina la precisione dell'integrazione. In genere, è opportuno specificare insieme le tolleranze assolute e quelle relative.

  • Se si specificano limiti di integrazione a precisione singola o se fun restituisce risultati a precisione singola, potrebbe essere necessario specificare tolleranze di errore assoluto e relativo più ampie.

Riferimenti

[1] L.F. Shampine “Vectorized Adaptive Quadrature in MATLAB®,” Journal of Computational and Applied Mathematics, 211, 2008, pp.131–140.

Funzionalità estese

Cronologia versioni

Introdotto in R2012a