>diff(x*exp(x*y(x))=x+y(x),x,x);
2.用别名命令alias将函数变量先定义为自变量的函数 如alias(y=y(x))再对方程求导
> alias(y=y(x)):f:=x^y+sin(x*y)=x:diff(f,x);dy/dx=solve(\
三.导数算子:D(函数),D[i$m,j$n,…](函数) i,j整数表示,对第i、第j个变量求导
> f:=x^2+3*x+5:g:=x->x^2+3*x+5:D(f);D(g);D[1,1](g);
> h:=(x,y)->sqrt(x^2+y):D[1](h);D[2](h);D[1,2](h);D[1,1](h);D[1$2,2](h); 注:只有箭头算子、过程、转换法定义函数,才能使用求导算子。 第四节 积分
一.一元积分 int(f,x) 不定积分 int(f,x=a..b) 定积分 Int为积分符号,用value显示值 注:不能对过程函数使用。
> Int(2*x*sin(x),x)=int(2*x*sin(x),x)+c; > Int(sqrt(a^2+x^2),x)=int(sqrt(a^2+x^2),x)+C; >Int((x-2)/(x^3-1),x)=int((x-2)/(x^3-1),x)+C; >Int(x*ln(x),x):”=value(”);
注:箭头算子、过程、转换法定义函数要用int(f(x),x) >f:=x->x^2-1/x:int(f(x),x);
二.重积分 int(int(f(x,y),y=y1(x)..y2(x)),x=a..b)
>Int(Int(abs(y)*x^2,y=-sqrt(1-x^2)..sqrt(1-x^2)),x=-1..1):”=value(”); 第五节 方程求解:
solve(方程,未知数); fsolve(方程,未知数,选项); 解数值解 选项:1.complex复数域上求根2.fulldigits保持精度3.maxsols=n求n个解4.范围
一.一元方程(省略“=”号为=0)
> p:=x->x^2+2*x-3:plot(p(x),x=-4..2); solve(p(x));fsolve(p(x)=12,x);
>t:=solve(6*x^4-35*x^3+22*x^2+17*x-10):t1:=eval(t[1]);t2:=eval(t[2]);t3:=eval(t[3]); t4:=eval (t [4]);
>p:=x->12*x^5+32*x^4-57*x^3-213*x^2-104*x+60:plot(p,-5..5,650..300);
16
>solve(p)
> solve(ln(x)+ln(x+1)=ln(2)); 二.方程组
> solve({2*x+3*y,y= x+1}); > solve({2*x+3*y,x^2=y^2-1}); > allvalues(\三.数值解
>solve(x^5-3*x^4-23*x^3+27*x^2+166*x+120=0,x); #等于0时,=0可省略 >fsolve(x^5-3*x^4-23*x^3+27*x^2+166*x+120,x,-1.5..3.5); >solve(x^4-3*x+4,x);allvalues(”); >fsolve (x^4-3*x+4,x,complex);
>fsolve(x^5-3*x^4-23*x^3+27*x^2+166*x+120=0,x,maxsols=2); 四.多项式分解因式、函数展开、合并、化简、转换:
factor(多项式,k) expand(函数) combine(函数) simplify(表达式) convert(表达式,形式,选项) 取分子numer(分式) 取分母denom(分式)
>p:=x->12*x^5+32*x^4-57*x^3-213*x^2-104*x+60: factor(p(x)); >expand(sin(x+y));combine(”); >f := (x^3+x)/(x^2-1);
> convert(f, parfrac, x);#转换为简单分式 >numer(f);denom(f);
>convert( 1.23456, fraction );#小数转分数 >convert(9, binary);#十进制转二进制 第六节 极值与最值
一.最值: maximize(f,x) maximize(f,x,a..b) minimize(f,x) minimize(f,x,a..b)
上述命令求函数f的最(极)大、最小值或区间[a,b]上最大、最小值。如果求最大、最小值点可结合图形,用fsolve(f=最大(最小)值,x)解的。 >f:=x^3-x^2-x+1:
> plot(f,x=-2..2.7,color=plum);
17
> maximize(f,x);x1:= minimize(f,x);x2:=maximize(f,x,-1..2); >fsolve(x^3-x^2-x+1=x1);fsolve(x^3-x^2-x+1=x2);#求最值点 >factor(x^3-x^2-x+1); 求闭区间上最大、最小值:
> maximize(x^3-x^2-x+1,x,-1..2);minimize(x^3-x^2-x+1,x,-1.5..2);
二.条件极值: extrema(函数,{条件方程},自变量,‘极值点变量’) 没有条件方程时,条件方程内为空,但花括号不能省。若不需要极值点,最后一项可省略。该命令非基本命令,要从函数库用命令readlib(extrema)调入。 > readlib(extrema):
> extrema( a*x^2+b*x+c,{},x,'s');allvalues(s);
> f := (x^2+y^2)-z^2; g1 := x^2+y^2-16=0; g2 := x+y+z=10; extrema(f, {g1,g2}, {x,y,z},'s'); allvalues(s); 第七节 微分方程与差分方程 一.微分方程解析解与数字解
dsolve(方程,解函数,选项) dsolve({方程组及初始条件},{解函数},选项)
方程中未知函数要用y(x)记,n阶导可用D@@n(y)(x),初始条件y(x0)=a,(D@@n)(y)(x0)=b
选项:type=series 级数解 type=numeric数值解explicit=true显式解method=laplace拉普拉斯变换求解。在数值解中又可有方法选项:method=rkf45四五指令Runge-Kutta法 method=dverk78七八指令Runge-Kutta法 method=classical古典法 method=gear齿轮法 method=mgear和 method=lsode. >dsolve(diff(y(x),x,x)+y=x*exp(x),y(x));
>dsolve({diff(y(x),x)=0.003*y*(100-y),y(0)=15},y(x)); >assign(”):plot(y(x),x);#将求出的解定义为函数,并作图 > dsolve({diff(z(x),x)-z(x)+x=0,z(0)=2},z(x)); > dsolve({diff(v(t),t)+2*t=0,v(1)=5},v(t)); > dsolve(diff(y(x),x$2) - y(x) = sin(x)*x, y(x)); > ?dsolve
18
> p:= dsolve({D(y)(x) = y(x), y(0)=1}, y(x),type=numeric):#解数值解 > with(plots):
> odeplot(p,[x,y(x)],-1..1 ): #作微分方程数字解图
> p := dsolve({ diff(y(x),x) = sin(x*y(x)),y(0)=2},y(x),type=numeric): > odeplot(p,[x,y(x)],0..6,labels=[x,y]);#作微分方程数字解图
> sys := diff(y(x),x)=z(x),diff(z(x),x)=y(x): fcns := {y(x), z(x)}:#微分方程组 > p:= dsolve({sys,y(0)=0,z(0)=1},fcns,type=numeric): > odeplot(p, [x,y(x)], -4..4, numpoints=25):
>odeplot(p, [x,y(x),z(x)],-4..4,numpoints=25, color=orange):
>p:= dsolve({diff(y(x),x$3)=y(x), y(0)=1,D(y)(0)=2,(D@@2)(y)(0)=4}, y(x)); 二. 差分方程:
rsolve(方程,解函数,选项) ,rsolve({方程组,初始条件},{解函数},选项) 选项为'genfunc'(x)解以x为自变量;选项为'makeproc'解为过程函数。 > rsolve({f(n)=2*f(n-1)+3*f(n-2),f(1)=3,f(0)=5},f(n)); > rsolve({c(n)=c(n-1)-5*c(n-2),c(0)=1,c(1)=0},c(n));
rsolve({F(n) = F(n-1) + F(n-2), F(1..2)=1}, F, 'genfunc'(x));
> rsolve({s(n) = s(n-1) + t(n-1), t(n) = s(n) + t(n-1), s(0)=0, t(0)=1},{s, t}, 'genfunc'(z));
>rsolve({s(n) = 2*s(n-1), s(0)=1}, s, 'makeproc'); 第八节 级数
一.级数求和 sum(f(n),n) sum(f(n),n=a..b) Sum 为求和号 >Sum(x^n/n!,n=0..infinity)=sum(x^n/n!,n=0..infinity); >Sum(1/k^2,k=1..infinity):”=value(”);
二.函数展开 tayloe(函数,点,项数) series(函数,点,项数) 其中项数省略为6项,点也可以直接用自变量代替,这时表示在x=0点展开。 > 1/(1-x)=series(1/(1-x),x);exp(x)=taylor(exp(x),x); > sin(x)=series(sin(x),x=Pi/2,8);
> x^3/(x^4+4*x-5)=series(x^3/(x^4+4*x-5),x=infinity); 三. 构造幂级数with(powseries)调入幂级数软件包。
19
powcreate(f(n)=通项系数,初始值)定义系数 tpsform(f,x,项数) 显示幂级数
> with(powseries):
>powcreate(f(n)=2^n/n!):powcreate(h(n)=(-1)^(n+1)/n,h(0)=1): >Sum(2^n*x^n/n!,n=0..infinity)=tpsform(f,x,7); >powcreate(h(n)=(-1)^(n+1)/n,h(0)=1):
>Sum((-1)^(n+1)*x^n/n,n=1..infinity)=tpsform(h,x,5); >powcreate(v(n)=(v(n-1)+v(n-2))/4,v(0)=4,v(1)=2): >tpsform(v, x);
>powseries[powsin](x):sin(x)=powseries[tpsform](\也可以这样直接调用 >a := powseries[powexp](x): >b := powseries[tpsform](a, x, 5);
第五章 线性代数
with(linalg)调入线性代数系统
矩阵输入:matrix(m,n,[a11,a12,…a1n,a21,…a2n,…,am1,…,amn])或array(1..m,1..n,
[[a11,…,a1n],…,[am1,…,amn]]) extend(A,m,n) 矩阵A增加m行n列 向量:vector([a11,a12,…,a1n])或array(1..n,[a11,…,a1n])
几个特殊矩阵:对角阵:band(V,n) ,对角块:copyinto(A,B,m,n)拷贝A到B的m行n列,方块diag(A,B…),雅可比jacobian(函数向量,自变量), 范德蒙:Vandermonde(向量) > with(linalg):
>A:=matrix(6,6,[3,4,-1,1,-9,10,6,5,0,7,4,-16,1,-4,7,-1,6,-8,2,-4,5,-6,12,-8,-3,6,-7,8,-1,1,8,-,9,1,3,0]):
>B:=matrix(6,6,[1,2,4,6,-3,2,7,9,16,-5,8,-7,8,11,20,1,5,5,10,15,28,13,-1,9,12,19,36,25,-7,23,2,4,6,-3,0,5]):
> b:=array(1..6,[1,3,5,7,9,11]):
> diag(A,B);extend(B,6,6,0);copyinto(A,\
20