MATLAB - Integrazione
L'integrazione si occupa di due tipi di problemi essenzialmente diversi.
Nel primo tipo viene data la derivata di una funzione e si vuole trovare la funzione. Pertanto, sostanzialmente invertiamo il processo di differenziazione. Questo processo inverso è noto come anti-differenziazione, o trovare la funzione primitiva o trovare un fileindefinite integral.
Il secondo tipo di problemi consiste nel sommare un numero molto grande di quantità molto piccole e quindi prendere un limite quando la dimensione delle quantità si avvicina allo zero, mentre il numero di termini tende all'infinito. Questo processo porta alla definizione didefinite integral.
Gli integrali definiti vengono utilizzati per trovare area, volume, baricentro, momento di inerzia, lavoro svolto da una forza e in numerose altre applicazioni.
Trovare l'integrale indefinito utilizzando MATLAB
Per definizione, se la derivata di una funzione f (x) è f '(x), allora diciamo che un integrale indefinito di f' (x) rispetto a x è f (x). Ad esempio, poiché la derivata (rispetto a x) di x 2 è 2x, possiamo dire che un integrale indefinito di 2x è x 2 .
In simboli -
f'(x2) = 2x, perciò,
∫ 2xdx = x2.
L'integrale indefinito non è univoco, perché anche la derivata di x 2 + c, per qualsiasi valore di una costante c, sarà 2x.
Questo è espresso in simboli come -
∫ 2xdx = x2 + c.
Dove, c è chiamata "costante arbitraria".
MATLAB fornisce un file intcomando per il calcolo dell'integrale di un'espressione. Per derivare un'espressione per l'integrale indefinito di una funzione, scriviamo -
int(f);
Ad esempio, dal nostro esempio precedente:
syms x
int(2*x)
MATLAB esegue l'istruzione di cui sopra e restituisce il seguente risultato:
ans =
x^2
Esempio 1
In questo esempio, troviamo l'integrale di alcune espressioni di uso comune. Crea un file di script e digita il seguente codice al suo interno:
syms x n
int(sym(x^n))
f = 'sin(n*t)'
int(sym(f))
syms a t
int(a*cos(pi*t))
int(a^x)
Quando si esegue il file, viene visualizzato il seguente risultato:
ans =
piecewise([n == -1, log(x)], [n ~= -1, x^(n + 1)/(n + 1)])
f =
sin(n*t)
ans =
-cos(n*t)/n
ans =
(a*sin(pi*t))/pi
ans =
a^x/log(a)
Esempio 2
Crea un file di script e digita il seguente codice al suo interno:
syms x n
int(cos(x))
int(exp(x))
int(log(x))
int(x^-1)
int(x^5*cos(5*x))
pretty(int(x^5*cos(5*x)))
int(x^-5)
int(sec(x)^2)
pretty(int(1 - 10*x + 9 * x^2))
int((3 + 5*x -6*x^2 - 7*x^3)/2*x^2)
pretty(int((3 + 5*x -6*x^2 - 7*x^3)/2*x^2))
Nota che il pretty restituisce un'espressione in un formato più leggibile.
Quando si esegue il file, viene visualizzato il seguente risultato:
ans =
sin(x)
ans =
exp(x)
ans =
x*(log(x) - 1)
ans =
log(x)
ans =
(24*cos(5*x))/3125 + (24*x*sin(5*x))/625 - (12*x^2*cos(5*x))/125 + (x^4*cos(5*x))/5 - (4*x^3*sin(5*x))/25 + (x^5*sin(5*x))/5
2 4
24 cos(5 x) 24 x sin(5 x) 12 x cos(5 x) x cos(5 x)
----------- + ------------- - -------------- + ------------
3125 625 125 5
3 5
4 x sin(5 x) x sin(5 x)
------------- + -----------
25 5
ans =
-1/(4*x^4)
ans =
tan(x)
2
x (3 x - 5 x + 1)
ans =
- (7*x^6)/12 - (3*x^5)/5 + (5*x^4)/8 + x^3/2
6 5 4 3
7 x 3 x 5 x x
- ---- - ---- + ---- + --
12 5 8 2
Trovare l'integrale definito utilizzando MATLAB
Per definizione, l'integrale definito è fondamentalmente il limite di una somma. Usiamo integrali definiti per trovare aree come l'area tra una curva e l'asse x e l'area tra due curve. Gli integrali definiti possono essere utilizzati anche in altre situazioni, dove la quantità richiesta può essere espressa come limite di una somma.
Il int la funzione può essere utilizzata per un'integrazione definita passando i limiti oltre i quali si vuole calcolare l'integrale.
Calcolare
scriviamo,
int(x, a, b)
Ad esempio, per calcolare il valore di
int(x, 4, 9)
MATLAB esegue l'istruzione di cui sopra e restituisce il seguente risultato:
ans =
65/2
Di seguito è riportato l'equivalente in ottava del calcolo precedente:
pkg load symbolic
symbols
x = sym("x");
f = x;
c = [1, 0];
integral = polyint(c);
a = polyval(integral, 9) - polyval(integral, 4);
display('Area: '), disp(double(a));
Octave esegue il codice e restituisce il seguente risultato:
Area:
32.500
Una soluzione alternativa può essere fornita usando la funzione quad () fornita da Octave come segue:
pkg load symbolic
symbols
f = inline("x");
[a, ierror, nfneval] = quad(f, 4, 9);
display('Area: '), disp(double(a));
Octave esegue il codice e restituisce il seguente risultato:
Area:
32.500
Esempio 1
Calcoliamo l'area racchiusa tra l'asse xe la curva y = x 3 −2x + 5 e le ordinate x = 1 ex = 2.
L'area richiesta è data da:
Crea un file di script e digita il codice seguente:
f = x^3 - 2*x +5;
a = int(f, 1, 2)
display('Area: '), disp(double(a));
Quando si esegue il file, viene visualizzato il seguente risultato:
a =
23/4
Area:
5.7500
Di seguito è riportato l'equivalente in ottava del calcolo precedente:
pkg load symbolic
symbols
x = sym("x");
f = x^3 - 2*x +5;
c = [1, 0, -2, 5];
integral = polyint(c);
a = polyval(integral, 2) - polyval(integral, 1);
display('Area: '), disp(double(a));
Octave esegue il codice e restituisce il seguente risultato:
Area:
5.7500
Una soluzione alternativa può essere fornita usando la funzione quad () fornita da Octave come segue:
pkg load symbolic
symbols
x = sym("x");
f = inline("x^3 - 2*x +5");
[a, ierror, nfneval] = quad(f, 1, 2);
display('Area: '), disp(double(a));
Octave esegue il codice e restituisce il seguente risultato:
Area:
5.7500
Esempio 2
Trova l'area sotto la curva: f (x) = x 2 cos (x) per −4 ≤ x ≤ 9.
Crea un file di script e scrivi il codice seguente:
f = x^2*cos(x);
ezplot(f, [-4,9])
a = int(f, -4, 9)
disp('Area: '), disp(double(a));
Quando esegui il file, MATLAB traccia il grafico:
L'output è fornito di seguito:
a =
8*cos(4) + 18*cos(9) + 14*sin(4) + 79*sin(9)
Area:
0.3326
Di seguito è riportato l'equivalente in ottava del calcolo precedente:
pkg load symbolic
symbols
x = sym("x");
f = inline("x^2*cos(x)");
ezplot(f, [-4,9])
print -deps graph.eps
[a, ierror, nfneval] = quad(f, -4, 9);
display('Area: '), disp(double(a));