MATLAB提供用于計算符號導(dǎo)數(shù)的diff
命令。 以最簡單的形式,將要微分的功能傳遞給diff
命令作為參數(shù)。
例如,計算函數(shù)的導(dǎo)數(shù)的方程式 -
例子
創(chuàng)建腳本文件并在其中鍵入以下代碼 -
syms t
f = 3*t^2 + 2*t^(-2);
diff(f)
執(zhí)行上面示例代碼,得到以下結(jié)果 -
Trial>> syms t
f = 3*t^2 + 2*t^(-2);
diff(f)
ans =
6*t - 4/t^3
以下是使用Octave 計算的寫法 -
pkg load symbolic
symbols
t = sym("t");
f = 3*t^2 + 2*t^(-2);
differentiate(f,t)
執(zhí)行上面示例代碼,得到以下結(jié)果 -
ans =
6*t - 4/t^3
下面簡要說明微分規(guī)則的各種方程或規(guī)則,并驗證這些規(guī)則。 為此,我們將寫一個第一階導(dǎo)數(shù)f'(x)
和二階導(dǎo)數(shù)f“(x)
。
以下是微分的規(guī)則 -
規(guī)則 - 1
對于任何函數(shù)f
和g
,任何實數(shù)a
和b
是函數(shù)的導(dǎo)數(shù):
h(x) = af(x) + bg(x)相對于x
,由h’(x) = af’(x) + bg’(x)給出。
規(guī)則 - 2
sum和subtraction規(guī)則表述為:如果f
和g
是兩個函數(shù),則f'
和g'
分別是它們的導(dǎo)數(shù),如下 -
(f + g)' = f' + g'
(f - g)' = f' - g'
規(guī)則 - 3
product規(guī)則表述為:如果f
和g
是兩個函數(shù),則f'
和g'
分別是它們的導(dǎo)數(shù),如下 -
(f.g)' = f'.g + g'.f
規(guī)則 - 4
quotient規(guī)則表明,如果f
和g
是兩個函數(shù),則f'
和g'
分別是它們的導(dǎo)數(shù),那么 -
規(guī)則 - 5
多項式或基本次冪規(guī)則表述為:如果y = f(x)= x^n
,則 -
這個規(guī)則的直接結(jié)果是任何常數(shù)的導(dǎo)數(shù)為零,即如果y = k
,那么為任何常數(shù) -
f' = 0
規(guī)則 - 5
chain規(guī)則表述為 - 相對于x
的函數(shù)h(x)= f(g(x))
的函數(shù)的導(dǎo)數(shù)是 -
h'(x)= f'(g(x)).g'(x)
例子
創(chuàng)建腳本文件并在其中鍵入以下代碼 -
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)
執(zhí)行上面示例代碼,得到 以下結(jié)果 -
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
以下是對上面示例的Octave寫法 -
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)
下表提供了常用指數(shù),對數(shù)和三角函數(shù)的導(dǎo)數(shù),
例子
創(chuàng)建腳本文件并在其中鍵入以下代碼 -
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)
執(zhí)行上面示例代碼,得到以下結(jié)果 -
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
以下代碼是上面代碼的Octave寫法 -
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)
要計算函數(shù)f
的較高導(dǎo)數(shù),可使用diff(f,n)
。
計算函數(shù)的二階導(dǎo)數(shù)公式為 -
f = x*exp(-3*x);
diff(f, 2)
MATLAB執(zhí)行上面代碼將返回以下結(jié)果 -
ans =
9*x*exp(-3*x) - 6*exp(-3*x)
以下是使用Octave重寫上面示例,代碼如下 -
pkg load symbolic
symbols
x = sym("x");
f = x*Exp(-3*x);
differentiate(f, x, 2)
例子
在這個例子中,要解決一個問題。由給定函數(shù)y = f(x)= 3sin(x)+ 7cos(5x)
,來找出方程f“+ f = -5cos(2x)
是否成立。
創(chuàng)建腳本文件并在其中鍵入以下代碼 -
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);
運行文件時,會顯示以下結(jié)果 -
No, the equation does not hold true
Value of LHS is:
-168*cos(5*x)
以上是上面示例的Octave寫法 -
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);
如果正在搜索圖形的局部最大值和最小值,基本上是在特定地點的函數(shù)圖上或符號變量的特定值范圍內(nèi)查找最高點或最低點。
對于函數(shù)y = f(x)
,圖形具有零斜率的圖上的點稱為固定點。 換句話說,固定點是f'(x)= 0
。
要找到微分的函數(shù)的固定點,需要將導(dǎo)數(shù)設(shè)置為零并求解方程。
示例
要找到函數(shù)f(x)= 2x3 + 3x2 - 12x + 17
的固定點
可參考以下步驟 -
首先輸入函數(shù)并繪制圖,代碼如下 -
syms x
y = 2*x^3 + 3*x^2 - 12*x + 17; % defining the function
ezplot(y)
執(zhí)行上面示例代碼,得到以下結(jié)果 -
以上是上面示例的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
我們的目標(biāo)是在圖上找到一些局部最大值和最小值,假設(shè)要找到圖中間隔在[-2,2]
的局部最大值和最小值。參考以下示例代碼 -
syms x
y = 2*x^3 + 3*x^2 - 12*x + 17; % defining the function
ezplot(y, [-2, 2])
執(zhí)行上面示例代碼,得到以下結(jié)果 -
以下是上面示例的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
接下來,需要計算導(dǎo)數(shù)。
g = diff(y)
MATLAB執(zhí)行代碼并返回以下結(jié)果 -
g =
6*x^2 + 6*x - 12
以下是上面示例的Octave寫法 -
pkg load symbolic
symbols
x = sym("x");
y = 2*x^3 + 3*x^2 - 12*x + 17;
g = differentiate(y,x)
接下來求解導(dǎo)數(shù)函數(shù)g
,得到它變?yōu)榱愕闹怠?/p>
s = solve(g)
MATLAB執(zhí)行代碼并返回以下結(jié)果 -
s =
1
-2
以下是上面示例的Octave寫法 -
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])
這與我們設(shè)想情節(jié)一致。 因此,要評估臨界點x = 1,-2
處的函數(shù)f
。可以使用subs
命令替換符號函數(shù)中的值。
subs(y, 1), subs(y, -2)
MATLAB執(zhí)行代碼并返回以下結(jié)果 -
ans =
10
ans =
37
以下是上面示例的Octave寫法 -
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)
因此,在間隔[-2,2]
中函數(shù)f(x)= 2x^3 + 3x^2 - 12x + 17
的最小值和最大值分別為10
和37
。
MATLAB提供了用于求解微分方程的dsolve
命令。
找到單個方程的解的最基本的dsolve
命令形式是 -
dsolve('eqn')
其中eqn
是用于輸入方程式的文本串。
它返回一個符號解,其中包含一組任意常量,MATLAB
標(biāo)記C1
,C2
等等。
還可以為問題指定初始和邊界條件,以逗號分隔的列表遵循以下公式:
dsolve('eqn','cond1', 'cond2',…)
為了使用dsolve
命令,導(dǎo)數(shù)用D
表示。例如,像f'(t)= -2 * f + cost(t)
這樣的等式輸入為 -
'Df = -2*f + cos(t)'
較高階導(dǎo)數(shù)由D
導(dǎo)數(shù)的順序表示。
例如,方程f"(x) + 2f'(x) = 5sin3x
應(yīng)輸入為 -
'D2y + 2Dy = 5*sin(3*x)'
下面來看一個一階微分方程的簡單例子:y'= 5y
。
s = dsolve('Dy = 5*y')
MATLAB執(zhí)行代碼并返回以下結(jié)果 -
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執(zhí)行代碼并返回以下結(jié)果 -
ans =
exp(t)/2 - (3*exp(-t))/2