Matlab求解極限、微積分問題

MATLAB提供瞭解決微分和積分微積分的各種方法,求解任何程度的微分方程和極限計算。可以輕鬆繪製複雜功能的圖形,並通過求解原始功能以及其衍生來檢查圖形上的最大值,最小值和其他固定點。

本章將介紹微積分問題。在本章中,將討論預演算法,即計算功能限制和驗證限制屬性。

在下一章微分中,將計表達式的導數,並找到一個圖的局部最大值和最小值。我們還將討論求解微分方程。

最後,在“整合/集成”一章中,我們將討論積分微積分。

計算極限

MATLAB提供計算極限的limit函數。在其最基本的形式中,limit函數將表達式作為參數,並在獨立變量為零時找到表達式的極限。

例如,要計算函數f(x)=(x^3 + 5)/(x^4 + 7)的極限,因為x趨向於零。

syms xlimit((x^3 + 5)/(x^4 + 7))

MATLAB

執行上面示例代碼,得到以下結果 -

Trial>> syms x limit((x^3 + 5)/(x^4 + 7)) ans = 5/7

Shell

limit函數落在符號計算域; 需要使用syms函數來告訴MATLAB正在使用的符號變量。還可以計算函數的極限,因為變量趨向於除零之外的某個數字。要計算 -

Matlab求解極限、微積分問題

可使用帶有參數的limit命令。第一個是表達式,第二個是數字 - x表示接近,這裡它是a。

例如,要計算函數f(x)=(x-3)/(x-1)的極限,因為x傾向於1。

limit((x - 3)/(x-1),1)

MATLAB

執行上面示例代碼,得到以下結果 -

ans = NaN

Shell

下面再看另外一個例子,

limit(x^2 + 5, 3)

Shell

執行上面示例代碼,得到以下結果 -

ans = 14

Shell

使用Octave計算極限

以下是Octave版本的上述示例使用symbolic包,嘗試執行並比較結果 -

pkg load symbolic symbols x=sym("x");subs((x^3+5)/(x^4+7),x,0)

MATLAB

執行上面示例代碼,得到以下結果 -

ans = 0.7142857142857142857

Shell

驗證極限的基本屬性

代數極限定理提供了極限的一些基本屬性。這些屬性如下 -

Matlab求解極限、微積分問題

下面來考慮兩個函數 -

f(x) = (3x + 5)/(x - 3) g(x) = x^2 + 1.

下面計算函數的極限,這兩個函數的x趨向於5,並使用這兩個函數和MATLAB驗證極限的基本屬性。

例子

創建腳本文件並在其中鍵入以下代碼 -

syms x f = (3*x + 5)/(x-3);g = x^2 + 1;l1 = limit(f, 4)l2 = limit (g, 4)lAdd = limit(f + g, 4)lSub = limit(f - g, 4)lMult = limit(f*g, 4)lDiv = limit (f/g, 4)

MATLAB

執行上面示例代碼,得到以下結果 -

l1 = 17 l2 = 17 lAdd = 34 lSub = 0 lMult = 289 lDiv = 1

Shell

使用Octave驗證極限的基本屬性

以下是Octave版本的上述示例使用symbolic包,嘗試執行並比較結果 -

pkg load symbolic symbols x = sym("x");f = (3*x + 5)/(x-3);g = x^2 + 1;l1=subs(f, x, 4)l2 = subs (g, x, 4)lAdd = subs (f+g, x, 4)lSub = subs (f-g, x, 4)lMult = subs (f*g, x, 4)lDiv = subs (f/g, x, 4)

MATLAB

執行上面示例代碼,得到以下結果 -

l1 = 17.0 l2 = 17.0 lAdd = 34.0 lSub = 0.0 lMult = 289.0 lDiv = 1.0

Shell

左右邊界極限

當函數對變量的某個特定值具有不連續性時,該點不存在極限。 換句話說,當x = a時,函數f(x)的極限具有不連續性,當x的值從左側接近x時,x的值不等於x從右側接近的極限值。

對於x

下面來看看一個函數 -

f(x) = (x - 3)/|x - 3|

下面將顯示

Matlab求解極限、微積分問題

不存在。MATLAB幫助我們以兩種方式說明事實 -

  • 通過繪製函數圖並顯示不連續性。
  • 通過計算極限並顯示兩者都不同。

通過將字符串“left”和“right”作為最後一個參數傳遞給limit命令來計算左側和右側的極限。

例子

創建腳本文件並在其中鍵入以下代碼 -

f = (x - 3)/abs(x-3);ezplot(f,[-1,5])l = limit(f,x,3,'left')r = limit(f,x,3,'right')

MATLAB

執行上面示例代碼,得到以下結果 -

Matlab求解極限、微積分問題

顯示以下輸出結果 -

Trial>> Trial>> f = (x - 3)/abs(x-3); ezplot(f,[-1,5]) l = limit(f,x,3,'left') r = limit(f,x,3,'right') l = -1 r = 1

Shell

MATLAB提供用於計算符號導數的diff命令。 以最簡單的形式,將要微分的功能傳遞給diff命令作為參數。

例如,計算函數的導數的方程式 -

Matlab求解極限、微積分問題

例子

創建腳本文件並在其中鍵入以下代碼 -

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

MATLAB

執行上面示例代碼,得到以下結果 -

Trial>> syms t f = 3*t^2 + 2*t^(-2); diff(f) ans = 6*t - 4/t^3

Shell

以下是使用Octave 計算的寫法 -

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

MATLAB

執行上面示例代碼,得到以下結果 -

ans = 6*t - 4/t^3

Shell

基本微分規則的驗證

下面簡要說明微分規則的各種方程或規則,並驗證這些規則。 為此,我們將寫一個第一階導數f'(x)和二階導數f“(x)。

以下是微分的規則 -

規則 - 1

對於任何函數f和g,任何實數a和b是函數的導數:

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

規則 - 2

sum和subtraction規則表述為:如果f和g是兩個函數,則f'和g'分別是它們的導數,如下 -

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

規則 - 3

product規則表述為:如果f和g是兩個函數,則f'和g'分別是它們的導數,如下 -

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

規則 - 4

quotient規則表明,如果f和g是兩個函數,則f'和g'分別是它們的導數,那麼 -

Matlab求解極限、微積分問題

規則 - 5

多項式或基本次冪規則表述為:如果y = f(x)= x^n,則 -

Matlab求解極限、微積分問題

這個規則的直接結果是任何常數的導數為零,即如果y = k,那麼為任何常數 -

f' = 0

規則 - 5

chain規則表述為 - 相對於x的函數h(x)= f(g(x))的函數的導數是 -

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

MATLAB

例子

創建腳本文件並在其中鍵入以下代碼 -

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)^17der5 = 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

Shell

以下是對上面示例的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)

MATLAB

指數,對數和三角函數的導數

下表提供了常用指數,對數和三角函數的導數,

Matlab求解極限、微積分問題

例子

創建腳本文件並在其中鍵入以下代碼 -

syms x y = exp(x)diff(y)y = x^9diff(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)^2diff(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

Shell

以下代碼是上面代碼的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)

Shell

計算高階導數

要計算函數f的較高導數,可使用diff(f,n)。

計算函數的二階導數公式為 -

Matlab求解極限、微積分問題

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

MATLAB

MATLAB執行上面代碼將返回以下結果 -

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

Shell

以下是使用Octave重寫上面示例,代碼如下 -

pkg load symbolic symbols x = sym("x");f = x*Exp(-3*x);differentiate(f, x, 2)

MATLAB

例子

在這個例子中,要解決一個問題。由給定函數y = f(x)= 3sin(x)+ 7cos(5x),來找出方程f“+ f = -5cos(2x)是否成立。

創建腳本文件並在其中鍵入以下代碼 -

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

MATLAB

運行文件時,會顯示以下結果 -

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

Shell

以上是上面示例的Octave寫法 -

pkg load symbolic symbols x = sym("x");y = 3*Sin(x)+7*Cos(5*x); % defining the functionlhs = differentiate(y, x, 2) + y; %evaluting the lhs of the equationrhs = -5*Cos(2*x); %rhs of the equationif(lhs == rhs) disp('Yes, the equation holds true');else disp('No, the equation does not hold true');enddisp('Value of LHS is: '), disp(lhs);

MATLAB

查找曲線的最大和最小值

如果正在搜索圖形的局部最大值和最小值,基本上是在特定地點的函數圖上或符號變量的特定值範圍內查找最高點或最低點。

對於函數y = f(x),圖形具有零斜率的圖上的點稱為固定點。 換句話說,固定點是f'(x)= 0。

要找到微分的函數的固定點,需要將導數設置為零並求解方程。

示例

要找到函數f(x)= 2x3 + 3x2 - 12x + 17的固定點

可參考以下步驟 -

首先輸入函數並繪製圖,代碼如下 -

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

MATLAB

執行上面示例代碼,得到以下結果 -

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

MATLAB

我們的目標是在圖上找到一些局部最大值和最小值,假設要找到圖中間隔在[-2,2]的局部最大值和最小值。參考以下示例代碼 -

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

MATLAB

執行上面示例代碼,得到以下結果 -

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

MATLAB

接下來,需要計算導數。

g = diff(y)

MATLAB

MATLAB執行代碼並返回以下結果 -

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

Shell

以下是上面示例的Octave寫法 -

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

MATLAB

接下來求解導數函數g,得到它變為零的值。

s = solve(g)

MATLAB

MATLAB執行代碼並返回以下結果 -

s = 1 -2

Shell

以下是上面示例的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])

MATLAB

這與我們設想情節一致。 因此,要評估臨界點x = 1,-2處的函數f。可以使用subs命令替換符號函數中的值。

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

MATLAB

MATLAB執行代碼並返回以下結果 -

ans = 10 ans = 37

Shell

以下是上面示例的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)

MATLAB

因此,在間隔[-2,2]中函數f(x)= 2x^3 + 3x^2 - 12x + 17的最小值和最大值分別為10和37。

求解微分方程

MATLAB提供了用於求解微分方程的dsolve命令。

找到單個方程的解的最基本的dsolve命令形式是 -

dsolve('eqn')

MATLAB

其中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)

Shell

再來一個二階微分方程的例子:y“-y = 0,y(0)= -1,y'(0)= 2。

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

MATLAB

MATLAB執行代碼並返回以下結果 -

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

Shell


分享到:


相關文章: