MATLAB - Differenziale

MATLAB fornisce il diffcomando per il calcolo delle derivate simboliche. Nella sua forma più semplice, passi la funzione che vuoi differenziare al comando diff come argomento.

Ad esempio, calcoliamo la derivata della funzione f (t) = 3t 2 + 2t -2

Esempio

Crea un file di script e digita il seguente codice al suo interno:

syms t
f = 3*t^2 + 2*t^(-2);
diff(f)

Quando il codice precedente viene compilato ed eseguito, produce il seguente risultato:

ans =
6*t - 4/t^3

Di seguito è riportato l'equivalente in ottava del calcolo precedente:

pkg load symbolic
symbols

t = sym("t");
f = 3*t^2 + 2*t^(-2);
differentiate(f,t)

Octave esegue il codice e restituisce il seguente risultato:

ans =
   -(4.0)*t^(-3.0)+(6.0)*t

Verifica delle regole elementari di differenziazione

Dichiariamo brevemente varie equazioni o regole per la differenziazione delle funzioni e verifichiamo queste regole. A questo scopo, scriveremo f '(x) per una derivata del primo ordine e f "(x) per una derivata del secondo ordine.

Di seguito sono riportate le regole per la differenziazione:

Regola 1

Per ogni funzione feg e ogni numero reale aeb sono la derivata della funzione -

h(x) = af(x) + bg(x) rispetto a x è dato da -

h'(x) = af'(x) + bg'(x)

Regola 2

Il sum e subtraction le regole stabiliscono che se f e g sono due funzioni, f 'eg' sono le loro derivate rispettivamente, allora,

(f + g)' = f' + g'

(f - g)' = f' - g'

Regola 3

Il product regola afferma che se f e g sono due funzioni, f 'e g' sono le loro derivate rispettivamente, allora,

(f.g)' = f'.g + g'.f

Regola 4

Il quotient regola afferma che se f e g sono due funzioni, f 'e g' sono le loro derivate rispettivamente, allora,

(f/g)' = (f'.g - g'.f)/g2

Regola 5

Il polynomial o la regola del potere elementare afferma che, se y = f(x) = xn, poi f' = n. x(n-1)

Un risultato diretto di questa regola è che la derivata di qualsiasi costante è zero, cioè se y = k, qualsiasi costante, quindi

f' = 0

Regola 6

Il chain regola afferma che, derivata della funzione di una funzione h(x) = f(g(x)) rispetto a x is,

h'(x)= f'(g(x)).g'(x)

Esempio

Crea un file di script e digita il seguente codice al suo interno:

syms x
syms t

f = (x + 2)*(x^2 + 3)
der1 = diff(f)

f = (t^2 + 3)*(sqrt(t) + t^3)
der2 = diff(f)

f = (x^2 - 2*x + 1)*(3*x^3 - 5*x^2 + 2)
der3 = diff(f)

f = (2*x^2 + 3*x)/(x^3 + 1)
der4 = diff(f)

f = (x^2 + 1)^17
der5 = diff(f)

f = (t^3 + 3* t^2 + 5*t -9)^(-6)
der6 = diff(f)

Quando esegui il file, MATLAB mostra il seguente risultato:

f =
   (x^2 + 3)*(x + 2)
 
   der1 =
   2*x*(x + 2) + x^2 + 3
  
f =
   (t^(1/2) + t^3)*(t^2 + 3)
 
   der2 =
   (t^2 + 3)*(3*t^2 + 1/(2*t^(1/2))) + 2*t*(t^(1/2) + t^3)
  
f =
   (x^2 - 2*x + 1)*(3*x^3 - 5*x^2 + 2)
  
der3 =
   (2*x - 2)*(3*x^3 - 5*x^2 + 2) - (- 9*x^2 + 10*x)*(x^2 - 2*x + 1)
 
f =
   (2*x^2 + 3*x)/(x^3 + 1)
  
der4 =
   (4*x + 3)/(x^3 + 1) - (3*x^2*(2*x^2 + 3*x))/(x^3 + 1)^2
  
f =
   (x^2 + 1)^17
  
der5 =
   34*x*(x^2 + 1)^16
  
f =
   1/(t^3 + 3*t^2 + 5*t - 9)^6
  
der6 =
   -(6*(3*t^2 + 6*t + 5))/(t^3 + 3*t^2 + 5*t - 9)^7

Di seguito è riportato l'equivalente in ottava del calcolo precedente:

pkg load symbolic
symbols

x = sym("x");
t = sym("t");

f = (x + 2)*(x^2 + 3) 
der1 = differentiate(f,x) 

f = (t^2 + 3)*(t^(1/2) + t^3) 
der2 = differentiate(f,t) 

f = (x^2 - 2*x + 1)*(3*x^3 - 5*x^2 + 2) 
der3 = differentiate(f,x) 

f = (2*x^2 + 3*x)/(x^3 + 1) 
der4 = differentiate(f,x) 

f = (x^2 + 1)^17 
der5 = differentiate(f,x) 

f = (t^3 + 3* t^2 + 5*t -9)^(-6) 
der6 = differentiate(f,t)

Octave esegue il codice e restituisce il seguente risultato:

f =

(2.0+x)*(3.0+x^(2.0))
der1 =

3.0+x^(2.0)+(2.0)*(2.0+x)*x
f =

(t^(3.0)+sqrt(t))*(3.0+t^(2.0))
der2 =

(2.0)*(t^(3.0)+sqrt(t))*t+((3.0)*t^(2.0)+(0.5)*t^(-0.5))*(3.0+t^(2.0))
f =

(1.0+x^(2.0)-(2.0)*x)*(2.0-(5.0)*x^(2.0)+(3.0)*x^(3.0))
der3 =

(-2.0+(2.0)*x)*(2.0-(5.0)*x^(2.0)+(3.0)*x^(3.0))+((9.0)*x^(2.0)-(10.0)*x)*(1.0+x^(2.0)-(2.0)*x)
f =

(1.0+x^(3.0))^(-1)*((2.0)*x^(2.0)+(3.0)*x)
der4 =

(1.0+x^(3.0))^(-1)*(3.0+(4.0)*x)-(3.0)*(1.0+x^(3.0))^(-2)*x^(2.0)*((2.0)*x^(2.0)+(3.0)*x)
f =

(1.0+x^(2.0))^(17.0)
der5 =

(34.0)*(1.0+x^(2.0))^(16.0)*x
f =

(-9.0+(3.0)*t^(2.0)+t^(3.0)+(5.0)*t)^(-6.0)
der6 =

-(6.0)*(-9.0+(3.0)*t^(2.0)+t^(3.0)+(5.0)*t)^(-7.0)*(5.0+(3.0)*t^(2.0)+(6.0)*t)

Derivate di funzioni esponenziali, logaritmiche e trigonometriche

La tabella seguente fornisce i derivati ​​delle funzioni esponenziali, logaritmiche e trigonometriche di uso comune:

Funzione Derivato
ca.x c a.x .ln ca (ln è il logaritmo naturale)
ex e x
ln x 1 / x
lncx 1 / x.ln c
xx x x . (1 + ln x)
sin(x) cos (x)
cos(x) -sin (x)
tan(x) sec 2 (x) o 1 / cos 2 (x) o 1 + tan 2 (x)
cot(x) -csc 2 (x), o -1 / sin 2 (x), o - (1 + cot 2 (x))
sec(x) sec (x) .tan (x)
csc(x) -csc (x) .cot (x)

Esempio

Crea un file di script e digita il seguente codice al suo interno:

syms x
y = exp(x)
diff(y)

y = x^9
diff(y)

y = sin(x)
diff(y)

y = tan(x)
diff(y)

y = cos(x)
diff(y)

y = log(x)
diff(y)

y = log10(x)
diff(y)

y = sin(x)^2
diff(y)

y = cos(3*x^2 + 2*x + 1)
diff(y)

y = exp(x)/sin(x)
diff(y)

Quando esegui il file, MATLAB mostra il seguente risultato:

y =
   exp(x)
   ans =
   exp(x)

y =
   x^9
   ans =
   9*x^8
  
y =
   sin(x)
   ans =
   cos(x)
  
y =
   tan(x)
   ans =
   tan(x)^2 + 1
 
y =
   cos(x)
   ans =
   -sin(x)
  
y =
   log(x)
   ans =
   1/x
  
y =
   log(x)/log(10)
   ans =
   1/(x*log(10))
 
y =
   sin(x)^2
   ans =
   2*cos(x)*sin(x)
 
y =
   cos(3*x^2 + 2*x + 1)
   ans =
   -sin(3*x^2 + 2*x + 1)*(6*x + 2)
  
y =
   exp(x)/sin(x)
   ans =
   exp(x)/sin(x) - (exp(x)*cos(x))/sin(x)^2

Di seguito è riportato l'equivalente in ottava del calcolo precedente:

pkg load symbolic
symbols

x = sym("x");
y = Exp(x)
differentiate(y,x)

y = x^9
differentiate(y,x)

y = Sin(x)
differentiate(y,x)

y = Tan(x)
differentiate(y,x)

y = Cos(x)
differentiate(y,x)

y = Log(x)
differentiate(y,x)

% symbolic packages does not have this support
%y = Log10(x)
%differentiate(y,x)

y = Sin(x)^2
differentiate(y,x)

y = Cos(3*x^2 + 2*x + 1)
differentiate(y,x)

y = Exp(x)/Sin(x)
differentiate(y,x)

Octave esegue il codice e restituisce il seguente risultato:

y =

exp(x)
ans =

exp(x)
y =

x^(9.0)
ans =

(9.0)*x^(8.0)
y =

sin(x)
ans =

cos(x)
y =

tan(x)
ans =

1+tan(x)^2
y =

cos(x)
ans =

-sin(x)
y =

log(x)
ans =

x^(-1)
y =

sin(x)^(2.0)
ans =

(2.0)*sin(x)*cos(x)
y =

cos(1.0+(2.0)*x+(3.0)*x^(2.0))
ans =

-(2.0+(6.0)*x)*sin(1.0+(2.0)*x+(3.0)*x^(2.0))
y =

sin(x)^(-1)*exp(x)
ans =

sin(x)^(-1)*exp(x)-sin(x)^(-2)*cos(x)*exp(x)

Calcolo di derivati ​​di ordine superiore

Per calcolare derivate superiori di una funzione f, usiamo la sintassi diff(f,n).

Calcoliamo la derivata seconda della funzione y = f (x) = x. E -3x

f = x*exp(-3*x);
diff(f, 2)

MATLAB esegue il codice e restituisce il seguente risultato:

ans =
9*x*exp(-3*x) - 6*exp(-3*x)

Di seguito è riportato l'equivalente in ottava del calcolo precedente:

pkg load symbolic
symbols

x = sym("x");
f = x*Exp(-3*x);
differentiate(f, x, 2)

Octave esegue il codice e restituisce il seguente risultato:

ans =

(9.0)*exp(-(3.0)*x)*x-(6.0)*exp(-(3.0)*x)

Esempio

In questo esempio, risolviamo un problema. Dato che una funzioney = f(x) = 3 sin(x) + 7 cos(5x). Dovremo scoprire se l'equazionef" + f = -5cos(2x) è vero.

Crea un file di script e digita il seguente codice al suo interno:

syms x
y = 3*sin(x)+7*cos(5*x);  % defining the function
lhs = diff(y,2)+y;        %evaluting the lhs of the equation
rhs = -5*cos(2*x);        %rhs of the equation
if(isequal(lhs,rhs))
   disp('Yes, the equation holds true');
else
   disp('No, the equation does not hold true');
end
disp('Value of LHS is: '), disp(lhs);

Quando si esegue il file, viene visualizzato il seguente risultato:

No, the equation does not hold true
Value of LHS is: 
-168*cos(5*x)

Di seguito è riportato l'equivalente in ottava del calcolo precedente:

pkg load symbolic
symbols

x = sym("x");
y = 3*Sin(x)+7*Cos(5*x);           % defining the function
lhs = differentiate(y, x, 2) + y;  %evaluting the lhs of the equation
rhs = -5*Cos(2*x);                 %rhs of the equation

if(lhs == rhs)
   disp('Yes, the equation holds true');
else
   disp('No, the equation does not hold true');
end
disp('Value of LHS is: '), disp(lhs);

Octave esegue il codice e restituisce il seguente risultato:

No, the equation does not hold true
Value of LHS is: 
-(168.0)*cos((5.0)*x)

Trovare i massimi e i minimi di una curva

Se stiamo cercando i massimi e minimi locali per un grafico, stiamo fondamentalmente cercando i punti più alti o più bassi sul grafico della funzione in una particolare località, o per un particolare intervallo di valori della variabile simbolica.

Per una funzione y = f (x) vengono chiamati i punti del grafico in cui il grafico ha pendenza zero stationary points. In altre parole, i punti stazionari sono dove f '(x) = 0.

Per trovare i punti stazionari di una funzione che differenziamo, dobbiamo impostare la derivata uguale a zero e risolvere l'equazione.

Esempio

Troviamo i punti stazionari della funzione f (x) = 2x 3 + 3x 2 - 12x + 17

Procedi nel seguente modo:

First let us enter the function and plot its graph.

syms x
y = 2*x^3 + 3*x^2 - 12*x + 17;   % defining the function
ezplot(y)

MATLAB esegue il codice e restituisce la seguente trama:

Ecco il codice equivalente a Octave per l'esempio precedente:

pkg load symbolic
symbols

x = sym('x');
y = inline("2*x^3 + 3*x^2 - 12*x + 17");

ezplot(y)
print -deps graph.eps

Our aim is to find some local maxima and minima on the graph, so let us find the local maxima and minima for the interval [-2, 2] on the graph.

syms x
y = 2*x^3 + 3*x^2 - 12*x + 17;   % defining the function
ezplot(y, [-2, 2])

MATLAB esegue il codice e restituisce la seguente trama:

Ecco il codice equivalente a Octave per l'esempio precedente:

pkg load symbolic
symbols

x = sym('x');
y = inline("2*x^3 + 3*x^2 - 12*x + 17");

ezplot(y, [-2, 2])
print -deps graph.eps

Next, let us compute the derivative.

g = diff(y)

MATLAB esegue il codice e restituisce il seguente risultato:

g =
   6*x^2 + 6*x - 12

Ecco l'equivalente in ottava del calcolo precedente:

pkg load symbolic
symbols

x = sym("x");
y = 2*x^3 + 3*x^2 - 12*x + 17;
g = differentiate(y,x)

Octave esegue il codice e restituisce il seguente risultato:

g =
   -12.0+(6.0)*x+(6.0)*x^(2.0)

Let us solve the derivative function, g, to get the values where it becomes zero.

s = solve(g)

MATLAB esegue il codice e restituisce il seguente risultato:

s =
   1
   -2

Di seguito è riportato l'equivalente in ottava del calcolo precedente:

pkg load symbolic
symbols

x = sym("x");
y = 2*x^3 + 3*x^2 - 12*x + 17;
g = differentiate(y,x)
roots([6, 6, -12])

Octave esegue il codice e restituisce il seguente risultato:

g =

-12.0+(6.0)*x^(2.0)+(6.0)*x
ans =

  -2
   1

This agrees with our plot. So let us evaluate the function f at the critical points x = 1, -2. Possiamo sostituire un valore in una funzione simbolica usando il subs comando.

subs(y, 1), subs(y, -2)

MATLAB esegue il codice e restituisce il seguente risultato:

ans =
   10
ans =
   37

Di seguito è riportato l'equivalente in ottava del calcolo precedente:

pkg load symbolic
symbols

x = sym("x");
y = 2*x^3 + 3*x^2 - 12*x + 17;
g = differentiate(y,x)

roots([6, 6, -12])
subs(y, x, 1), subs(y, x, -2)

ans =
   10.0
ans =
   37.0-4.6734207789940138748E-18*I

Pertanto, i valori minimo e massimo sulla funzione f (x) = 2x 3 + 3x 2 - 12x + 17, nell'intervallo [-2,2] sono 10 e 37.

Risoluzione di equazioni differenziali

MATLAB fornisce il dsolve comando per risolvere simbolicamente equazioni differenziali.

La forma più semplice di dsolve comando per trovare la soluzione a una singola equazione è

dsolve('eqn')

dove eqn è una stringa di testo utilizzata per inserire l'equazione.

Restituisce una soluzione simbolica con un insieme di costanti arbitrarie che MATLAB etichetta C1, C2 e così via.

È inoltre possibile specificare le condizioni iniziali e al contorno per il problema, come un elenco delimitato da virgole che segue l'equazione come -

dsolve('eqn','cond1', 'cond2',…)

Allo scopo di utilizzare il comando dsolve, derivatives are indicated with a D. Ad esempio, un'equazione come f '(t) = -2 * f + cost (t) viene inserita come -

'Df = -2*f + cos(t)'

I derivati ​​superiori sono indicati seguendo la D nell'ordine del derivato.

Ad esempio l'equazione f "(x) + 2f '(x) = 5sin3x dovrebbe essere inserita come -

'D2y + 2Dy = 5*sin(3*x)'

Facciamo un semplice esempio di equazione differenziale del primo ordine: y '= 5y.

s = dsolve('Dy = 5*y')

MATLAB esegue il codice e restituisce il seguente risultato:

s =
   C2*exp(5*t)

Prendiamo un altro esempio di equazione differenziale del secondo ordine come: y "- y = 0, y (0) = -1, y '(0) = 2.

dsolve('D2y - y = 0','y(0) = -1','Dy(0) = 2')

MATLAB esegue il codice e restituisce il seguente risultato:

ans =
   exp(t)/2 - (3*exp(-t))/2