微积分

微积分是大学数学学习的基本内容。利用MATLAB的符号数学工具箱和Python的SymPy包,可以求解极限、导数、微分、积分、级数和微分方程等方面的问题。[大谦MATLAB,dqmatlab点com]

18.1.1 复合函数运算

下面将和复合到一个函数中,指定x和y为它们的独立变量,复合函数的自变量为x。

【MATLAB】

MATLAB中可以用compose函数进行复合函数运算,syms命令将x和y设置为符号变量。在命令窗口键入下面的命令行:

code.matlab
>> syms x y;
>> f=1/sin(x);
>> g=tan(y);
>> compose(f,g,x)
ans=
1/sin(tan(x))

现在g函数被复合到f函数中,并且设置复合函数的自变量为x。

【Python】

Python中使用SymPy包的subs函数进行复合函数运算。用Symbol函数将x和y分别设置为符号变量,也可以用symbols函数一次性将x和y设置为符号变量。

code.python
>>> import sympy as sp
>>> x=sp.Symbol('x')
>>> y=sp.Symbol('y')    #x,y=sp.symbols('x,y')
>>> f=1/sp.sin(x)
>>> g=sp.tan(y)
>>> f.subs(x,g).subs(y,x)
1/sin(tan(x))

极限

MATLAB和Python的SymPy包都有limit函数求取函数的极限。下面结合几个实例介绍用MATLAB和Python求极限的方法。

求极限。

【MATLAB】

在命令窗口键入下面的命令行:

code.matlab
>> syms x;
>> limit((x-2)/(x^2-4),2)
ans=
1/4

求得函数当自变量x趋于2时极限为1/4。

【Python】

在Python IDLE Shell窗口键入下面的命令行:

code.python
>>> import sympy as sp
>>> x=sp.Symbol('x')
>>> f=(x-2)/(x**2-4)
>>> sp.limit(f,x,2)
1/4

求得函数当自变量x趋于2时极限为1/4。

求极限。

【MATLAB】

在命令窗口键入下面的命令行:

code.matlab
>> syms x;
>> limit(1/x,x,0,'left')
ans=
-inf

求得极限为负无穷。

【Python】

在Python IDLE Shell窗口键入下面的命令行:

code.python
>>> import sympy as sp
>>> x=sp.Symbol('x')
>>> sp.limit(1/x,x,0)
oo

求得极限为无穷。

求极限。

【MATLAB】

在命令窗口键入下面的命令行:

code.matlab
>> syms x;
>> f=(3*x-8)/(7*x+1);
>> limit(f,x,inf)
ans =
3/7

求得极限为3/7。

【Python】

在Python IDLE Shell窗口键入下面的命令行:

code.python
>>> import sympy as sp
>>> x=sp.Symbol('x')
>>> f=(3*x-8)/(7*x+1)
>>> sp.limit(f,x,sp.oo)
3/7

求得极限为3/7。

18.1.3 求函数的导数

MATLAB和Python的SymPy包都有diff函数求取函数的导数。下面结合几个实例介绍用MATLAB和Python求导数的方法。

求函数的导数。

【MATLAB】

在命令窗口键入下面的命令行:

code.matlab
>> syms x;
>> f=(x-1)^3/(x+1);
>> B=diff(f)
B =
(3*(x - 1)^2)/(x + 1) - (x - 1)^3/(x + 1)^2

用simplify函数对diff函数的结果进行化简。

code.matlab
>> simplify(B)
ans =
 (2*(x - 1)^2*(x + 2))/(x + 1)^2

【Python】

在Python IDLE Shell窗口键入下面的命令行:

code.python
>>> import sympy as sp
>>> x=sp.Symbol('x')
>>> f=(x-1)**3/(x+1)
>>> b=sp.diff(f,x)

用simplify函数对diff函数的结果进行化简。

code.python
>>> sp.simplify(b)
2*(x**3 - 3*x + 2)/(x**2 + 2*x + 1)

求函数的2阶导数。

【MATLAB】

在命令窗口键入下面的命令行,指定diff函数的第2个参数的值为2,表示求2阶导数。用simplify函数进行化简:

code.matlab
>> syms x;
>> f=(x-1)^3/(x+1);
>> B=diff(f,2)
B=
(3*(2*x - 2))/(x + 1) - (6*(x - 1)^2)/(x + 1)^2 + (2*(x - 1)^3)/(x + 1)^3
>> simplify(B)
ans =
(2*(x^3 + 3*x^2 + 3*x - 7))/(x + 1)^3

【Python】

在Python IDLE Shell窗口键入下面的命令行,指定diff函数的第3个参数的值为2,表示求2阶导数。用simplify函数对求导结果进行化简:

code.python
>>> import sympy as sp
>>> x=sp.Symbol('x')
>>> f=(x-1)**3/(x+1)
>>> b=sp.diff(f,x,2)
>>> b
2*(x - 1)*((x - 1)**2/(x + 1)**2 - 3*(x - 1)/(x + 1) + 3)/(x + 1)
>>> sp.simplify(b)
2*(x**3 + 3*x**2 + 3*x - 7)/(x**3 + 3*x**2 + 3*x + 1)

18.1.4 求隐函数的导数

对于隐函数F(x,y)=0,导数为

求隐函数

所确定的导数。

【MATLAB】

在Python命令窗口键入下面的命令行:

code.matlab
>> syms x y;
>> f=x-y+1/2*sin(y);
>> fx=diff(f,x);
>> fy=diff(f,y);
>> dv=-fx/fy;
>> simplify(dv)
ans=
        -2/(cos(y) - 2)

【Python】

在Python IDLE Shell窗口键入下面的命令行:

code.python
>>> import sympy as sp
>>> x,y=sp.symbols('x,y')
>>> f=x-y+1/2*sp.sin(y)
>>> fx=sp.diff(f,x)
>>> fy=sp.diff(f,y)
>>> dv=-fx/fy
>>> dv
-1/(0.5*cos(y) - 1)

求隐函数

所确定的导数。

【MATLAB】

在命令窗口键入下面的命令行:

code.matlab
>> syms x y;
>> f=x*x/16+y*y/9-1;
>> fx=diff(f,x);
>> fy=diff(f,y);
>> dv=-fx/fy;
>> simplify(dv)
ans =
     -(9*x)/(16*y)

【Python】

在Python IDLE Shell窗口键入下面的命令行:

code.python
>>> import sympy as sp
>>> x,y=sp.symbols('x,y')
>>> f=x*x/16+y*y/9-1
>>> fx=sp.diff(f,x)
>>> fy=sp.diff(f,y)
>>> dv=-fx/fy
>>> dv
-9*x/(16*y)

求参数方程确定的函数的导数

对于参数方程

导数为

求椭圆的参数方程

所确定的导数。

【MATLAB】

在命令窗口键入下面的命令行:

code.matlab
>> syms t a b;
>> fx=a*cos(t);
>> fy=b*sin(t);
>> xt=diff(fx,t);
>> yt=diff(fy,t);
>> dv=yt/xt
dv =
    -(b*cos(t))/(a*sin(t))

【Python】

在Python IDLE Shell窗口键入下面的命令行:

code.python
>>> import sympy as sp
>>> t,a,b=sp.symbols('t,a,b')
>>> fx=a*sp.cos(t)
>>> fy=b*sp.sin(t)
>>> xt=sp.diff(fx,t)
>>> yt=sp.diff(fy,t)
>>> dv=yt/xt
>>> dv
-b*cos(t)/(a*sin(t))

不定积分

MATLAB和Python的SymPy包都提供了相应的函数求不定积分。下面结合两个实例进行介绍。

求不定积分。

【MATLAB】

MATLAB中用int函数计算不定积分。在命令窗口键入下面的命令行:

code.matlab
>> syms x n
>> int(x^n)

code.matlab
>> syms x n
>> int(x^n,x)
ans=
piecewise([n == -1, log(x)], [n ~= -1, x^(n + 1)/(n + 1)])

计算结果用分段函数表示,n等于-1时取x的对数;n不等于-1时取x^(n + 1)/(n + 1)。

【Python】

Python中用integrate函数计算不定积分。在Python IDLE Shell窗口键入下面的命令行:

code.python
>>> import sympy as sp
>>> x,n=sp.symbols('x,n')
>>> sp.integrate(x**n,x)
Piecewise((x**(n + 1)/(n + 1), Ne(n, -1)), (log(x), True))

求不定积分。

【MATLAB】

在命令窗口键入下面的命令行:

code.matlab
>> syms x
>> int(1/(1+x^2))
ans=
atan(x)

【Python】

在Python IDLE Shell窗口键入下面的命令行:

code.python
>>> x=sp.Symbol('x')
>>> sp.integrate(1/(1+x**2))
atan(x)

定积分

MATLAB和Python的SymPy包都提供了相应的函数求定积分,求定积分需要指定变量的积分下限和积分上限。下面结合两个实例进行介绍。

求定积分。

【MATLAB】

MATLAB用int函数求定积分,用该函数的第2个参数指定变量的积分下限,用第3个参数指定变量的积分上限。

在命令窗口键入下面的命令行:

code.matlab
>> syms x
>> int(x^7,0,1)
ans=
    1/8

计算结果为1/8。

【Python】

Python中用integrate函数求定积分。在Python IDLE Shell窗口键入下面的命令行:

code.python
>>> import sympy as sp
>>> x=sp.Symbol('x')
>>> sp.integrate(x**7,(x,0,1))
1/8

求定积分。

【MATLAB】

在命令窗口键入下面的命令行:

code.matlab
>> syms x
>> int(1/x,1,2)
ans=
    log(2)

【Python】

在Python IDLE Shell窗口键入下面的命令行:

code.python
>>> import sympy as sp
>>> x=sp.Symbol('x')
>>> sp.integrate(1/x,(x,1,2))
log(2)