Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> MATLAB

MATLAB — Дифференциал

MATLAB предоставляет diff команда для вычисления символьных производных. В простейшей форме вы передаете функцию, которую хотите отличить, в команду diff в качестве аргумента.

Например, вычислим производную функции f(t) =3t 2 + 2t -2

Пример

Создайте файл сценария и введите в него следующий код —

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

Когда приведенный выше код скомпилирован и выполнен, он дает следующий результат —

ans =
6*t - 4/t^3

Ниже приведен октавный эквивалент приведенного выше расчета —

pkg load symbolic
symbols

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

Octave выполняет код и возвращает следующий результат —

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

Проверка элементарных правил дифференциации

Сформулируем кратко различные уравнения или правила дифференцирования функций и проверим эти правила. Для этого мы будем писать f'(x) для производной первого порядка и f"(x) для производной второго порядка.

Ниже приведены правила дифференциации —

Правило 1

Для любых функций f и g и любых действительных чисел a и b являются производными функции -

h(x) =af(x) + bg(x) относительно x задается -

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

Правило 2

сумма и вычитание Правила гласят, что если f и g — две функции, f' и g' — их производные соответственно, то

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

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

Правило 3

продукт Правило гласит, что если f и g — две функции, f' и g' — их производные соответственно, то

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

Правило 4

Коэффициент Правило гласит, что если f и g — две функции, f' и g' — их производные соответственно, то

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

Правило 5

Полином или правило элементарной мощности утверждает, что если y =f(x) =x n , то f' =n. х (n-1)

Прямым следствием этого правила является то, что производная любой константы равна нулю, т. е. если y =k , любая константа, то

f' =0

Правило 6

цепочка правило гласит, что производная функции функции h(x) =f(g(x)) относительно x,

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

Пример

Создайте файл сценария и введите в него следующий код —

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)

Когда вы запускаете файл, MATLAB отображает следующий результат —

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

Ниже приведен октавный эквивалент приведенного выше расчета —

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 выполняет код и возвращает следующий результат —

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)

Производные показательной, логарифмической и тригонометрической функций

В следующей таблице представлены производные обычно используемых экспоненциальных, логарифмических и тригонометрических функций —

Функция Производный
c a.x c a.x .ln c.a (ln — натуральный логарифм)
е х е х
длина x 1/x
лнc х 1/x.ln c
х х х х .(1 + ln x)
sin(x) cos(x)
cos(x) -sin(x)
загар(х) сек 2 (x) или 1/cos 2 (x) или 1 + tan 2 (х)
детская кроватка(x) -csc 2 (x) или -1/sin 2 (x) или -(1 + кроватка 2 (х))
сек(х) sec(x).tan(x)
csc(x) -csc(x).cot(x)

Пример

Создайте файл сценария и введите в него следующий код —

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)

Когда вы запускаете файл, MATLAB отображает следующий результат —

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

Ниже приведен октавный эквивалент приведенного выше расчета —

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 выполняет код и возвращает следующий результат —

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)

Вычисление производных высших порядков

Чтобы вычислить высшие производные функции f, мы используем синтаксис diff(f,n) .

Вычислим вторую производную функции y =f(x) =x .e -3x

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

MATLAB выполняет код и возвращает следующий результат —

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

Ниже приведен октавный эквивалент приведенного выше расчета —

pkg load symbolic
symbols

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

Octave выполняет код и возвращает следующий результат —

ans =

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

Пример

В этом примере давайте решим задачу. Учитывая, что функция y =f(x) =3 sin(x) + 7 cos(5x) . Нам нужно выяснить, верно ли уравнение f" + f =-5cos(2x). верно.

Создайте файл сценария и введите в него следующий код —

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);

Когда вы запускаете файл, он отображает следующий результат —

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

Ниже приведен октавный эквивалент приведенного выше расчета —

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 выполняет код и возвращает следующий результат —

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

Поиск максимума и минимума кривой

Если мы ищем локальные максимумы и минимумы для графика, мы в основном ищем самые высокие или самые низкие точки на графике функции в определенной местности или для определенного диапазона значений символической переменной.

Для функции y =f(x) точки на графике, в которых график имеет нулевой наклон, называются стационарными точками . Другими словами, стационарные точки находятся там, где f'(x) =0.

Чтобы найти точки покоя функции, которую мы дифференцируем, нам нужно приравнять производную к нулю и решить уравнение.

Пример

Найдем точки покоя функции f(x) =2x 3 + 3x 2 − 12x + 17

Выполните следующие шаги —

Давайте сначала введем функцию и построим ее график.

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

MATLAB выполняет код и возвращает следующий график —

Вот эквивалентный код Octave для приведенного выше примера —

pkg load symbolic
symbols

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

ezplot(y)
print -deps graph.eps

Наша цель — найти локальные максимумы и минимумы на графике, поэтому давайте найдем локальные максимумы и минимумы для интервала [-2, 2] на графике.

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

MATLAB выполняет код и возвращает следующий график —

Вот эквивалентный код Octave для приведенного выше примера —

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

Далее вычислим производную.

g = diff(y)

MATLAB выполняет код и возвращает следующий результат —

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

Вот октавный эквивалент приведенного выше расчета —

pkg load symbolic
symbols

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

Octave выполняет код и возвращает следующий результат —

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

Давайте решим функцию производной g, чтобы получить значения, при которых она становится равной нулю.

s = solve(g)

MATLAB выполняет код и возвращает следующий результат —

s =
   1
   -2

Ниже приведен октавный эквивалент приведенного выше расчета —

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 выполняет код и возвращает следующий результат —

g =

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

  -2
   1

Это согласуется с нашим сюжетом. Итак, оценим функцию f в критических точках x =1, -2. Мы можем заменить значение в символьной функции, используя subs команда.

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

MATLAB выполняет код и возвращает следующий результат —

ans =
   10
ans =
   37

Ниже приведен октавный эквивалент приведенного выше расчета —

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

Следовательно, минимальное и максимальное значения функции f(x) =2x 3 + 3x 2 − 12x + 17, в интервале [-2,2] находятся 10 и 37.

Решение дифференциальных уравнений

MATLAB предоставляет dsolve команда для символьного решения дифференциальных уравнений.

Самая основная форма dsolve команда для нахождения решения одного уравнения

dsolve('eqn') 

где уравнение это текстовая строка, используемая для ввода уравнения.

Он возвращает символьное решение с набором произвольных констант, которые MATLAB помечает как C1, C2 и т. д.

Вы также можете указать начальные и граничные условия для задачи в виде списка, разделенного запятыми, следующего за уравнением как -

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

Для использования команды dsolve производные обозначаются буквой D . Например, такое уравнение, как f'(t) =-2*f + cost(t), вводится как -

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

Более высокие производные обозначаются буквой D после порядка производной.

Например, уравнение f"(x) + 2f'(x) =5sin3x должно быть введено как -

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

Возьмем простой пример дифференциального уравнения первого порядка:y' =5y.

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

MATLAB выполняет код и возвращает следующий результат —

s =
   C2*exp(5*t)

Возьмем другой пример дифференциального уравнения второго порядка:y" - y =0, y(0) =-1, y'(0) =2.

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

MATLAB выполняет код и возвращает следующий результат —

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

MATLAB

  1. Что такое дифференциал?
  2. Что такое дифференциальная жидкость?
  3. MATLAB — типы данных
  4. MATLAB — Операторы
  5. MATLAB — Матрица
  6. MATLAB — Массивы
  7. MATLAB — запись двоеточия
  8. МАТЛАБ — Числа
  9. MATLAB — Строки
  10. МАТЛАБ — Функции