高数 公式推导 高数不定积分分 偏导 卡氏第二定理 matlab

纠纷处理 (9:00-18:00)
图书审核 (9:00-18:00)
抱歉,您要找的页面不存在。更多相关文档对f(x,y)的x y二阶偏导数求dx不定积分是不是等于一阶偏导【数学吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:440,806贴子:
对f(x,y)的x y二阶偏导数求dx不定积分是不是等于一阶偏导收藏
相当于把那个(偏导数x)消除了,这样可以吗?结果剩下对y的偏导数f函数是连续
你不定积分求完还的加个常数c 不一定等于你从原函数直接求的对y的偏导
你不定积分求完还得加个常数c 不一定等于你从原函数直接求的对y的偏导
登录百度帐号第二章微积分运算微积分是数学学习的重点和难点之一, 而微积分运算是 Maple 最为拿手的计算之一, 任何解析函数, Maple 都可以求出它的导数来, 任何理论上可以计算的积分, Maple 都可 以毫不费力的将它计算出来. 随着作为数学符号计算平台的 Maple 的不断开发和研究, 越来越多的应用程序也在不断地创设.1 函数的极限和连续1.1 函数和表达式的极限在 Maple 中, 利用函数 limit 计算函数和表达式的极限. 如果要写出数学表达式, 则 用惰性函数 Limit. 若 a 可为任意实数或无穷大时, 求 lim f ( x ) 命令格式为: limit(f,x=a);x→af ( x) 时的命令格式为 limit(f, x=a, right); 求 lim? f ( x) 时的命令格式为 limit(f, 求 lim +x→a x→ax=a, left); 请看下述例子: & Limit((1+1/x)^x,x=infinity)=limit((1+1/x)^x,x=infinity);x1 1+ ? lim ? ? ? =e ? x? x→∞ ? ?& Limit((x^n-1)/(x-1),x=1)=limit((x^n-1)/(x-1),x=1);x→1limxn ? 1 =n x?1& Limit(x^x,x=0,right)=limit(x^x,x=0,right);x → 0+lim x x = 1& Limit(abs(x)/x,x=0,left)=limit(abs(x)/x,x=0,left);x = -1 x → 0- x & Limit(abs(x)/x,x=0,right)=limit(abs(x)/x,x=0,right); x lim =1 x → 0+ x lim- 34 - & limit(abs(x)/x,x=0);undefined对于多重极限计算, 也用limit. 命令格式为: limit(f, points, dir); 其中, points是由一 系列方程定义的极限点, dir(可选项)代表方向: left(左)、right(右)等. 例如: & limit(a*x*y-b/(x*y),{x=1,y=1});a?b& limit(x^2*(1+x)-y^2*((1-y))/(x^2+y^2),{x=0,y=0});undefined由于多重极限的复杂性,很多情况下 limit 无法找到答案,此时,不应轻易得出极 限不存在的结论,而是应该利用数学基础判定极限的存在性,然后再寻找别的可行的方 法计算极限(如化 n 重根限为 n 次极限等)。如下例就是化二重极限为二次极限而得正确 结果: & limit((sin(x+y)/(sin(x)*sin(y)),{x=Pi/4,y=Pi/4}));sin( x + y ) 1 1 ? limit? ? ? sin( x ) sin( y ) , { x = 4 π, y = 4 π } ? ? ? ? & limit(limit(sin(x+y)/(sin(x)*sin(y)),x=Pi/4),y=Pi/4);21.2 函数的连续性1.2.1 连续 在 Maple 中可以用函数 iscont 来判断一个函数或者表达式在区间上的连续性. 命令 格式为: iscont(expr, x=a..b, 'colsed'/'opened'); 其中, closed表示闭区间, 而opened表示开区间(此为系统默认状态). 如果表达式在区间上连续, iscont返回true, 否则返回false, 当iscont无法确定连续性 时返回FAIL. 另外, iscont函数假定表达式中的所有符号都是实数型. 颇为有趣的是, 当 给定区间[a,b] (a&b)时, iscont会自动按[b,a]处理. & iscont(1/x,x=1..2);true & iscont(1/x,x=-1..1,closed); false & iscont(1/(x+a),x=0..1); FAIL & iscont(ln(x),x=10..1); true1.2.2 间断 函数 discont 可以寻找函数或表达式在实数域的间断点, 当间断点周期或成对出现- 35 - 时, Maple 会利用一些辅助变量予以表达, 比如, _Zn~(任意整数)、_NZn~(任意自然数) 和 Bn~(一个二进制数, 0 或者 1), 其中 n 是序号. 判定 f(x)间断点的命令为: discont(f, x); & discont(ln(x^2-4),x);{ -2, 2 } & discont(arctan(1/2*tan(2*x))/(x^2-1),x); 1 1 { -1 , 1, π _Z1~ + π } 2 4 & discont(round(3*x-1/2),x); 1 1 { + _Z1 } 3 3函数round为“四舍五入”函数,上例并非一目了然,对其进一步理解可借助于函 数plot或下面给出的fdiscont例子。 另一个寻找间断点的函数fdiscont是用数值法寻找在实数域上的间断点. 命令格式 为: fdiscont(f, domain, res, ivar, eqns); 其中, f表示表达式或者, domain表示要求的区域, res表示要求的分辨率, ivar表示独立变 量名称, eqns表示可选方程. & fdiscont(GAMMA(x/2), x=-10..0, 0.0001);[ -10.1731 .. -9.77888 , -8.43642 .. -7.26022 , -6.69534 .. -5.66860 , -4.17892 .. -3.40650 , -2.70676 .. -1.11540 , -. .. . ]& fdiscont(arctan(1/2*tan(2*x))/(x^2-1),x=-Pi..Pi);[ -1.50305 .. -.140484 , -.299604 .. -.549426 , .463486 .. .970008 , .389716 .. 1.23409 , 2.42148 .. 2.02248 ]& fdiscont(abs(x/10000),x=-1..1,0.000001);[ ] & fdiscont(tan(10*x),x=0..Pi,0.01,newton=true);[ .489656 , .468967 , .448280 , 1.42758 , 1.40690 , 1.38644 , 2.36552 , 2.34484 , 2.32414 , 2.30346 ]& fdiscont(round(3*x-1/2),x=-1..1);[ -1.58886 .. -.187556 , -.248842 .. -.380068 , -.595187 .. -.188489 , -. .. . , .844203 .. .551751 , .179072 .. .034518 , .793524 .. 1.31275 ]- 36 - 2 导数和微分2.1 符号表达式求导利用 Maple 中的求导函数 diff 可以计算任何一个表达式的导数或偏导数, 其惰性形 式 Diff 可以给出求导表达式, $表示多重导数. 求 expr 关于变量 x1, x2, …, xn 的(偏)导数 的命令格式为: diff(expr, x1, x2, …, xn); diff(expr, [x1, x2, …, xn]); 其中, expr 为函数或表达式, x1, x2, …, xn 为变量名称. 有趣的是, 当 n 大于 1 时, diff 是以递归方式调用的: diff(f(x), x, y)=diff(diff(f(x), x), y) & Diff(ln(ln(ln(x))),x)=diff(ln(ln(ln(x))),x);? 1 ln( ln( ln( x ) ) ) = ?x x ln( x ) ln( ln( x ) ) & Diff(exp(x^2),x$3)=diff(exp(x^2),x$3);2 2 (x ) ?3 (x2 ) 3 (x ) e = 12 x e + 8 x e ?x 3& diff(x^2*y+x*y^2,x,y);2x+2y& f(x,y):=piecewise(x^2+y^2&&0,x*y/(x^2+y^2));? xy ? 2 2 f( x , y ) := ? ? x +y ? ? ? 0 ?& diff(f(x,y),x);x2 + y2 ≠ 0 otherwisey 2 x2 y ? ? 2 ? 2 ? x + y2 ? ? ( x2 + y2 ) ? ? ? 0 ? & diff(f(x,y),x,y);x2 + y2 ≠ 0 otherwise1 2 y2 2 x2 8 x2 y2 ? ? 2 ? ? + 2 2 3 ? x + y2 2 2 2 2 2 2 ? ? ( x + y ) ( x + y ) ( x + y ) ? ? ? 0 ? & normal(%);- 37 -x2 + y2 ≠ 0 otherwise 4 2 2 4 ? x ?6x y +y ?? 3 ? ? ? ( x2 + y2 ) ? ? ? 0 ?x2 + y2 ≠ 0 otherwise函数 diff 求得的结果总是一个表达式, 如果要得到一个函数形式的结果, 也就是求 导函数, 可以用 D 算子. D 算子作用于一个函数上, 得到的结果也是一个函数. 求 f 的导 数的命令格式为: D(f); 值得注意的是, f 必须是一个可以处理为函数的代数表达式, 它可以包含常数、已知 函数名称、未知函数名称、箭头操作符、算术和函数运算符. 复合函数表示为f@g, 而不是f(g), 因此D(sin(y))是错误的, 正确的应该是D(sin@y). D 运算符也可以求高阶导数, 但此时不用$, 而用两个@@. D 运算符并不局限于单变量函数, 一个带指标的 D 运算符 D[i](f)可以用来求偏导函 数, D[i](f)表示函数 f 对第 i 个变量的导函数, 而高阶导数 D[i,j](f)等价于 D[i](D[j](f)). & g:=x-&x^n*exp(sin(x));g := x → x n e& D(g);sin( x )xn n e x→ xsin( x )+ x n cos ( x ) esin( x )& Diff(g,x)(Pi/6)=D(g)(Pi/6);? 1 π ? n e ( 1/2 ) n ? ? ? ? ( 1/2 ) 1 ?1 ? ? ? g ?? 1 π ? = 6 ? 6 ? 3 e + ? π? ? ? ?x ? ?? ?6 ? ? ? ? 2 ?6 ? π ? ?? ?& D(D(sin));n?sin& (D@@2)(sin);?sin& f:=(x,y,z)-&(x/y)^(1/z);?1? ? ?z? ? ? ?x? f := ( x , y, z ) → ? ? ?y? ? ? ? & Diff(f,y)(1,1,1)=D[2](f)(1,1,1); ? ? ?( 1, 1, 1 ) = -1 ? ? ?y f ? ? ? ?D 运算符和函数 diff 的差别: 1) D 运算符计算运算符的导数, 而 diff 计算表达式的导数;- 38 - 2) D 的参数和结果是函数型运算符, 而 diff 的参数和结果是表达式; 3) 将含有导数的表达式转换为 D 运算符表达式的函数为: convert(expr,D); & f:=diff(y(x),x$2):f :=& convert(f,D);?2 y( x ) ?x 2(D& f:=D(y)(x)-a*D(z)(x);(2))( y )( x )4) 将 D(f)(x)表达式转换为 diff(f(x),x)形式的命令: convert(expr,diff,x);f := D( y )( x ) ? a D( z )( x )& convert(f,diff,x);? ? y( x ) ? ? a ? ? z( x ) ? ? ? ? ? ? ?x ? ? ?x ? ? ? ? ?D 运算符可以计算定义为程序的偏导数, 此即 Maple 自动求导功能(详细内容参看 第 6 章). 下面我们讨论在积分学当中的一个微妙的漏洞, 在大多数计算机代数系统中都会出 现这个问题,甚至于在许多教科书和积分表中这种情况也是长期存在。 & f:=1/(2+sin(x));f :=& F:=int(f,x);1 2 + sin( x )2 1? ?1 x? + 1? 3 ? 3 arctan ? 2 tan ? ? ? ? ? ?3 ? ?2 ? ? ? ? 3 ? ? ? ? ? ? & limit(F,x=Pi,right), limit(F,x=Pi,left); 1 1 ? π 3, π 3 3 3 F :=关于函数 f(x)的积分仅在一些区间上是正确的,因为 F 是不连续的,虽然由微积分 的基本定理可知当 f 连续时 F 应该是连续的。进一步的讨论 F 的不连续点: & discont(F,x);{ 2 π _Z2 + π }因此,F 在 x = nπ 处有跳跃间断点。 在对多元函数 f(x,y)求混合偏导数时,Maple 总自以为是?f ?f ,这一点在 = ?x?y ?y?xf(x,y)连续的情况下当然正确,但不连续时不正确。一个典型的例子是:- 39 - & f(x,y):=piecewise(x^2+y^2&&0,x*y*(x^2-y^2)/(x^2+y^2));2 2 ? x y (x ? y ) ? f( x , y ) := ? x2 + y2 ? ? ? ? 0 ?x2 + y2 ≠ 0 otherwise***************************** & normal(diff(f(x,y),x,y));6 4 2 2 4 6 ? x +9x y ?9x y ?y ? 3 ? 2 2 ? ? ( x + y ) ? ? ? 0 ? & normal(diff(f(x,y),y,x)); 6 4 2 2 4 6 ? x +9x y ?9x y ?y ? 3 ? ? ? ( x2 + y2 ) ? ? ? 0 ?x2 + y2 ≠ 0 otherwisex2 + y2 ≠ 0 otherwise因此,使用 Maple 进行科学计算时,一定要先运用数学理论和方法对问题进行简单 推导,然后再利用 Maple 辅助计算,切不可把所有的事情都交给 Maple,如果那样的话 会出现错误甚至是低级的错误。2.2 隐函数求导隐函数或由方程(组)确定的函数的求导, 使用命令 implicitdiff. 假定 f, f1,…,fm 为代 数表达式或者方程组, y, y1,…,yn 为变量名称或者独立变量的函数, 且 m 个方程 f1,…,fm 隐式地定义了 n 个函数 y1,…,yn, 而 u, u1,…,ur 为独立变量的名称, x, x1,…,xk 为导数变 量的名称. 则: (1) 求由 f 确定的 y 对 x 的导数: implicitdiff(f,y,x); (2) 求由 f 确定的 y 对 x1,…,xk 的偏导数: implicitdiff(f,y,x1,…,xk); (3) 计算 u 对 x 的导数, 其中 u 必须是给定的 y 函数中的某一个 implicitdiff({f1,…,fm},{y1,…,yn},u,x); (4) 计算 u 对 x1,…,xk 的偏导数 implicitdiff({f1,…,fm},{y1,…,yn},u,{x1,…xk}); (5) 计算 u 的高阶导数 implicitdiff({f1,…,fm},{y1,…,yn},{u1,…,ur}, x1,…,xk); implicitdiff(f,y,x)命令的主要功能是求隐函数方程 f 确定的 y 对 x 的导数, 因此, 输 入的 f 必须是 x 和 y 或者代数表达式的方程(其中代数表达式为 0). 第二个参数 y 指定了 非独立变量、 独立变量或常数, 如果 y 是名称, 就意味着非独立变量, 而所有其他出现在 输入的 f 和求导变量 x 中名称以及不看作是常数类型的变量, 统统视作独立变量处理.- 40 - 如果方程 f1,…,fm 是超定的, implicitdiff 返回 FAIL. 例如: & f:=exp(y)-x*y^2=x;f := e y ? x y 2 = x& implicitdiff(f,y,x);?& g:=x^2+y^3=1;y2 + 1 ?e y + 2 x yg := x 2 + y 3 = 1& implicitdiff(g,z,x);FAIL如果是对多元函数求多个偏导数, 结果将用偏微分形式给出. 可以给定最后一个可 选参数来确定结果的表达形式, 默认情况下或者给定 notation=D, 这时结果中的微分用 D 运算符表示, 否则可以给定 notation=Diff, 这样给出的结果中的微分运算符和使用 Diff 时相同, 即用 ? 来表示. 试作以下实验:? x = cos u cos v ? ? y = cos u sin v ? z = sin u ?求?2z ?x 2& f:=x=cos(u)*cos(v);f := x = cos ( u ) cos ( v ) & g:=y=cos(u)*sin(v); g := y = cos ( u ) sin( v ) & h:=z=sin(u); h := z = sin( u ) & implicitdiff ({f,g,h}, {z(x,y), u(x,y), v(x,y)}, {z}, x, x, notation=Diff); 2 sin( v ) 2 sin( u ) 2 + 1 ? sin( v ) 2 ? ?? ? ? ?? 2 z? = ? ? ? ? ? ? ?x ? ? sin( u ) 3 ?y ?? ? ? ?2.3 函数的极值2.3.1 函数的极值 极值包含两种情形:极大值和极小值。在 Maple 中, 有两个求函数极值的命令: minimize, maximize, 命令格式如下: minimize (expr, vars, range); maximize (expr, vars, range);- 41 - & expr1:=x^3-6*x+3:minimize(expr1,x=-3..3);-6maximize(expr1,x=-3..3);12 & minimize(tanh(x),x,`infinite`); -1 maximize(tanh(x),x,`infinite`); 1虽然, minimize 和 maximize 这两个命令很好用, 但对于一些特殊的函数而言, 这两 个指令不但有可能无法求得极值, 还有可能给我们错误的解. 因此, 在 Maple 下求极值 最好的方法是先作图(鼠标右键点击函数解析式选择 plots 命令即可), 由图上找出极值的 大概位置, 然后再由 Maple 提供的各种指令来求解. 下面一个例子是关于函数极大极小 值的求解问题,此处,图形提供了做题的部分思路,尤其是求驻点时: & f:=(x+2)/(3+(x^2+1)^3);f :=& plot(f,x=-10..10);x+2 3 + ( x2 + 1 )3从上图可以看出,f(x)函数从区域-2 到 4 之间有极值出现,且极大值小于 1. 为了更 清楚的了解函数图像性质, 我们在 plot 命令中加入因变量 y 的变化范围。 由此可看出 f(x) 与 x 轴有交点,且在-2 附近有一极小值: & plot(f,x=-10..10,y=-0.005..0.005);- 42 - 进一步应用导数性质求解该问题: & d:=diff(f,x);2d :=1 3 + ( x2 + 1 )3?6 ( x + 2 ) ( x2 + 1 ) x (3 + (x + 1) )2 3 2& simplify(d);??4 + 5 x 6 + 9 x 4 + 3 x 2 + 12 x 5 + 24 x 3 + 12 x ( 4 + x6 + 3 x4 + 3 x2 )2由图形可见,极值“可能”出现在 x=-2 和 x=0 附近,可用下述语句求出确切极点, 然后使用 eval 命令求出相应的极值: & xmin:=fsolve(d=0,{x=-2});xmin := { x = -2. }& xmax:=fsolve(d=0,{x=0});xmax := { x = . }& Digits:=4: & Xmin:=eval(f,xmin);Xmin := -.001302& Xmax:=eval(f,xmax);Xmax := .53602.3.2 条件极值 有时候, 我们还会遇到在条件 q ( x, y ) = 0 下计算函数 f ( x, y ) 的极大值和极小值, 这就是条件极值. 在求解时需要先构造一个函数 g ( x, y ) = f ( x, y ) + μq ( x, y ) ( μ 称为 拉格朗日乘子), 然后将 g(x,y)分别对 x 和 y 求导, 得到联立方程组, 求解方程组即可得到 函数 f ( x, y ) 的极大值和极小值. 下面求解 f ( x, y ) = x + y 在条件 q ( x, y ) = x + y + 2 x ? 2 y + 1 下的极大值和2 2 2 2极小值. & f:=x^2+y^2: & q:=x^2+y^2+2*x-2*y+1: & g:=f+mu*q;g := x 2 + y 2 + μ ( x 2 + y 2 + 2 x ? 2 y + 1 )- 43 - & exp1:=diff(g,x); exp2:=diff(g,y);exp1 := 2 x + μ ( 2 x + 2 ) exp2 := 2 y + μ ( 2 y ? 2 )& exp3:=solve({q=0,exp1,exp2},{x,y,mu});exp3 := { y = RootOf( 2 _Z 2 ? 4 _Z + 1 ), x = ?RootOf( 2 _Z 2 ? 4 _Z + 1 ), μ = 1 ? 2 RootOf( 2 _Z 2 ? 4 _Z + 1 ) }& allvalues(exp3);{y = 1 + 1 1 1 1 2 , μ = ?1 ? 2 , x = ?1 ? 2 }, { μ = ?1 + 2 , y = 1 ? 2 , x = ?1 + 2} 2 2 2 2& subs({x=-1-1/2*2^(1/2),y=1+1/2*2^(1/2)},f): & fmax:=evalf(%);fmax := 5.& subs({x=-1+1/2*2^(1/2),y=1-1/2*2^(1/2)},f): & fmin:=evalf(%);fmin := .3 积分运算3.1 不定积分Maple 有许多内建的积分算法, 一般地, 用 int 求不定积分. 命令格式为: int(expr,x); & Int(x^2*arctan(x)/(1+x^2),x)=int(x^2*arctan(x)/(1+x^2),x);? x 2 arctan( x ) 1 1 1 ? ? ln( 1 + I x ) + 1 ln( 1 ? I x ) 2 + 1 I x ln( 1 ? I x ) ? 1 ln( 1 + x 2 ) ? dx = ln( 1 + I x )2 + I ? ? ? x + I ln( 1 ? I x ) ? ? ? 1 + x2 8 2 ? 2 8 2 2 ? ? ? ?& int(x/(x^3-1),x);1 1 1 ?1 (2 x + 1) 3 ? ln( x ? 1 ) ? ln( 1 + x + x 2 ) + 3 arctan ? ? ? ? 3 6 3 ?3 ? & int(exp(-x^2),x); 1 π erf ( x ) 2 & Int(ln(x+sqrt(1+x^2)),x); ?ln( x + 1 + x 2 ) dx ? ? ? & value(%)+c;ln( x + 1 + x 2 ) x ? 1 + x 2 + c- 44 - & int(exp(-x^2)*ln(x),x);? ( ?x 2 ) ?e ln( x ) dx ? ? ?可以看出, Maple 求不定积分的结果中没有积分常数, 这一点需要注意. 但是, 这有 一定好处的, 尤其当对结果作进一步处理时, 由于 Maple 符号计算的特点, 引入积分常 数相当于引入一个变量, 对于计算极为不便. Maple 中不定积分的计算过程为: (i) 首先 , Maple 用传统方法处理一些特殊的形式 , 如多项式、有理式、形如( a + bx + cx )2n和 Q( x)( a + bx + cx )2n的 根 式 , 以 及 形 如 Pn(x) ? ln x 或P P ( x) 1 ( x) ?ln 2 的表达式; Q1 ( x) Q2 ( x)(ii) 如果传统方法难以奏效, Maple 将应用 Risch-Norman 算法, 以避免在包含三角 函数和双曲函数的积分中引入复指数和对数; (iii) 如果仍然无法得到答案, Maple 将采用 Risch 算法, 这将无法避免地在结果表达 式中引入有关积分变量的 RootOf 的表达式; (iv) 如果最终还是没有找到解析表达式, Maple 会把积分式作为结果返回.3.2 定积分定积分与不定积分的计算几乎一样, 只是多了一个表示积分区域的参数. 在[a,b]上 求 f 的定积分的命令格式为: int(f, x=a..b); & Int(1/(1+x^2),x=-1..1)=int(1/(1+x^2),x=-1..1);? 1 1 ? dx = π ? 2 ? 2 ? 1+x ? -1抛物线 y = 2 px 与 x = 2 py 所围图形的面积计算过程如下:2 21& assume(p&0); & int(sqrt(2*p*x)-x^2/(2*p),x=0..2*p);4 2 p 3Maple 中的定积分是怎样完成的呢?最简单的想法是: 按照 Newton-Leibnize 定理, 先求出被积函数的任一个原函数 , 再求其在积分限上的增量即可得定积分 . 试看下例 (其中的函数 rhs 用来获取等式右边部分―right hand side, 相应地, 左边部分为 lhs): & Int(1/x^2,x)=int(1/x^2,x);- 45 - ?1 ? dx = ? 1 ? 2 ? x ?x ? & subs(x=1,rhs(%))-subs(x=-1,rhs(%)); -2显然, 这是错误的, 在上述积分中含有一个暇点 x=0, 积分是发散的, 对此, Maple 是知道的: & Int(1/x^2,x=-1..1)=int(1/x^2,x=-1..1);? 1 ? ? 2 dx = ∞ ? ? x ? -1在大多数情况下, Maple 通过查表和形式匹配, 或者利用特殊函数的导数来求定积 分. & Int( exp(-x^2)*ln(x)^2, x=0..infinity )=int( exp(-x^2)*ln(x)^2, x=0..infinity );11 ( 5/2 ) 1 1 1 ? ( ?x 2 ) ? e ln( x ) 2 dx = + π γ2 + π γ ln( 2 ) + π ln( 2 ) 2 π ? 16 8 2 2 ? ? 0&evalf(rhs(%));∞1. &Int(sin(x)/x,x=-1..1)=int(sin(x)/x,x=-1..1);? sin( x ) ? dx = 2 Si( 1 ) ? ? x ? ? -1& evalf(rhs(%));11.& Int(sin(x^2),x=-infinity..infinity)=int(sin(x^2),x=-infinity..infinity);? sin( x 2 ) dx = 1 2 ? 2 ? ?∞& evalf(rhs(%));∞π1.在返回一个未求值的定积分的情况下, 可以对积分式调用 evalf 来获得数值积分. 命令格式为: evalf(int(f, x=a..b)); evalf(Int(f, x=a..b, Digits, flag); 其中, f 为被积函数, x 积分变量, a..b 积分区间, Digits 表示需要精度的位数, flag 指定要使- 46 - 用的数值方法的名称. 值得注意的是, 上述命令格式第一式 int 中的 i 可以大写也可以小 写(输出结果略有形式上的不同), 第二式的 I 必须大写. Maple 中默认的数值积分方法是 Clenshaw-Curitis 4 阶方法; 当收敛很慢(由于存在 奇点)时, 系统将试着用广义的级数展开和变量代换取消积分的奇异性; 如果存在不可 去奇点, 则改而采用自适应双指数方法. 在数值精度不高的情况下(比如 Digits≤15), 采 用自适应的牛顿―柯特斯方法就够了. 通过指定 evalf/int 语句的第 4 个参数, 可以选择 积分方法. 可供选择的有 3 种方法: _Ccquad -- Clenshaw-Curitis 4 阶方法 _Dexp -- 自适应双指数方法 _Ncrule -- 牛顿―柯特斯方法 & evalf(Int(1/sqrt(x),x=0..2,15,_Dexp));2.19 & evalf(Int(sin(x)/x,x=0..1,20,_NCrule)); . & evalf(Int(sin(x)*ln(x+1),x=0..1)); . & evalf(Int(sin(x)*ln(x+1),x=0..1)); .前面述及函数 value 的主要功能是对惰性函数求值, 但它与 evalf 是有区别的, 试通 过下例体会 value 与 evalf 功能的不同之处: & P:=Int(x^2*sin(sin(x)),x=0..Pi);2 P := ? ? x sin( sin( x ) ) dx ? 0 π& value(P);? x 2 sin( sin( x ) ) dx ? ? 0& evalf(P);π5.3.3 其它积分方法Maple有丰富的内建积分算法, 除了上述int命令外, 另外一些算法也非常有用. 本 节简述其中几种较为有用的算法. 3.3.1 三角和双曲积分 三角和双曲积分主要有下述几种:- 47 - Si ( x) = ∫sin t dt 0 tx x 0Ci ( x) = gamma + ln( x) + ∫ 2 sinh t S hi ( x) = ∫ 0 txSsi ( x) = Si ?πcos t ? 1 dt tChi ( x) = gamma + ln( x) + ∫cosh t ? 1 dt 0 tx上述函数在Maple中的调用格式分别为: Si(x); Ci(x); Ssi(x); Shi(x); Chi(x); 其中x为 表达式(复数). 函数Si, Ssi和Shi是完整的, 函数Ci和Chi在原点处有一个对数极点, 在负实半轴上 有一个分支截断点. & int(sin(x)/x,x=0..1);Si( 1 )& evalf(%);.& Ci(3.*I);-. ? . I& Ssi();.2& evalf(Shi(Pi));5.& evalf(Chi(3+4*I));-2. + 2. I & convert(Ci(x),Ei); 1 1 1 ? Ei ( 1, I x ) ? Ei ( 1, ?I x ) + I ( csgn ( x ) ? 1 ) csgn ( I x ) π 2 2 23.3.2 Dirac 函数和 Heaviside 阶梯函数 Dirac 函数和 Heaviside 函数主要应用于积分变换或者求解微分方程, 也可以用来表 示分段连续函数. 其定义分别如下:?0 Dirac(t ) = ? ?∞命令格式为: Dirac(t); Dirac(n,t);t≠0 t =0?0 Heaviside(t ) = ? ?1t&0 t&0# Dirac函数(t=0时为无穷大, 其余处处为0) # Dirac函数的n阶导数- 48 - Heaviside(t); #Heaviside函数(t&0时为0, t&0时为1, t=0时无意义) & Int(Dirac(t),t=-infinity..infinity)=int(Dirac(t),t=-infinity..infinity);? Dirac ( t ) dt = 1 ? ? ?∞& Int(Dirac(t),t)=int(Dirac(t),t);∞?Dirac ( t ) dt = Heaviside ( t ) ? ? & Diff(Heaviside(t),t)=diff(Heaviside(t),t); ? Heaviside ( t ) = Dirac ( t ) ?t3.3.3 指数积分 对于非负整数n, 指数积分Ei(n,x)在实部Re(x)&0上定义为:Ei (n, x) = ∫∞1e ? xt dt tn单参数的指数积分是一个Cauchy主值积分, 只对实参数x有如下定义:et Ei ( x) = PV ? ∫ dt ?∞ tx特别地, 当x&0时, 有: Ei ( x) = ? Ei (1,? x) Ei(1,x)可以解析延拓到除了0点之外的整个复平面. 对于所有的这些函数, 0是一个 分支点, 负实半轴是分支截断. 分支截断上的值要满足函数在增加参数的方向上是连续 的条件. 指数函数和不完全GAMMA函数有如下关系:Ei ( n, x ) = x n ?1GAMMA(1 ? n, x )& Ei(1,1.); #=evalf(Ei(1,1));. & simplify(Ei(1,I*x)+Ei(1,-I*x)); ?2 Ci( x ) ? I π + I π csgn( x ) & expand(Ei(5,x)); ( ?x ) 1 ( ?x ) 1 1 2 ( ?x ) 1 3 ( ?x ) 1 4 ? + ? + e xe x e x e x Ei ( 1, x ) 4 12 24 24 24 & evalf(Ei(1)); 1. & int(exp(-3*t)/t,t=-x..infinity);- 49 - Ei( 1, ?3 x ) & int(exp(-3*t)/t,t=-x..infinity,CauchyPrincipalValue); ?Ei( 3 x )上述最后两例的结果大相径庭 , 原因是在最后一例中出现了“ CauchyPrincipal Value”一选项, 这一命令的主要功能是通知int将间断点的左右极限作为极限来处理, 此 时, 独立变量按相同的速度接近间断点. 3.3.4 对数积分 对数积分Li(x)的定义为:Li ( x) = PV ? ∫ (1 / ln t )dt = Ei(ln x)0x( x ≥ 0)其中, PV-int表示Cauchy主值积分. 该函数只对实数参数 x ≥ 0 有定义, 它给出了小于或 等于x的素数的一个近似值. & Li(2002.); #对数积分在 2002.0 处的值315.0723560& nops(select(isprime, [$1..2002])); & convert(Li(x),Ei); 3.3.5 椭圆积分 所谓椭圆积分是形如 #小于或等于 2002 的实数中素数个数303#对数积分转换为指数积分Ei( ln( x ) )∫ R ( x, yab1/ 2)dx 的积分, 其中R是一个有理数, y是3次或4次多项式, 这是椭圆积分的代数形式. 除此之外还有三角形式、双曲三角等形式. 椭圆积分可以用初等函数项和椭圆函数项, 如EllipticF, EllipticE和EllipticPi表示成 它们的Legendre标准形式. & ans:=int(sqrt(1+x^4)/(1-x^4),x=0..1/3);1 1 2 ( ln( 2 ) + ln( 41 ? 3 ) ) + 2 ( ln( 2 ) + ln( 3 + 41 ) ) 8 8 1 1 ?+1π 2 ? 2 arctan ? 82 2 ? ? ? ? 4 ?6 ? 8 & evalf(ans,20); . & assume(0&k,k&1); & int(x^2/sqrt((1-x^2)*(1-k^2*x^2)),x=0..k); ans := ?EllipticF ( k , k ) EllipticE ( k , k ) ? k2 k2& int(1/sqrt(-(x-1)*(x-2)*(x-3)),x=0..1/2);- 50 - 2 1 ?1 2 ? 2 EllipticF ? ? ?5 5, 2 2 ? ? ? 2 EllipticF ? ?3 ? ? ? & evalf(%); .3,1 ? 2? ? 2 ?3.3.5 换元积分法和分部积分法 换元积分法是积分计算中一种重要而实用的方法. 在Maple中, 对被积函数施行变 量代换的命令是changevar, 该命令在工具包student中, 须先调用student工具包. 命令格 式为: changevar(s, f); changevar(s, f, u); changevar(t, g ,v); 其中 , s 是形式为 h(x)=g(u) 的一个将 x 定义为 u 的函数的表达式 , f 为积分表达式 ( 如 Int(F(x),x=a..b);), u为新的积分变量名称, t为定义的多元变量代换的方程组, g为二重或者 三重积分, v为新变量的列表. Changevar函数对积分、 求和或者极限实现变量代换. 第1个参数s是用旧变量定义新 变量的一个方程, 如果包含了两个以上的变量, 新变量必须放置在第3个参数位置, 而第 2个参数是一个要被替换的表达式, 一般包含Int, Sum或者Limit等非求值形式(应尽量使 用这种形式以便最后用value求值). 当问题为二重或三重积分时, 定义多元变量代换的方程由一个集合给出, 而新变量 由一个列表给出. & with(student): & changevar(cos(x)+1=u,Int((cos(x)+1)^3*sin(x),x),u);?? u 3 d u ? ? & changevar(x=sin(u),Int(sqrt(1-x^2),x=a..b),u);? 1 ? sin( u ) 2 cos ( u ) du ? ? ? arcsin( a )& changevar({x=r*cos(t),y=r*sin(t)},Doubleint(1,x,y),[t,r]);arcsin( b )?? r d t d r ?? ??分部积分法(integration by parts)通过调用student工具包中的intparts来完成: & with(student): & int(x*exp(-a^2*x^2)*erf(b*x),x);? ( ?a 2 x 2 ) ?x e erf ( b x ) dx ? ? ?& intparts(%,erf(b*x));- 51 - 1 erf ( b x ) e ? 2 a2& value(%);2 2 ( ?a x )2 2 2 2 ? ? e ( ?b x ) b e ( ?a x ) ?? dx ?? ? π a2 ? ??1 erf ( b x ) e 2 a22 2 ( ?a x )+1 b erf ( b 2 + a 2 x ) 2 a2 b2 + a23.3 重积分和线积分在 Maple 中, 重积分的形式函数有 Doubleint(二重)和 Trippleint(三重), 均在 student 工具包中, 应用前需调用 student 工具包, 它们适用于定积分和不定积分, 可用 value 来 获得积分结果的解析表达式. 命令格式为: Doubleint(g, x, y); Doubleint(g, x, y, Domain); Doubleint(g, x = a..b , y = c..d ); Tripleint(g, x, y, z) Tripleint(g, x, y, z, Domain) Tripleint(g, x = a..b, z = e..f, y = c..d ) 其中, g 为积分表达式, x, y, z 为积分变量, Domain 为积分区域. & with(student): & Doubleint(f(x,y),x,y);?? f ( x , y ) d x d y ?? ??比较以下两个实验: & Doubleint(x+y,x=0..1,y=1..exp(x)):%=value(%);2 ? ? x + y dx dy = 1 e x ? 1 + 1 ( e x ) ? ? 2 2 ? ? 1 0 e x 1& Doubleint(x+y,y=1..exp(x),x=0..1):%=value(%);? ? x + y dy dx = ? 1 + 1 ( e ) 2 ? ? 4 4 ? ? 0 1在这两个形式函数中, 我们还可以加入一个可选的参数, 用来表示积分区域(通常 用 S 表示二维区域, 用 Ω 表示三维区域). 注意: 在 Maple 中, 这个参数仅仅用来做形式 上的表示, 不可以用来求值.- 52 1 e x & Tripleint(x^2*y^2*z^2,x,y,z,Omega);? ? ? x 2 y 2 z 2 dx dy dz ??? ??? Ω在 Maple 中还有一个计算用参数方程形式表示的第一型曲线积分的函数―Lineint, 它也在 student 工具包中. 下面通过一个实例说明这一函数的用法. 例: 求曲线积分 y ds , 其中 C 为摆线 x = a (t ? sin t ), y = a (1 ? cos t ),0 ≤ t ≤ 2π2 C∫的一拱. & with(student):Lineint(y^2,x=a*(t-sin(t)),y=a*(1-cos(t)),t=0..2*Pi); value(%);? ? ? a 2 ( 1 ? cos ( t ) ) 2 ? ? ? ? 02π? ? a ( 1 ? cos ( t ) ) ? + ? ? a ( t ? sin( t ) ) ? dt ? ? ? ? ? ?t ? ? ? ? ? ? ? ?t256 a 4 15 a 2223.4 利用辅助手段积分机器终归是机器, 再聪明的机器也无法彻底代替人脑, Maple 也一样, 它只能作为我 们数学计算、推证的助手. 下面通过例子来体会 Maple 的真正用处. 例: 求广义积分∫∞0e ?cx dx , 其中 c&0.2按照常规, 我们会通过下面的语句进行计算: & Int(exp(-c*x^2), x=0..infinity) = int(exp(-c*x^2), x=0..infinity); 但 Maple 告诉我们, 由于无法确定常数 c 的正负号, 因而无法确定积分是否收敛. 解决这一问题的办法是, 通过 assume 设定 c 的取值范围: & assume(c&0); & Int(exp(-c*x^2),x=0..infinity)=int(exp(-c*x^2),x=0..infinity);1 ? ( ?c~ x 2 ) ? e dx = ? ? 2 ? 0∞π c~解决这一问题的另一方法是假设 c 是另一个参数 p 的绝对值(c:=abs(p)), 这样 c 就 自然是一个非负的参数了. & with(student): & int(x*exp(-a^2*x^2)*erf(b*x),x);- 53 - ? ( ?a 2 x 2 ) ?x e erf ( b x ) dx ? ? ?& intparts(%,erf(b*x));2 2 ( ?a x ) 2 2 2 2 ? ? e ( ?b x ) b e ( ?a x ) ?? dx ?? 2 ? π a ? ?1 erf ( b x ) e ? 2 a2& value(%);?1 erf ( b x ) e 2 a22 2 ( ?a x )+1 b erf ( b 2 + a 2 x ) 2 a2 b2 + a2其中, erf(x)为误差函数(error function), 定义为: erf ( x) =2π∫x0e ?t dt .2例: 求证∫2π01 dt = π 1 + 3 sin t 2在 Maple7 中,该积分直接利用 Maple 计算也可完成证明: & Int(1/(1+3*sin(t)^2),t=0..2*Pi)=int(1/(1+3*sin(t)^2),t=0..2*Pi);? ? ? ? ? ? 02π1 dt = π 1 + 3 sin( t ) 2这里,我们将其作为一个例子,试图说明应用有关数学理论知识转化问题,然后再 利用 Maple 进行辅助计算的方法和技巧。 由复变函数理论知道, 此积分可用围道积分(contour integration)来求解. 首先, 我们 把被积函数写成复变量 z = e it 的形式, 然后把原问题转化成围道积分, 再求得结果. 过 程为: & p:=1/(1+3*sin(t)^2);p :=& convert(p,exp);1 1 + 3 sin( t ) 213 ? (I t ) 1 ? e ? (I t ) ? 1? ? ? 4? e ? ?- 54 -2 & factor(%)/diff(exp(I*t),t);4Ie(I t ) 2(I t ) (I t )(3 (e ) ? 1) ((e & g:=subs(exp(I*t)=Z,%);) ? 3)2g :=& solve(denom(g)=0,Z);4IZ ( 3 Z ? 1 ) ( Z2 ? 3 )23, ? 3,& readlib(residue): & residue(g,Z=1/3*sqrt(3));1 1 3, ? 3 3 3-1 I 4 & residue(g,Z=-1/3*sqrt(3)); -1 I 4 & 2*pi*I*(%+%%); π其中 , 函数 residue(f, x=a) 计算表达式 f 对变量 x 在 a 点附近的代数残差 (algebraic residue), 残差定义为f的Laurent级数中(x-a)^(-1)的系数.4 级数4.1 数值级数和函数项级数求和以及审敛法我们可以用 Maple 中的函数 sum 方便地求得级数的和, 无论是有限项还是无穷项, 常数项级数还是函数项级数 . 相应地 , 和式的形式函数是 Sum. 求连乘积使用命令 product. & Sum(1/(4*k^2-1), k=1..infinity)= sum(1/(4*k^2-1), k=1..infinity);k=1∑∞1 4k ?12=1 2& Sum(i^2,i=1..n)=sum(i^2,i=1..n);i= 1∑ i2 = 3 ( n + 1 )3 ? 2 ( n + 1 )2 + 6 n + 6- 55 -n1111& Product(1/k^2,k=1..n)=product(1/k^2,k=1..n); k=1∏n1 1 = 2 k Γ( n + 1 ) 2Maple 对级数求和的方法如下: (i) 多项式级数求和用贝努利级数公式:∑kk =0 k m +1n ?1m=1 k m +1? k , 其中, 贝努 Cm +1 B k n m +1利数Bk由以下隐式递推公式定义: B0 = 1,∑Ck =0mBk = 0(ii) 有理函数级数求和是用 Moenck 方法, 得到的结果是一个有理函数加伽玛函数 (Polygamma function)ψ 及其导数的项; (iii) Gosper 算法是 Risch 算法的离散形式, 它被用到求包含级乘和乘幂的级数和 上; (iv) 计算无穷项级数的和有时会用到超比级数. 收敛或发散是级数的重要性质, 在这里主要以绝对收敛的比值审敛法(ratio test for absolute convergence)为例说明 Maple 的使用, 其余类推. 绝对收敛的比值审敛法的数学原理是: 设∑ak为不含 0 的交错级数, 并令 ρ = limk →∞a k +1 ak, 则:1) 若 ρ &0, 级数绝对收敛; 2) 若 ρ &0 或 ρ = ∞ , 级数发散; 3) 若 ρ =1, 待定(?1) k 2 k 例: 判定级数 ∑ 是否绝对收敛. k! k =1∞& f:=k-&(-1)^k*12^k/(k!);f := k →( -1 ) k 12 k k!1 k+1& r:=simplify(abs(f(k+1))/abs(f(k)));r := 12& Limit(r,k=infinity);k→∞lim 121 k+1& value(%);- 56 - 0由此可见, r=0&1, 级数绝对收敛. 事实上, 还可以用 sum 对级数求和, 确定级数收 敛于一个定值: & sum(f(k),k=1..infinity);e( -12 )( 1 ? e 12 )4.2 幂级数幂级数的有关计算在专门的工具包 powseries 中, 这个工具包含有生成和处理幂级 数的各种常用工具. 如果我们已知一个幂级数的系数, 就可以用函数 powcreate 来生成 它, 其参数是系数所满足的方程或方程组, 格式为: & with(powseries); & powcreate(t(n)=3^sqrt(n)); 没有任何结果显示出来, 事实上, 此时, Maple 已经按照要求把该幂级数的系数函数 赋给了 t(n), 用下述命令即可看出: & t(2);3( 2)显然 , 这样的级数很不直观 , 更多的时候我们需要幂级数的截断表达式 (truncated power series form), 此时可以通过该工具包中的 tpsform 命令完成,这是一个很有用的 Maple 函数: & tpsform(t,x,8);1+3x+3( 2)x2 + 3( 3)x3 + 3( 4)x4 + 3( 5)x5 + 3( 6)x6 + 3( 7)x 7 + O( x 8 )但是, 大多数情况下, 我们并不知道幂级数的系数, 而只知道幂级数的和的解析表 达式, 需要把它展开成和式. 对于一些常用的函数, powseries 工具包中有一些函数可以 生成对应的幂级数, 比如 sin(p)、cos(p)、exp(p)、ln(p)、sqrt(p)的幂级数可以分别通过 powsin(p)、powcos(p)、powexp(p)、powlog(p)、powsqrt(p)来得到, 其中, p 可以是单变量 函数或表达式甚至级数. & t:=powlog(1+x+x^2): tpsform(t,x,6);x+1 2 2 3 1 4 1 5 x ? x + x + x + O( x 6 ) 2 3 4 5对于多项式, 可以用 powpoly(expr, x) 得到对应的幂级数, 其中 expr 是多项式, x 是 变量. 而任意函数的表达式可以通过函数 evalpow 来获得其幂级数形式. & t:=evalpow(1/(1-3*x+2*x^2)): & tpsform(t,x,6);1 + 3 x + 7 x 2 + 15 x 3 + 31 x 4 + 63 x 5 + O ( x 6 )掌握了级数的有关生成后, 可以对这些级数进行运算了, powseries 工具包中具有对 幂 级 数 的 各种 运 算 : 加 (powadd) 、 减 (subtract) 、 乘 (multiply) 、 除 (quotient) 、 求 负- 57 - (negative)、 求倒数(inverse)、 复合(compose)、 求逆(reversion)、 求导(powdiff)、 积分(powint) 等. 下面通过实例学习这些运算. & restart:with(powseries):powcreate(t(n)=t(n-1)/n,t(0)=1): powcreate(v(n)=v(n-1)/2,v(0)=1): s:= powadd(t, v): tpsform(s, x, 7); 3 3 7 3 5 4 19 5 49 6 2 + x + x2 + x + x + x + x + O( x 7 ) 2 4 24 48 480 2880 & p:=multiply(t,v): tpsform(p,x,7); 3 5 19 3 7 4 109 5 331 6 1 + x + x2 + x + x + x + x + O( x 7 ) 2 4 24 16 480 2880 & q:=quotient(t,v): tpsform(q,x,7); 1 1 3 1 4 1 5 1 6 1+ x? x ? x ? x ? x + O( x 7 ) 2 12 24 80 360 & w:=powdiff(t): tpsform(u,x,6);1 + x ? 2 x 2 + x 3 + x 4 ? 2 x 5 + O( x 6 )& u:=powint(v):tpsform(u,x,6); 1 1 3 1 4 1 5 x + x2 + x + x + x + O( x 6 ) 4 12 32 804.3 泰勒级数和劳朗级数在 Maple 中, 可以用命令 taylor 方便快捷地得到一个函数或表达式在一点的任意阶 Tayloe 展开式, 而一般级数展开命令为 series. 命令格式为: taylor(expr,eqn/nm,n); series(expr, eqn, n); 其中, expr 表示表达式, eqn/nm 表示方程(如 x=a)或名称(如 x), n(非负整数)表示展开阶数. 在调用 taylor 或 series 级数时, 只需要指定有待展开的表达式、展开点、展开的阶 数就可以了. 如果不给定展开点, 默认为 0 点, 如果不指定展开阶数时默认为 6 阶(命令 order 可获取截断级数的展开阶数). 另外, series 函数可以展开更一般的截断函数, 比如 laurent 级数等, 它会根据情况决定展开成什么类型级数. & taylor(sin(tan(x))-tan(sin(x)),x=0,19);1 7 29 9
x ? x ? x ? x ? x 15 + O( x 17 ) 30 756
& series(GAMMA(x),x=0,3); ? 1 2 1 2 ? x + ? ? 1 ζ ( 3 ) ? 1 π 2 γ ? 1 γ 3 ? x 2 + O( x 3 ) x -1 ? γ + ? ? ? ? 12 π + 2 γ ? ? ? 3 12 6 ? ? ? ? ? & order(%); 3 ?- 58 - 如果需要限制展开为 lauren 级数, 可以使用 numapprox 工具包中的 laurent 函数, 否 则, series 有可能会得出一些更为广义的级数, 比如 Puisseux 级数: & with(numapprox); & laurent(exp(x), x=0,10);1+x+ 1 2 1 3 1 4 1 5 1 6 1 7 1 1 x + x + x + x + x + x + x8 + x9 + O( x10 ) 2 6 24 120 720
362880& series(1/(x*(1+sqrt(x))),x=0,3);( 3/2 ) ( 5/2 ) 1 1 ? +1? x +x?x + x2 ? x + O( x 3 ) x xMaple 在计算截断级数上还具有一个有用的特性, 即待展开的表达式或函数不一定 要有解析表达式, 而只要可以求导就能计算. & Int(exp(x^3),x)=int(exp(x^3),x); & series(rhs(%),x=0);? (x ?e ? ? ?3( 1/3 ) ? 1 3? ? ? ( 1/3 ) Γ? x ( -1 ) ? ?? ? 3 , ?x ? ) ( 2/3 ) ? 2 x ( -1 ) 1 π 3 ?? ? ? ? ? dx = ? ( -1 ) ? ? ( 1 / 3 ) 3 3 ? 3 Γ? 2 ? ( ?x 3 ) ( 1/3 ) ? ( ? x ) ? ? ? ? ? ? ?3? ? ? ? ? 1 4 x + x + O( x 7 ) 4与前面介绍的幂级数不同, 这里可以直接对截断形式的级数进行求导和积分运算: & sin_series:=series(sin(x),x);sin_series := x ?& diff(sin_series,x);1 3 1 5 x + x + O( x 6 ) 6 1201?& int(%,x);1 2 1 4 x + x + O( x 5 ) 2 24x?1 3 1 5 x + x + O( x 6 ) 6 120关于多元级数需调用函数 mtaylor, 结果是一般的多项式而非截断函数, 自然就可 以进行多项式的运算了. 命令格式为: mtaylor(f,v); mtaylor(f,v,n); mtaylor(f,v,n,w); 其中, f 表示代数表达式, v 表示方程的列表或集合, n(可选, 默认值为 6)表示截断阶数的 非负整数, w(可选)表示自然数列表, 权变量列表. & mtaylor(sin(x^2+y^2),[x,y],8);- 59 - x2 + y2 ?& whattype(%);1 6 1 2 4 1 4 2 1 6 x ? y x ? y x ? y 6 2 2 6+更进一步, 可以用normal函数对展开式进行正则化(其更主要的功能是对有理函数 化简), 用coeff获得展开式的系数, 与多项式不同的是, 对于级数, coeff只能获得主变量 的幂系数. 实际上, 更为方便的是, 可以利用库函数coeftayl, 不展开就能获得泰勒级数 的系数, 计算f在x=x0点的泰勒展开式中 ( x ? x0 ) 的系数的命令格式为:kcoeftayl (f, x=x0, k); & normal((f(x)^2-1)/(f(x)-1));f( x ) + 1& normal(sin(x*(x+1)-x));sin ( x 2 )& normal(1/x+x/(x+1),expanded);x + 1 + x2 x2 + x& coeftayl(series(sin(x),x=0,20),x=0,11);-1
& coeftayl(series(exp(x),x=0,30),x=1,13); 17 5 积分变换无论在数学理论研究还是在数学应用中,积分变换都是一种非常有用的工具. 积分 变换就是将一个函数通过参变量积分变为另一个函数. 常用的积分变换包括拉普拉斯变 换(Laplace transforms)、傅里叶变换(Fourier transforms)、梅林变换(Melin transforms) 以及汉克尔变换(Hankel transforms)等. 函数 f 的积分变换的定义如下:T ( f )(s) = ∫ f (t ) K ( s, t )dtab其中 K 为变换核. 具体如下: 变换名称 拉普拉斯 定 义 变换命令 laplace(f(t), t, s)- 60 -逆变换命令 invlaplace(f(t), t, s)∫∞0f (t )e ? st dt 傅 里 叶 梅 林∫+∞?∞ ∞f (t )e ?ist dt f (t )e s ?1 dtfourier(f(t), t,s) melin(f(t), t,s)invfourier(f(t), t,s) invmelin(f(t), t,s)∫0这些函数都在 inttrans 工具包中, 使用时用 with 引入.5.1 拉普拉斯变换形如多项式或者一些特定函数(如 Diract function、 Heaviside function、 Bessel function 等)组成的有理表达式或它们的和, 都可以用 Maple 积分变换工具包 inttrans 中的函数 laplace 求得其拉普拉斯变换, 相应的逆变换用 invlaplace. & t^2-exp(t)+sin(a*t);t 2 ? e t + sin( a t )& with(inttrans): & laplace(%%,t,s);2& invlaplace(%,s,t);1 1 a ? + 2 3 s ? 1 s + a2 st 2 ? e t + sin( a t )所有的积分变换都主要应用于微分和积分方程领域。由于拉普拉斯变换的导数和积 分性质, 它被大量地应用到微分方程和积分方程的求解上. 作为拉普拉斯变换的一个应 用, 下面求解 Volterra 积分方程: & with(inttrans): & e:=u(t)+int((t-x)*u(x),x=0..t)-cos(t);e := u( t ) + ? ? ( t ? x ) u( x ) dx ? cos ( t ) ? 0& laplace(e,t,s);tlaplace ( u( t ), t, s ) +laplace ( u( t ), t, s ) s ? 2 2 s s +1下面要从这个简单的代数方程中解出 laplace(e,t,s)来,值得注意的是要解出来的不 是一个变量,而是一个子式。当然,我们可以先用 subs 将这个子式代换为一个变量, 再用 solve 求解。但在 Maple 中有一个更方便的命令:库函数 isolate 可直接从方程是解 出这个子式来:- 61 - & readlib(isolate)(%,laplace(e,t,s));laplace ( u( t ), t, s ) +laplace ( u( t ), t, s ) s ? 2 =0 2 s s +1然后求解变换后的结果 laplace(u(t),t,s): & solve(%,laplace(u(t),t,s));s3 s4 + 2 s2 + 1作反变换即可得到 u(t),也就是原方程的解: & u(t):=invlaplace(%,s,t);1 ? u( t ) := ? ? ? ? 2 t sin( t ) + cos ( t ) ? ? Dirac ( t ) ? ?再看另外一类积分方程的 Laplace 变换求解: & int_eqn:=int(exp(a*x)*f(t-x),x=0..t)+b*f(t)=t;(a x ) int_eqn := ? f( t ? x ) dx + b f( t ) = t ? ?e ? 0 t对其进行拉普拉斯变换,得到 f(t)的变换 L(f)(s)的方程: & laplace(%,t,s);laplace ( f( t ), t, s ) 1 + b laplace ( f( t ), t, s ) = 2 s?a s& readlib(isolate)(%,laplace(f(t),t,s));laplace ( f( t ), t, s ) =再对上式做逆变换,即可得所求: & invlaplace(%,s,t);1 1 ? s2 ? ? ? ? s ? a + b? ? ?? 1/2 1 ( ?1 + b a ) t ? ? ? ? 2 sinh ? ? ?2 ?e b at ? ? f( t ) = ? ?1 + b a ( ?1 + b a ) 2?( ?1 + b a ) t b? ? ? ?5.2 傅里叶变换Maple 工具包 inttrans 中的函数 fourier 可以求表达式的傅里叶变换: & with(inttrans): & 1/(1+t^2);- 62 - 1 1 + t2& fourier(%,t,omega);( ?ω )e ω π Heaviside ( ?ω ) + eπ Heaviside ( ω )上式的结果中出现了 Heaviside 函数, 它的导数是 Diract 函数, 它在负半轴上取 0, 在正半轴上取 1. 一般地, 可对其做逆变换: & invfourier(%,omega,t);?& normal(evalc(%));1 ( 1 + I t ) ( ?1 + I t )1 1 + t2对于一些函数, 比如三角函数、Diract 函数、Heaviside 函数和 Bessel 函数等, Maple 会利用卷积定理、查表、定积分等方法求它们的傅里叶变换: & fourier(BesselJ(0,t),t,omega);2?Heaviside ( ω ? 1 ) + Heaviside ( ω + 1 ) 1 ? ω2我们甚至可以扩充Maple里的傅里叶变换表, 尽管Maple内部的公式表可能比任何 一本教科书都要完全. 例如, 定义函数f(t)的傅里叶变换为F(s)/(1+s2), 然后利用Maple中 的函数addtable将其加到变换表中去: & addtable(fourier,f(t),F(s)/(1+s^2),t,s); & fourier(exp(3*I*t)*f(2*t),t,omega);1 3 F? ω? ? ? ? ? 1 2? ? ?2 1 2 1 + ( ω ? 3 )2 4addtable 是 inttrans 中的函数, 它不仅可以用来扩充傅里叶变换的变换表, 对其他 的积分也适用. 其第一个参数是积分变换名, 第二个是函数, 第三个是该函数经过变换 后的函数, 后两个参数是变换前后函数的自变量. 函数 fourier 和 invfourier 是用来计算符号表达式的连续傅里叶变换的, 对于离散域 上的数值傅里叶变换, 可以调用快速傅里叶变换(Fast Fourier Transformation)函数 FFT, 相应的逆变换函数是 iFFT. 对于一个 长 度为 N 的离 散数值向 量 x=[x0, x1, …… , xN-1], 其傅里叶变 换 X=[X0, X1, ……, XN-1]的定义如下:- 63 - X k = ∑ x jej =1N ?12πijk N其中, 0 ≤ k ≤ N ? 1 . 快速傅里叶变换的算法决定了 N 必须为 2 的整数次幂. 作为 例子, 我们取 N = 2 3 来计算实数序列[1, 1, 1, 1, -1, -1, -1, -1]的傅里叶变换. 和 fourier 不 同, FFT 与 iFFT 都是函数 (Maple 7 以前的版本是库函数), 而不是 inttrans 工具包中的 函数. FFT 是用来对复数序列进行傅里叶变换的, 需要分别提供数据的实部和虚部. & x:=array([1,1,1,1,-1,-1,-1,-1]);x := [ 1, 1, 1, 1, -1, -1, -1, -1 ] & y:=array([0,0,0,0,0,0,0,0]); y := [ 0, 0, 0, 0, 0, 0, 0, 0 ] & FFT(3,x,y); 8 & print(x); [ 0, 2. , 0., 1. , 0, 1. , 0., 2. ] & print(y); [ 0, -4. , 0., -. , 0, . , 0., 4. ]FFT的第一个参数表明了序列的元素个数, 上面的 3 表示要换的数是 23个, 后两上 参数分别是变换的实部和虚部, 它们的数据类型都是数组(array), 可以用函数array从 数据列表生成. 有关数组的显示用print命令. 从上面的结果可以看出, FFT把变换的结 果直接赋给了输入的数组, 而不是把结果作为返回值返回. 再用 iFFT 检验变换的正确性: & iFFT(3,x,y);8& print(x);[ 1. , . , . , . , -1. , -. , -. , -. ]& print(y);[ 0., -. 10 -9, 0., . 10 -9, 0., . 10 -9, 0., -. 10 -9 ]这里的结果是将实部与虚部分开的, 我们可以用 zip 函数把他们合成为复数形式: & zip((a,b)-&a+b*I,x,y);[ 1. + 0. I, . ? . 10 -9 I, . + 0. I, . + . 10 -9 I, -1. + 0. I, -. + . 10 -9 I, -. + 0. I, -. ? . 10 -9 I ]zip 的第一个参数是一个二元函数, 它将后两个向量中的每一个元素按此函数结合 成一个新的向量.- 64 - 5.4 其他积分变换在 Maple 中还有一些其他的积分变换, 它们的调用格式和前面的基本一样. 变 换 定 义 Maple 中的函数傅里叶余弦变换π∫22∞0f (t ) cos(st )dtfourierscos(f(t),t,s)傅里叶正弦变换π∫∞0f (t ) sin( st )dtfourierssin(f(t),t,s)汉克尔变换∫∞0f (t ) st BesslJ (v, st )dthankel(f(t), t, s, nu)希尔伯特变换π∫1f (t ) dt ?∞ t ? s+∞hilbert(f(t), t, s)下面通过几个例子说明这些变换的应用: ① Hankel 变换: & with(inttrans): & assume(k,integer,k&0): & hankel(sqrt(t^2),t,s,k);1 5? 2 Γ? ? k+ ? ? 4? ?2 ? 2 1 1 ? s 2 Γ? ? ?2 k ? 4? ? ? ?② Fourier正余弦变换 & assume(a&0): & fouriercos(Heaviside(a-t),t,s);2 sin( a s ) π s& fouriercos(%,s,t);Heaviside ( a ? t )& fouriersin(Heaviside(a-t),t,s);- 65 - 2③ Hilbert 变换1 ? 2 sin? ? ?2 a s? ? ? ? π s2& assume(k,integer,k&0): & hilbert(Dirac(x)+sin(k*x)/x,x,y);?1 + π cos ( y k ) ? π yπ④ Mellin 变换 & mellin(1/(1+t),t,s);π csc ( π s )& mellin(ln(1+t),t,s);π csc ( π s ) s- 66 -
赞助商链接}

我要回帖

更多关于 高数不定积分换元法 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信