微积分是大学数学学习的基本内容。利用MATLAB的符号数学工具箱和Python的SymPy包,可以求解极限、导数、微分、积分、级数和微分方程等方面的问题。[大谦MATLAB,dqmatlab点com]
18.1.1 复合函数运算
下面将和复合到一个函数中,指定x和y为它们的独立变量,复合函数的自变量为x。
【MATLAB】
MATLAB中可以用compose函数进行复合函数运算,syms命令将x和y设置为符号变量。在命令窗口键入下面的命令行:
>> 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设置为符号变量。
>>> 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】
在命令窗口键入下面的命令行:
>> syms x;
>> limit((x-2)/(x^2-4),2)
ans=
1/4
求得函数当自变量x趋于2时极限为1/4。
【Python】
在Python IDLE Shell窗口键入下面的命令行:
>>> 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】
在命令窗口键入下面的命令行:
>> syms x;
>> limit(1/x,x,0,'left')
ans=
-inf
求得极限为负无穷。
【Python】
在Python IDLE Shell窗口键入下面的命令行:
>>> import sympy as sp
>>> x=sp.Symbol('x')
>>> sp.limit(1/x,x,0)
oo
求得极限为无穷。
求极限。
【MATLAB】
在命令窗口键入下面的命令行:
>> syms x;
>> f=(3*x-8)/(7*x+1);
>> limit(f,x,inf)
ans =
3/7
求得极限为3/7。
【Python】
在Python IDLE Shell窗口键入下面的命令行:
>>> 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】
在命令窗口键入下面的命令行:
>> 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函数的结果进行化简。
>> simplify(B)
ans =
(2*(x - 1)^2*(x + 2))/(x + 1)^2
【Python】
在Python IDLE Shell窗口键入下面的命令行:
>>> import sympy as sp
>>> x=sp.Symbol('x')
>>> f=(x-1)**3/(x+1)
>>> b=sp.diff(f,x)
用simplify函数对diff函数的结果进行化简。
>>> sp.simplify(b)
2*(x**3 - 3*x + 2)/(x**2 + 2*x + 1)
求函数的2阶导数。
【MATLAB】
在命令窗口键入下面的命令行,指定diff函数的第2个参数的值为2,表示求2阶导数。用simplify函数进行化简:
>> 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函数对求导结果进行化简:
>>> 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命令窗口键入下面的命令行:
>> 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窗口键入下面的命令行:
>>> 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】
在命令窗口键入下面的命令行:
>> 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窗口键入下面的命令行:
>>> 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】
在命令窗口键入下面的命令行:
>> 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窗口键入下面的命令行:
>>> 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函数计算不定积分。在命令窗口键入下面的命令行:
>> syms x n
>> int(x^n)
或
>> 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窗口键入下面的命令行:
>>> 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】
在命令窗口键入下面的命令行:
>> syms x
>> int(1/(1+x^2))
ans=
atan(x)
【Python】
在Python IDLE Shell窗口键入下面的命令行:
>>> x=sp.Symbol('x')
>>> sp.integrate(1/(1+x**2))
atan(x)
定积分
MATLAB和Python的SymPy包都提供了相应的函数求定积分,求定积分需要指定变量的积分下限和积分上限。下面结合两个实例进行介绍。
求定积分。
【MATLAB】
MATLAB用int函数求定积分,用该函数的第2个参数指定变量的积分下限,用第3个参数指定变量的积分上限。
在命令窗口键入下面的命令行:
>> syms x
>> int(x^7,0,1)
ans=
1/8
计算结果为1/8。
【Python】
Python中用integrate函数求定积分。在Python IDLE Shell窗口键入下面的命令行:
>>> import sympy as sp
>>> x=sp.Symbol('x')
>>> sp.integrate(x**7,(x,0,1))
1/8
求定积分。
【MATLAB】
在命令窗口键入下面的命令行:
>> syms x
>> int(1/x,1,2)
ans=
log(2)
【Python】
在Python IDLE Shell窗口键入下面的命令行:
>>> import sympy as sp
>>> x=sp.Symbol('x')
>>> sp.integrate(1/x,(x,1,2))
log(2)