鍍金池/ 教程/ 數(shù)據(jù)分析&挖掘/ Matlab微分和導(dǎo)數(shù)
Matlab代數(shù)(方程求解)
Matlab開發(fā)環(huán)境設(shè)置
Matlab GNU Octave
Matlab字符串
Matlab矩陣
Matlab微分和導(dǎo)數(shù)
Matlab數(shù)字
Matlab數(shù)據(jù)導(dǎo)入
Matlab整合集成
Matlab冒號符號
Matlab變量
Matlab數(shù)組
Matlab運算符
Matlab數(shù)據(jù)導(dǎo)出
Matlab向量
Matlab命令
Matlab決策
Matlab微積分
Matlab圖形
Matlab教程
Matlab繪圖
Matlab多項式
Matlab .m腳本文件
Matlab循環(huán)
Matlab基礎(chǔ)語法
Matlab函數(shù)
Matlab轉(zhuǎn)換
Matlab概述
Matlab數(shù)據(jù)類型

Matlab微分和導(dǎo)數(shù)

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ī)則,并驗證這些規(guī)則。 為此,我們將寫一個第一階導(dǎo)數(shù)f'(x)和二階導(dǎo)數(shù)f“(x)。

以下是微分的規(guī)則 -

規(guī)則 - 1

對于任何函數(shù)fg,任何實數(shù)ab是函數(shù)的導(dǎo)數(shù):

h(x) = af(x) + bg(x)相對于x,由h’(x) = af’(x) + bg’(x)給出。

規(guī)則 - 2

sumsubtraction規(guī)則表述為:如果fg是兩個函數(shù),則f'g'分別是它們的導(dǎo)數(shù),如下 -

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

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

規(guī)則 - 3

product規(guī)則表述為:如果fg是兩個函數(shù),則f'g'分別是它們的導(dǎo)數(shù),如下 -

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

規(guī)則 - 4

quotient規(guī)則表明,如果fg是兩個函數(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ù)

下表提供了常用指數(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)

計算高階導(dǎo)數(shù)

要計算函數(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的最小值和最大值分別為1037。

求解微分方程

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

上一篇:Matlab教程下一篇:Matlab多項式