Manufaturação industrial
Internet das coisas industrial | Materiais industriais | Manutenção e reparo de equipamentos | Programação industrial |
home  MfgRobots >> Manufaturação industrial >  >> Industrial programming >> MATLAB

MATLAB - Diferencial


O MATLAB fornece o dif comando para calcular derivadas simbólicas. Em sua forma mais simples, você passa a função que deseja diferenciar para o comando diff como um argumento.

Por exemplo, vamos calcular a derivada da função f(t) =3t 2 + 2t -2

Exemplo


Crie um arquivo de script e digite o seguinte código nele -
syms t
f = 3*t^2 + 2*t^(-2);
diff(f)

Quando o código acima é compilado e executado, ele produz o seguinte resultado -
ans =
6*t - 4/t^3

A seguir está o equivalente de oitava do cálculo acima -
pkg load symbolic
symbols

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

Octave executa o código e retorna o seguinte resultado -
ans =
   -(4.0)*t^(-3.0)+(6.0)*t

Verificação das Regras Elementares de Diferenciação


Vamos enunciar brevemente várias equações ou regras para a diferenciação de funções e verificar essas regras. Para este propósito, escreveremos f'(x) para uma derivada de primeira ordem e f"(x) para uma derivada de segunda ordem.

A seguir estão as regras para diferenciação -

Regra 1


Para quaisquer funções f e g e quaisquer números reais a e b são a derivada da função −

h(x) =af(x) + bg(x) em relação a x é dado por −

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

Regra 2


A soma e subtração As regras afirmam que se f e g são duas funções, f' e g' são suas derivadas respectivamente, então,

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

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

Regra 3


O produto A regra afirma que se f e g são duas funções, f' e g' são suas derivadas respectivamente, então,

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

Regra 4


O quociente A regra afirma que se f e g são duas funções, f' e g' são suas derivadas respectivamente, então,

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

Regra 5


O polinômio ou regra de potência elementar afirma que, se y =f(x) =x n , então f' =n. x (n-1)

Um resultado direto dessa regra é que a derivada de qualquer constante é zero, ou seja, se y =k , qualquer constante, então

f' =0

Regra 6


A cadeia A regra afirma que, derivada da função de uma função h(x) =f(g(x)) em relação a x é,

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

Exemplo


Crie um arquivo de script e digite o seguinte código nele -
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 você executa o arquivo, o MATLAB exibe o seguinte resultado -
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

A seguir está o equivalente de oitava do cálculo acima -
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 executa o código e retorna o seguinte resultado -
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)

Derivadas de funções exponenciais, logarítmicas e trigonométricas


A tabela a seguir fornece as derivadas das funções exponenciais, logarítmicas e trigonométricas comumente usadas -
Função Derivativo
c a.x c a.x .ln c.a (ln é logaritmo natural)
e x e x
ln x 1/x
lnc x 1/x.ln c
x x x x .(1 + ln x)
sin(x) cos(x)
cos(x) -sin(x)
tan(x) seg 2 (x), ou 1/cos 2 (x), ou 1 + tan 2 (x)
berço(x) -csc 2 (x), ou -1/sin 2 (x), ou -(1 + berço 2 (x))
s(x) sec(x).tan(x)
csc(x) -csc(x).cot(x)

Exemplo


Crie um arquivo de script e digite o seguinte código nele -
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 você executa o arquivo, o MATLAB exibe o seguinte resultado -
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

A seguir está o equivalente de oitava do cálculo acima -
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 executa o código e retorna o seguinte resultado -
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)

Cálculo de derivativos de ordem superior


Para calcular derivadas mais altas de uma função f, usamos a sintaxe diff(f,n) .

Vamos calcular a segunda derivada da função y =f(x) =x .e -3x
f = x*exp(-3*x);
diff(f, 2)

O MATLAB executa o código e retorna o seguinte resultado -
ans =
9*x*exp(-3*x) - 6*exp(-3*x)

A seguir está o equivalente de oitava do cálculo acima -
pkg load symbolic
symbols

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

Octave executa o código e retorna o seguinte resultado -
ans =

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

Exemplo


Neste exemplo, vamos resolver um problema. Dado que uma função y =f(x) =3 sen(x) + 7 cos(5x) . Teremos que descobrir se a equação f" + f =-5cos(2x) permanece verdadeiro.

Crie um arquivo de script e digite o seguinte código nele -
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 você executa o arquivo, ele exibe o seguinte resultado -
No, the equation does not hold true
Value of LHS is: 
-168*cos(5*x)

A seguir está o equivalente de oitava do cálculo acima -
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 executa o código e retorna o seguinte resultado -
No, the equation does not hold true
Value of LHS is: 
-(168.0)*cos((5.0)*x)

Encontrando os máximos e mínimos de uma curva


Se estamos procurando os máximos e mínimos locais para um gráfico, estamos basicamente procurando os pontos mais altos ou mais baixos no gráfico da função em uma localidade específica, ou por um intervalo específico de valores da variável simbólica.

Para uma função y =f(x) os pontos no gráfico onde o gráfico tem inclinação zero são chamados de pontos estacionários . Em outras palavras, pontos estacionários são onde f'(x) =0.

Para encontrar os pontos estacionários de uma função que derivamos, precisamos igualar a derivada a zero e resolver a equação.

Exemplo


Vamos encontrar os pontos estacionários da função f(x) =2x 3 + 3x 2 − 12x + 17

Siga os seguintes passos -

Primeiro vamos entrar na função e traçar seu gráfico.
syms x
y = 2*x^3 + 3*x^2 - 12*x + 17;   % defining the function
ezplot(y)

O MATLAB executa o código e retorna o seguinte gráfico -

Aqui está o código equivalente ao Octave para o exemplo acima -
pkg load symbolic
symbols

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

ezplot(y)
print -deps graph.eps

Nosso objetivo é encontrar alguns máximos e mínimos locais no gráfico, então vamos encontrar os máximos e mínimos locais para o intervalo [-2, 2] no gráfico.
syms x
y = 2*x^3 + 3*x^2 - 12*x + 17;   % defining the function
ezplot(y, [-2, 2])

O MATLAB executa o código e retorna o seguinte gráfico -

Aqui está o código equivalente ao Octave para o exemplo acima -
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

Em seguida, vamos calcular a derivada.
g = diff(y)

O MATLAB executa o código e retorna o seguinte resultado -
g =
   6*x^2 + 6*x - 12

Aqui está o equivalente de oitava do cálculo acima -
pkg load symbolic
symbols

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

Octave executa o código e retorna o seguinte resultado -
g =
   -12.0+(6.0)*x+(6.0)*x^(2.0)

Vamos resolver a função derivada, g, para obter os valores onde ela se torna zero.
s = solve(g)

O MATLAB executa o código e retorna o seguinte resultado -
s =
   1
   -2

A seguir está o equivalente de oitava do cálculo acima -
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 executa o código e retorna o seguinte resultado -
g =

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

  -2
   1

Isso está de acordo com nosso enredo. Então, vamos avaliar a função f nos pontos críticos x =1, -2. Podemos substituir um valor em uma função simbólica usando as subs comando.
subs(y, 1), subs(y, -2)

O MATLAB executa o código e retorna o seguinte resultado -
ans =
   10
ans =
   37

A seguir está o equivalente de oitava do cálculo acima -
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

Portanto, os valores mínimo e máximo da função f(x) =2x 3 + 3x 2 − 12x + 17, no intervalo [-2,2] são 10 e 37.

Resolver equações diferenciais


O MATLAB fornece o dsolve comando para resolver equações diferenciais simbolicamente.

A forma mais básica do dsolve comando para encontrar a solução para uma única equação é
dsolve('eqn') 

onde eqn é uma string de texto usada para inserir a equação.

Ele retorna uma solução simbólica com um conjunto de constantes arbitrárias que o MATLAB rotula C1, C2 e assim por diante.

Você também pode especificar condições iniciais e de contorno para o problema, como uma lista delimitada por vírgulas seguindo a equação como −
dsolve('eqn','cond1', 'cond2',…)  

Para o propósito de usar o comando dsolve, derivados são indicados com um D . Por exemplo, uma equação como f'(t) =-2*f + custo(t) é inserida como −

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

Derivadas mais altas são indicadas seguindo D pela ordem da derivada.

Por exemplo, a equação f"(x) + 2f'(x) =5sin3x deve ser inserida como −

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

Tomemos um exemplo simples de uma equação diferencial de primeira ordem:y' =5y.
s = dsolve('Dy = 5*y')

O MATLAB executa o código e retorna o seguinte resultado -
s =
   C2*exp(5*t)

Vamos pegar outro exemplo de uma equação diferencial de segunda ordem como:y" - y =0, y(0) =-1, y'(0) =2.
dsolve('D2y - y = 0','y(0) = -1','Dy(0) = 2')

O MATLAB executa o código e retorna o seguinte resultado -
ans =
   exp(t)/2 - (3*exp(-t))/2

MATLAB

  1. O que é um diferencial?
  2. O que é fluido diferencial?
  3. MATLAB - Tipos de dados
  4. MATLAB - Operadores
  5. MATLAB - Matriz
  6. MATLAB - Matrizes
  7. MATLAB - Notação de dois pontos
  8. MATLAB - Números
  9. MATLAB - Cordas
  10. MATLAB - Funções