MATLAB 之 符号微积分计算

这里写目录标题

  • 一、符号微积分
    • 1. 符号极限
    • 2. 符号导数
    • 3. 符号积分
      • 3.1 符号函数的不定积分
      • 3.2 符号函数的定积分

一、符号微积分

  • 微积分的数值计算方法只能求出以数值表示的近似解,而无法得到以函数形式表示的解析解。
  • 在 MATLAB 中,可以通过符号运算获得微积分的解析解。

1. 符号极限

  • MATLAB 中求函数极限的函数是 limit,可用来求函数在指定点的极限值和左右极限值。
  • 对于极限值为没有定义的极限,MATLAB 给出的结果为 NaN,极限值为无穷大时,MATLAB 给出的结果为 Inf。limit 函数的调用格式如下。
  • (1) limit(f,x,a):求符号函数 f ( x ) f(x) f(x) 的极限值 lim ⁡ x → a f ( x ) \lim_{x \to a}f(x) xalimf(x)
  • 即计算当变量 x x x 趋近于常数 a a a 时, f ( x ) f(x) f(x) 函数的极限值。
  • (2) limit(f,a):求符号函数 f ( x ) f(x) f(x) 的极限值。由于没有指定符号函数 f ( x ) f(x) f(x)的自变量,则使用该格式时,符号函数 f ( x ) f(x) f(x) 的变量为函数 symvar(f) 确定的默认自变量,即变量 x x x 趋近于 ∞ \infty
  • (3) limit(f):求符号函数 f ( x ) f(x) f(x) 的极限值。符号函数 f ( x ) f(x) f(x) 的变量为函数 symvar(f) 确定的默认变量;没有指定变量的目标值时,系统默认变量趋近于 0,即 a = 0 a=0 a=0 的情况。
  • (4) limit(f,x,a,'right'):求符号函数 f ( x ) f(x) f(x) 的极限值 lim ⁡ x → a + \lim_{x \to a^{+} } xa+lim
  • ‘right’ 表示变量 x x x 从右边趋近于 a a a
  • (5) limit(f;x,a,'lef'):求符号函数 f ( x ) f(x) f(x) 的极限值 lim ⁡ x → a − \lim_{x \to a^{-} } xalim
  • ‘left’ 表示变量 x x x 从左边趋近于 a a a
  • 例如,我们求下列极限。
  • (1) lim ⁡ x → a x m − a m x − a \lim_{x \to a}\frac{\sqrt[m]{x}-\sqrt[m]{a}}{x-a} xalimxamx ma
  • (2) lim ⁡ x → 0 sin ⁡ ( a + x ) − s i n ( a − x ) x \lim_{x \to 0}\frac{\sin (a+x)-sin(a-x)}{x} x0limxsin(a+x)sin(ax)
  • (3) lim ⁡ x → + ∞ x ( x 2 + 1 − x ) \lim_{x \to +\infty }x(\sqrt{x^{2}+1}-x ) x+limx(x2+1 x)
  • (4) lim ⁡ x → a + x − a + x − a x 2 − a 2 \lim_{x \to a^{+}}\frac{\sqrt{x}-\sqrt{a}+\sqrt{x-a}}{\sqrt{x^{2}-a^{2}}} xa+limx2a2 x a +xa
  • 程序如下:
>> syms a m x;
>> f=(x^(1/m)-a^(1/m))/(x-a);
>> limit(f,x,a)  			%求极限(1)
 
ans =
 
a^(1/m - 1)/m
 
>> f=(sin(a+x)-sin(a-x))/x;
>> limit(f)					%求极限(2)
 
ans =
 
2*cos(a)
 
>> f=x*(sqrt(x^2+1)-x);
>> limit(f,x,inf,'left')	%求极限(3)
 
ans =
 
1/2
 
>> f=(sqrt(x)-sqrt(a)+sqrt(x-a))/sqrt(x^{2}-a^{2});
>> limit(f,x,a,'right')		%求极限(4)
 
ans =
 
1/(2*a)^(1/2)
 

2. 符号导数

  • diff 函数用于对符号表达式求导数,其调用格式如下。
  • (1) diff(s):没有指定变量和导数阶数,则系统按 symvar 函数指示的默认变量对符号表达式 s s s 求一阶导数。
  • (2) diff(s,'v'):以 v v v 为自变量,对符号表达式 s s s 求一阶导数。
  • (3) diff(s,n):按 symvar 函数指示的默认变量对符号表达式 s s s n n n 阶导数, n n n 为正整数。
  • (4) dif(s,'v',n):以 v v v 为自变量,对符号表达式 s s s n n n 阶导数。
  • 例如,我们求下列函数的导数。
  • (1) y = 1 + e x y=\sqrt{1+e^{x} } y=1+ex ,求 y ′ y' y
  • (2) y = x cos ⁡ x y=x\cos x y=xcosx,求 y ′ ′ y'' y′′ y ′ ′ ′ y''' y′′′
  • (3) { x = a cos ⁡ t y = b sin ⁡ t \left\{\begin{matrix}x=a\cos t \\y=b\sin t \end{matrix}\right. {x=acosty=bsint,求 y x ′ y'_{x} yx y y ′ y'_{y} yy
  • (4) z = x e y y 2 z=\frac{xe^{y}}{y^{2}} z=y2xey,求 z x ′ z'_{x} zx z y ′ z'_{y} zy
  • (5) z = f ( x , y ) z=f(x,y) z=f(x,y) 由方程 x 2 + y 2 + z 2 = a 2 定义, x^{2}+y^{2}+z^{2}=a^{2} 定义, x2+y2+z2=a2定义, z x ′ z'_{x} zx z y ′ z'_{y} zy
  • 程序如下:
>> syms a b t x y z;
>> f=sqrt(1+exp(x));
>> diff(f)					%求(1)。未指定求导变量和阶数。按默认规则处理
 
ans =
 
exp(x)/(2*(exp(x) + 1)^(1/2))
 
>> f=x*cos(x);
>> diff(f,x,2)				%求(2)。求f对x的二阶导数
 
ans =
 
- 2*sin(x) - x*cos(x)
 
>> diff(f,x,3)				%求(2)。求f对x的三阶导数
 
ans =
 
x*sin(x) - 3*cos(x)
 
>> f1=a*cos(t);
>> f2=b*sin(t);
>> diff(f2)/diff(f1)		%求(3)。按照参数方程求导公式求y对x的导数
 
ans =
 
-(b*cos(t))/(a*sin(t))
 
>> (diff(f1)*diff(f2,2)-diff(f1,2)*diff(f2))/(diff(f1))^3		%求(3)。按照参数方程求导公式求y对x的二阶导数
 
ans =
 
-(a*b*cos(t)^2 + a*b*sin(t)^2)/(a^3*sin(t)^3)
 
>> f=x*exp(y)*y^2;
>> diff(f,x)				%求(4)。求z对x的偏导数
 
ans =
 
y^2*exp(y)
 
>> diff(f,y)				%求(4)。求z对y的偏导数
 
ans =
 
2*x*y*exp(y) + x*y^2*exp(y)
 
>> f=x^2+y^2+z^2-a^2;
>> zx=-diff(f,x)/diff(f,z)		%求(5)。
 
zx =
 
-x/z
 
>> zy=-diff(f,y)/diff(f,z)		%求(5)。
 
zy =
 
-y/z
 
  • 第 5 小题是一个隐函数 f ( x 1 , x 2 , x 3 , ⋯   , x n ) f(x_{1},x_{2},x_{3},\cdots ,x_{n}) f(x1,x2,x3,,xn) 自变量求偏导数的例子,可以通过以下公式求得: ∂ x i ∂ x j = − ∂ ∂ x j f ( x 1 , x 2 , x 3 , ⋯   , x n ) ∂ ∂ x i f ( x 1 , x 2 , x 3 , ⋯   , x n ) \frac{\partial x_{i}}{\partial x_{j}}=-\frac{\frac{\partial}{\partial x_{j}}f(x_{1},x_{2},x_{3},\cdots ,x_{n})}{\frac{\partial }{\partial x_{i}} f(x_{1},x_{2},x_{3},\cdots ,x_{n})} xjxi=xif(x1,x2,x3,,xn)xjf(x1,x2,x3,,xn)
  • 例如,我们求在曲线 y = x 3 + 3 x − 2 y=x^{3}+3x-2 y=x3+3x2 上哪一点的切线与直线 y = 4 x − 1 y=4x-1 y=4x1 平行。
  • 依题意,就是求曲线在哪一点的导数值为 4。程序如下:
>> x=sym('x');
>> y=x^3+3*x-2;		%定义曲线函数
>> f=diff(y);		%对曲线求导数
>> g=f-4;
>> solve(g)			%求方程f-4=0的根
 
ans =
 
-3^(1/2)/3
 3^(1/2)/3
 
  • 结果表明,在 x = 3 3 x=\frac{\sqrt{3} }{3} x=33 x = − 3 3 x=-\frac{\sqrt{3} }{3} x=33 处的切线和指定直线平行。

3. 符号积分

  • 不管被积函数的形式如何,复杂程度怎样,采用数值积分法总可以求得以恶搞结果,尽管这种结果大部分情况下是近似的,但数值方法不能获得解析解,符号积分方法可以获得积分的解析结果。

3.1 符号函数的不定积分

  • 在 MATLAB 中,int 函数用于求符号函数的不定积分,有以下两种调用格式。
  • (1) int(f):没有指定积分变量和积分阶数时,系统按 symvar 函数指示的默认变量对被积函数或符号表达式f求不定积分。
  • (2) int(f,v):以 v v v 为自变量,对被积函数或符号表达式 f f f 求不定积分。
  • 例如,我们求下列不定积分。
  • (1) ∫ ( 3 − x 2 ) 3 d x \int (3-x^{2})^{3}\mathrm{d}x (3x2)3dx
  • (2) ∫ sin ⁡ 2 x d x \int \sin^{2} x\mathrm{d}x sin2xdx
  • (3) ∫ e α t d x \int e^{\alpha t}\mathrm{d}x eαtdx
  • (4) ∫ 5 x t 1 + x 2 d x \int \frac{5xt}{1+x^{2}} \mathrm{d}x 1+x25xtdx
  • 程序如下:
>> x=sym('x');
>> f=(3-x^2)^3;
>> int(f)		%求(1)
 
ans =
 
- x^7/7 + (9*x^5)/5 - 9*x^3 + 27*x
 
>> f=sin(x)^2;
>> int(f)		%求(2)
 
ans =
 
x/2 - sin(2*x)/4
 
>> syms alpha t;
>> f=exp(alpha*t);
>> int(f)		%求(3)
 
ans =
 
exp(alpha*t)/alpha
 
>> f=5*x*t/(1+x^2);
>> int(f,t)		%求(4)
 
ans =
 
(5*t^2*x)/(2*(x^2 + 1))
 

3.2 符号函数的定积分

  • 在 MATLAB 中,求符号函数的定积分也是使用 int 函数,其调用格式如下:
	int(f,v,a,b)
  • 其中, a 、 b a、b ab 分别表示定积分的下限和上限。该函数求被积函数 f f f 在区间 [ a , b ] [a, b] [a,b] 上的定积分。 a a a b b b 可以是两个具体的数,也可以是一个符号表达式,还可以是无穷(inf)。
  • 当函数 f f f 关于变量 x x x 在闭区间 [ a , b ] [a, b] [a,b] 上可积时,函数返回一个定积分结果。
  • a 、 b a、b ab 中有一个是 inf 时,函数返回一个广义积分。
  • a 、 b a、b ab 中有一个符号表达式时,函数返回一个符号函数。
  • 例如,我们求下列定积分。
  • (1) ∫ 1 2 ∣ 1 − x ∣ d x \int_{1}^{2} \left | 1-x \right | \mathrm{d}x 121xdx
  • (2) ∫ − ∞ + ∞ 1 1 + x 2 d x \int_{-\infty }^{+\infty}\frac{1}{1+x^{2}} \mathrm{d}x +1+x21dx
  • (3) ∫ 2 3 x 3 ( x − 1 ) 10 d x \int_{2}^{3}\frac{x^{3}}{(x-1)^{10}} \mathrm{d}x 23(x1)10x3dx
  • (4) ∫ 2 sin ⁡ x 4 x t d t \int_{2}^{\sin x}\frac{4x}{t} \mathrm{d}t 2sinxt4xdt
  • 程序如下:
>> x=sym('x');
>> t=sym('t');
>> int(abs(1-x),1,2)		%求(1)
 
ans =
 
1/2
 
>> f=1/(1+x^2);
>> int(f,-inf,+inf)			%求(2)
 
ans =
 
pi
 
>> f=x^3/(x-1)^{10};
>> I=int(f,2,3)				%求(3)
 
I =
 
138535/129024
 
>> double(I)				%将上述符号结果转换为数值

ans =

    1.0737

>> int(4*x/t,t,2,sin(x))	%求(4)
 
ans =
 
4*x*(log(sin(x)) - log(2))
 

你可能感兴趣的:(MATLAB,matlab,数学建模,开发语言)