官术网_书友最值得收藏!

1.4 符號微積分

這一節討論一些微積分符號計算,先從級數計算開始。symsum() 函數實現符號表達求和。比如,求解如下級數之和:

如下代碼實現求和運算:

syms n
sum_1 = symsum(1/2^n,n,0,Inf)

% sum_1 =
% 2

再如求解下列級數之和:

具體代碼如下:

syms n
sum_2 = symsum((-1)^(n-1)/n,n,1,Inf)

% sum_2 =
% log(2)

和symsum() 函數類似的還有symprod()。symprod() 可求解級數乘積。MATLAB幫助文檔提供了兩個例子:

對應代碼如下:

syms k
P1 = symprod(1 - 1/k^2, k, 2, Inf)
% P1 = 1/2
P2 = symprod(k^2/(k^2 - 1), k, 2, Inf)
% P1 = 2

在叢書第一冊數學部分使用過limit() 求解極限,本節再簡單介紹一下。表1.5總結了limit() 函數求解極限的典型情況。

表1.5 limit() 求解極限

下列代碼實現了表1.5中的一部分極限運算:

syms x
f1 = sin(x)/x;
limit(f1,x,0)
% ans =
% 1

f2 = 1/x;

limit(f2,x,Inf)
% ans =
% 0

limit(f2,x,0,'right')
% ans =
% Inf

limit(f2,x,0,'left')
% ans =
% -Inf

叢書前文經常使用泰勒展開函數taylor(),下面展開講解下這個函數。該函數默認前五階展開,默認展開點為0,比如以下三個例子:

syms x
T1 = taylor(exp(x))
% T1 =
% x^5/120 + x^4/24 + x^3/6 + x^2/2 + x + 1
%
T2 = taylor(sin(x))
% T2 =
% x^5/120 - x^3/6 + x
%
T3 = taylor(cos(x))
% T3 =
% x^4/24 - x^2/2 + 1

通過'ExpansionPoint' 可修改taylor() 展開點,而用'Order'則可修改taylor() 展開階數。

syms x
T1 = taylor(exp(x), x, , 1, 'Order', 9)

T2 = taylor(sin(x), x, 'ExpansionPoint', 1, 'Order', 9)

T3 = taylor(cos(x), x, 'ExpansionPoint', 1, 'Order', 9)

taylor() 還可以對多元函數進行泰勒展開,比如以下二元函數的例子:

syms x y
f = x^2 + y^2 + x*y;
T = taylor(f, [x, y], [1, 1], 'Order', 4)

% T =
% 3*x + 3*y + (x - 1)*(y - 1) + (x - 1)^2 + (y - 1)^2 – 3

叢書前文還經常用到diff()函數,這個函數用于求解符號微分式。這里也展開介紹一下diff(),比如下例:

如下代碼獲得上式結果。

syms f(x)
f(x) = sin(x^2);
df = diff(f,x)
% df(x) =
% 2*x*cos(x^2)

x = 2時,fx)的一階導數值計算如下:

syms f(x)
format long
f(x) = sin(x^2);
df = diff(f,x);

df_x2 = df(2)
% df_x2 =
% 4*cos(4)

double(df_x2)
% -2.614574483454448
eval(df_x2)
% -2.614574483454448

diff() 還可求解不同階數導數,比如下面幾個例子。

syms f(x,t)
f(x,t) = sin(x*t^2);
diff(f(x,t),2) % diff(f,2)
% ans =
% -t^4*sin(t^2*x)

diff(f(x,t),3) % diff(f,3)
% ans =
% -t^6*cos(t^2*x)

diff(f(x,t),2,t) % diff(f,2,t)
% ans =
% 2*x*cos(t^2*x) - 4*t^2*x^2*sin(t^2*x)

diff(f(x,t),3,t) % diff(f,3,t)
% ans =
% - 8*t^3*x^3*cos(t^2*x) - 12*t*x^2*sin(t^2*x)

與diff() 函數類似的還有functionalDerivative()。

int() 函數求解符號函數的不定積分和定積分。比如,用int() 計算下列積分式的不定積分、定積分和二重積分等:

具體代碼如下:

syms f(x)
f(x) = cos(x);

indefinite_integral = int(f)
% indefinite_integral(x) =
% sin(x)

definite_integral = int(f,0,pi/3)
% definite_integral =
% 3^(1/2)/2

definite_integral2 = int(f,a,b)
% definite_integral2 =
% sin(b) - sin(a)

indefinite_integral_int = int(int(f))
% indefinite_integral_int(x) =
% -cos(x)

對于多元函數,int()可對不同變量積分,比如下例可用int()對變量xt分別積分。

具體代碼如下:

syms f(x,t)
f(x,t) = x/(1+t^2);
Fx = int(f,x)
% Fx(x, t) =
% x^2/(2*(t^2 + 1))

Ft = int(f,t)
% Ft(x, t) =
% x*atan(t)

MATLAB還有一個專門計算積分的函數integral()。注意,integral() 的輸入為函數句柄;如果函數表達式以符號表達定義,則需要用matlabFunction() 將符號表達轉換為函數句柄。

syms x
f_sym = exp(-x.^2).*log(x).^2; % Symbolic
fun = matlabFunction(f_sym);
Fx1 = integral(fun,0,Inf)
% Fx1 =
%    1.947522220295560
%%
fun2 = @(x,t) x/(1+t^2);

Fx2 = integral(@(x)fun2(x,5),0,5)
% Fx =
%    0.480769230769231

Ft = integral(@(t)fun2(t,2),0,2)
% Ft =
%    0.400000000000000

類似這樣的積分函數還有integral2() 和integral3()。

主站蜘蛛池模板: 阿瓦提县| 青铜峡市| 丰城市| 如皋市| 淄博市| 左权县| 北辰区| 淅川县| 讷河市| 永修县| 商南县| 怀仁县| 临西县| 宜春市| 四川省| 米林县| 山丹县| 甘泉县| 乌苏市| 南充市| 边坝县| 拉萨市| 梁平县| 金乡县| 怀集县| 精河县| 丰宁| 泾源县| 全南县| 平度市| 邯郸县| 邳州市| 手机| 偃师市| 泊头市| 博野县| 厦门市| 保康县| 五峰| 蒙阴县| 伊春市|