数学软件Maple使用教程


作者:dell|dhqcl@163    转贴自:
数学实验
数学软件Maple使用教程
序言
一.什么是数学实验?
我们都熟悉物理实验和化学实验,就是利用仪器设备,通过实验来了解物理现象、化学物质等的特性。
同样,数学实验也是要通过实验来了解数学问题的特性并解决对应的数学问题。过去,因为实验设备和实验手段的问题,无法解决数学上的实验问题,所以,一直没有听说过数学实验这个词。随着计算机的飞速发展,计算速度越来越快,软件功能也越来越强,许多数学问题都可以由计算机代替完成,也为我们用实验解决数学问题提供了可能。
数学实验就是以计算机为仪器,以软件为载体,通过实验解决实际中的数学问题。
 
 
 
二.常用的数学软件
目前较流行的数学软件主要有四种:
1.    MathACD
其优点是许多数学符号键盘化,通过键盘可以直接输入数学符号,在教学方面使用起来非常方便。缺点是目前仅能作数值运算,符号运算功能较弱,输出界面不好。
2.    Matlab
优点是大型矩阵运算功能非常强,构造个人适用函数方便很方便,因此,非常适合大型工程技术中使用。缺点是输出界面稍差,符号运算功能也显得弱一些。不过,在这个公司购买了Maple公司的内核以后,符号运算功能已经得到了大大的加强。再一个缺点就是这个软件太大,按现在流行的版本5.2,自身有400多兆,占硬盘空间近1G,一般稍早些的计算机都安装部下。我们这次没用它主要就是这个原因。
3.    Mathematica
    其优点是结构严谨,输出界面好,计算功能强,是专业科学技术人员所喜爱的数学软件。缺点是软件本身较大,目前流行的3.0版本有200兆;另一个缺点就是命令太长,每一个命令都要输入英文全名,因此,需要英语水平较高。
4.    Maple
优点是输出界面很好,与我们平常书写几乎一致;还有一个最大的优点就是它的符号运算功能特别强,这对于既要作数值运算,又要作符号运算时就显得非常方便了。除此之外,其软件只有30兆,安装也很方便(直接拷贝就可以用)。所以,我们把它放到学校网上直接调用。缺点就是目前市面上买不到教材,帮助系统又是英语,为学习带来了不便。因为条件的限制,其它几个软件不便于介绍,所以我们把我们对该软件的了解编写成讲义发给同学们作参考。
第一章  Maple软件的安装与启动
一.             Maple的安装启动
1.目前市面上出售的Maple软件一般是与其它数学软件在一张光盘上,安装时只要将光盘上Maple目录全部拷贝到硬盘上就可以了。
     2.在学校网络主页通过文件下载ftp内的17cai目录,到maple点击,将其下载到计算机上并解压,即安装完毕。
启动Maple,首先进入Maple目录下的子目录BIN,到枫叶图标(下面有Wmaple),点击图标就可启动。也可以将该图标拷贝到桌面点击启动。
二.Maple工作面
maple工作面提示符用来输入maple命令。提示符[>左边的[号表示所要一起执行的命令区,该区的命令将按先后次序连续一次执行完。若点击工具栏中T按钮,则提示符箭头消失,变为[号,表示当前为文本输入,工具栏也出现相应的字号字体选择框;常用工具栏中(从左到右)有新建、打开、保存、打印、剪切、复制、粘贴、撤消、Maple输入转换、文体输入转换、增加命令区、撤消分组、建立分组、停止运行及三个显示比例选择x按钮。点击提示符按钮将增加一个命令区;当将几个命令区及文本输入抹黑,点击建立分组,就会将抹黑部分分在一组,并出现一个分组标志,点击标志可以打开、关闭该组;点击并排的三个x按钮控制显示比例。
三.退出工作面并保存文件
1.点击文件菜单exit或键盘alt+F4或点击窗口右上角×,这时系统要提示:是否存盘?点击‘是’,则自动存盘。如果是第一次使用这个文件,则要出现一个对话框,选择存盘目录并输入文件名称。
2.命令 quit  done  stop  也可退出maple。注意!这三个退出命令不保存文件,不要随便用。
3.作业中存盘,可以用文件菜单的保存,也可以用工具栏的软盘图标保存。最好在操作一段后就保存一次,避免意外情况产生损失。
第二章  基本命令
命令的执行:1.每条命令必须用“:”(执行后不显示)或“;”(执行并显示)结束,否则被认为命令没输完。2.命令区中“#”号以后为命令注释(不执行)3.光标在命令区的任何位置回车,都会依次执行该命令区所有命令。
> 2+3   #没有结束符,执行后会显示警告:语句没输完
Warning, incomplete statement or missing semicolon
> 2+3;   会输出执行结果
> 2+3:   不会输出执行结果,但结果可用作以后计算使用
寻求帮助:
1.Help(帮助)菜单按类查。
2.?后接命令(可以是命令的前几个字母)help(命令)查。
> ?plot            #查作图命令的帮助
>?plo             #plot的前三个字母
>help(plot);
3. 查命令内容
info(命令);查函数作用             usage(命令)查调用格式
example(命令)查命令使用例子     related(命令)查命令相关条目
> example(plot);
4.索引查     ?index[索引类]
索引类:library标准函数库     packages专用软件包      libmisc混合函数库
        statements命令        expressions表示类        datatypes数据类型
        tables表与数组        procedures过程函数       misc附件
> ?index[function]
文件操作:Maple作业面文件以 .m, .ms, .wms(windows)后缀,这种文件只能在Maple下打开。
1writeto(文件名),这时作业面输入的命令及执行结果都以文本形式保存到指定文件内,直到命令writeto(terminal)为止,恢复屏幕显示。中间的执行结果屏幕不显示。如果要继续写,用appendto(文件名)注意:1.若是已有文件,writeto为重写。2. writetoappendto写的文件不能调入作业面。
2Save `文件名.m`可保存作业面的变量赋值状态。用read `文件名.m` 读入作业面内存。
注意:文件名要打 ` 号,该号为键盘左上角 ~ 键。
3保存(打开)作业面文件:
1)用菜单中File(文件)菜单点save(保存),这时出现对话框,在文件名处输入文件名,点确定即可保存文件(这时文件名后自动带后缀msmws)。打开则在File中点open,在对话框到文件名确定即可。
2)用工具栏中文件夹和软盘图标打开、保存文件。
3)退出作业面时,按系统提示保存文件。选择‘是’保存,选择‘否’不保存,选择‘取消’返回作业面。
4. 剪切、复制、撤消:将要剪切、复制部分涂黑,用工具栏中相应图标或用Edit菜单中cut(剪切)copy(复制)paste(粘贴)或用键盘Ctrl+xCtrl+cCtrl+v等完成。
界面设置:interface(选项=选项有ansi 打印突出maple关键字 echo回声 errorbreak 出错中断 indentamount labelling标号%1  labelwidth 标号宽  patchlevel  plotdevice  plotoptions  plotoutput  postplot preplot prettyprint输出类型 prompt 提示符quiet安静  screenheight屏高 screenwidth屏宽 showassumed terminal 终端 verboseproc version 版本warnlevel 报警
例如:
>interface(echo=2,prompt=’# --- >’);提示符变为# --- >
>interface(verboseproc=2);可以查看所用函数的源程序
>print(unassign);就会显示函数(命令)unassign的源程序了
直接用运算符
+
<=
小于等于
-
>=
大于等于
*
=
等于
/
<> 
不等
^**
乘方或幂
->
箭头算子
$
序列生成
=
赋值符
@
复和
or
逻辑或
@@
多重复和
and
逻辑与
&*
不可交换乘
not
逻辑非
.
小数点
union
集合并
..
连续
intersect
集合交
分隔
minus
集合差
%
前一次运行结果
limit
极限(第一个字母大写为极限号)
””%%
前二次运行结果
diff
导数(第一个字母大写为导数符号)
”””
前三次运行结果
int
积分(第一个字母大写为积分符号)
阶乘
sum
求和(第一个字母大写为求和号)
<>
大于,小于
plot
作图
‘…’
字符符号
solve
方程求解
 
 
 
 
 
 
 
 
特殊常数Pi(p大写)I(复数单位)infinity(无穷)
>Pi;infinity;
基本初等函数:开方sqrt、以e为底指数explogsincostancotseccsc、反三角(加arc)、双曲shchthcth、反双曲(加arc)等。
>sin(5);
>exp(1);
数值显示:eval(a)值,evalf(a)浮点值,evalf(a,n) n位有效数浮点值,evalc复数值,evalm矩阵值evalb布尔代数值,allvalues所有值,valus符号运算值
>eval(sin(5));evalf(sin(5)); evalf(exp(1),8);
>evalc(ln(I)),evalc(sin(1+I)));  #逗号分隔表示几个数作为数组输出
>Diff(x*sin(x),x$2):=value();
定义计算精度(有效数字)Digits:=n.
>Digits:=100;evalf(Pi);
定义变量范围:
>assume( a>0 );#定义a>0
>assume(z,real);#定义z是实数变量
赋值: y:=表达式或数;将表达式或数赋值给变量Y。
assign()   将上一次运算结果作赋值(定义)
alias(a=b)  定义a为b。当一个命令较长、使用频率较高时可用此将命令定义为一个简单符号。
>x:=3;y:=sin(x);z:=sin(u)*exp(v);
序列:1.seq(f(i),I=a..b); 2.a$n; 3.op([数表]); 4.a,b,…;
>2$3;#生成三个2构成的序列
>h:=u,v,w,x,y,z:h[2..4];#生成序列h,并察看第二到第四个元素
>seq(i^2/3,I=1..5);
注:用nops([序列名]);求序列长度。
集合(set):花括号表示集合,内部元素无顺序。可以用并、交、差运算。
>a:={1,3,4,2,7};b:=a union {3,5,6};a intersect {3,5,7};
>b[3..5];
>op(b);#将集合b转换为序列
列表(list):方括号表示列表,内部元素有序。可用op(a)转换为序列或{op(a)}转换集合
映射、代换、转换:map(过程名,表达式);
                  subs(替换值,表达式);
                  convert(表达式,形式)
>map(f,x+y*z);map(f{a,b,c});map(diff,x+y*z,y);
>A:=array([[1,x],[x,x^2]]);map(diff,A,x);
>f:=x^2*sin(x)/exp(x):subs(x=Pi/2,f);subs(x=Pi/4,f);
>convert(9,binary);convert($(1..10),+);convert($(1..10),set);
可转换类型及使用方法用:  ?convert查询
调用软件包:with(软件包名)
软件包:plots图形包       plottools图形工具包  simplex线性规划(单纯形法)包
        linalg线性代数包  stats概率统计包      student大学生包
        numaapprox数值逼近combinat组合数学     Detools微分方程工具
        geomatry欧氏几何  geom3d三维欧氏几何    group
        numtheory数论     powseries幂级数       projgeom射影几何
使用不同运算系统,应调入相应软件包,此时,该软件包中所有命令将被调入。调用命令用分号结束,会显示该包调入的命令,冒号结束不显示。
恢复初始状态(包括退出软件包)restart
>with(simplex):  #调入为单纯形法软件包,会显示:新的最大、最小
>maximize(2*x+3*y,{x<=2,y<=4},NONNEGATIVE);
> restart:minimize(2*x+3*y,{x,y},{x=-1..2,y=-1..4});先恢复初始状态,退出单纯形法,才能求函数在一个区域的普通最大、最小值。
> maximize(x^2,{x},2..7);
>x:=2:x;restart:x;
取整运算:
round四舍五入   trunc向0取整   ceil向-∝取整   floor向∝取整   frac小数部分
>x:=23.581;y:=23.321;
>round(x),round(y);trunc(x),trunc(y);frac(x);ceil(x),ceil(y);floor(x), floor(y);
>round(-x),round(-y);trunc(-x),trunc(-y);frac(-x);ceil(-x),ceil(-y);floor(-x),floor(-y);
最大公约数(式)与最小公倍数(式):
igcd最大公约数    gcd最大公约式   ilcm最小公倍数    lcm最小公倍式
>gcd(x^2+2*x+1,x^2-2*x-3);
第三章  作图:
    作图有两个软件包。(1)图形软件包,用with(plots)调入。(2)图形工具包with(plottools)
图形包)中有下列作图命令:
animate, animate3d动画changecoords改变坐标系 complexplot, complexplot3d复函数图 conformal contourplot contourplot3d coordplot coordplot3d  cylinderplot柱坐标函数图densityplot密度图display display3d图函数显示fieldplot fieldplot3d区域图gradplot      gradplot3d梯度图implicitplot implicitplot3d隐函数图 inequal listcontplot listcontplot3d listdensityplot  listplot listplot3d loglogplot logplot matrixplot odeplot微分方程数值解图 pareto pointplot pointplot3d点图polarplot极坐标图polygonplot polygonplot3d多边形图 polyhedraplot replot rootlocus semilogplot setoptions setoptions3d作图选项设置 spacecurve空间曲线图 sparsematrixplot sphereplot球坐标图 surfdata  textplot  textplot3d tubeplot
工具包中有下列图形工具:
arc arrow 箭头circle cone 圆锥cuboid长方体 curve曲线cutin cutout  cylinderdisk 圆盘dodecahedron十二面 ellipse椭圆ellipticArc椭圆弧 hemisphere半球 hexahedron 六面体hyperbola双曲线 icosahedron二十面体line线段octahedron八面体 pieslice point        polygon多边形rectangle矩形semitorus  spheretetrahedron四面体 torus
第一节  二维曲线图:
一.基本命令(不需调图形包)
plot({f1(x),f2(x),…},x=a..b,选项);一元函数曲线
plot(f,a..b,选项);      作过程函数图
    x=a..b(中间两点)表示变量x在[a,b]区间。
后面可有如下选项:
(1)scaling坐标尺度控制,两个值CONSTRAINED和UNCONSTRAINED(等长和不等长);
(2)axes(坐标架)有四个选项frame(边上),boxed(箱),normal(正常),none(没有)
(3)coords(选坐标系)常用有polar极坐标,cylindrical柱坐标,spherical球坐标;
(4)numpoints(节点数);
(5)resolution(水平密度);
(6)color(颜)有:黑black 白white 红red 黄yellow 兰blue 绿green 金gold 褐brown灰gray, grey  茶maroon  橙orange  碧绿aquamarine  海兰navy  桃红coral  兰绿cyan  土黄khaki 紫红magenta 粉红pink 深紫plum 黄褐tan 天兰turquoise 兰紫violet 麦黄wheat  红绿兰RGB  彩HUE;
(7)x(y)tickmarks(坐标刻度数)
(8)style(风格):point点,line线,patch缺补
(9)discont(连续性控制)
(10)title(标题)
(11)thickness(线粗):0,1,2,3几个值
(12)linestyle(线型):后跟数字
(13)symbol(点形状):box框,cross叉,circle圈,point点,diamond菱型
(14)font(字体):[family,style,size]
(15)titlefont(标题字体)
(16)axexfont(坐标轴记号字体)
(17)labelfont(坐标轴标号字体)
(18)view(显示部分)
>plot(x^2,x=-3..3,linestyle=20);
>plot(y-5*x,x=-5..5,linestyle=30);#函数中有Y
>plot(2*x^3-6*x,x=-2.5..2.5,style=point,symbol=box);
>plot([4*x-x^2+2,x^2,3*x+1],x=-2..5,color=[red,blue,green],linestyle=[20,20])
>f:=10*sin(x)*exp(-x^2):#先定义函数
>plot(f,x=-2..5,color=green,linestyle=20);作上函数图
>f:=x->sin(x)*exp(x):
>plot(f(x),-2..5);#用箭头(或过程)定义的函数,函数要用f(x),区间的自变量可省略
>plot([4*x-x^2+2,x^2,3*x+1],x=-2..5,color=[red,blue,green],style=point,symbol= [circle,cross]);
根据曲线图,再交点
> plot([4*x-x^2+2,x^2],x=-2..5,color=[red,blue,green]
>solve(4*x-x^2+2=x^2,x);
二.参数方程曲线:
plot([x(t),y(t),2],x=a..b,y=c..d,选项)
>plot({[sin(t),cos(t),t=0..2*Pi],2*x-1},x=-2..2,y=-2..2);
三.动画曲线:
动画曲线不是基本作图命令,必需先调入图形包,才能运行。
Aninate(f(x,t),x=a..b,2,选项);   其中t为参数
当点击动画图后,会显示动画按钮,由按钮控制动画。
> with(plots):animate(sin(t*x),x=-2*Pi..2*Pi,t=.5..4,color=1,linestyle=30);
> animate(exp(-x)-t,x=-2..2,t=-2..2,linestyle=30);
> animate({2*x^2,2*x+t},x=-2..2,t=-2..1);
> animate( {x-x^3/u,sin(u*x),u*cos(4*x)}, x=0..Pi/2,u=1..6 ,color= red);
四.极坐标
> plot([sin(4*x),x,x=0..2*Pi],coords=polar,thickness=3);
> plot([cos(t),t,t=0..2*Pi],coords=polar);
>plot([1,t,t=0..2*Pi],coords=polar,color=green);
> with(plots):animate([sin(x*t),x,x=-4..4],t=1..4,coords=polar,numpoints=100,frames=100);
> with(plots):s := t->100/(100+(t-Pi/2)^8): r := t -> s(t)*(2-sin(7*t)-cos(30*t)/2):
> animate([u*r(t)/2,t,t=-Pi/2..3/2*Pi],u=1..2,coords=polar,axes=frame,color=green);
注:如果函数由f:=proc(x)定义或由f:=x->定义,作图由plot(f)plot(f,a..b)plot(f(x),x=a..b)
五.多边形及填: polygon([顶点坐标],颜)       要调用图形工具包
曲边梯形面积:y=sin(x),y=0,x=π/2所围图形面积。
>x:=seq([i*Pi/100,sin(i*Pi/100)],i=0..50):#将图形分成小曲边梯形,并计算顶点坐标
>with(plots):with(plottools):p:=polygon([x,[Pi/2,0]],color=red):#作多边形填红
>display(p);
六.隐函数图:implicitplot(方程,范围,选项);
注:二元方程为平面曲线,没有等号默认为等于0
>with(plots):implicitplot(x^2/4+y^2=1,x=-2..2,y=-2..2);
>implicitplot(x^2/4+y^2=1,x=-2..2,y=-2..2,scaling=CONSTRAINED);
> implicitplot(
第二节  三维图形:
一.曲面图:  plot3d(二元函数,x范围,y范围,选项);后面为选项如前
> plot3d(x^2+y^2,x=-2..2,y=-2..2,color=0.1);
> plot3d((1.3)^x * sin(y),x=-1..2*Pi,y=0..Pi,coords=spherical,style=patch);
> plot3d([1,x,y],x=0..2*Pi,y=0..2*Pi,coords=toroidal(10),scaling=constrained);
> plot3d(sin(x*y),x=-Pi..Pi,y=-Pi..Pi,style=contour);
二.动画图   animate3d(函数,自变量范围,参数范围,…);
用with(plots)先调入图形包。
> with(plots):
> animate3d(t*((x)^2+y^2),x=-3..3,y=-3..3,t=-1..1);
>animate(sin(t*x),x=-Pi..Pi,t=0..4);
三.三维曲线图:  plot3d([x(t),y(t),z(t)],2],2,选项)
>plot3d([cos(t),sin(t),t],t=0..3*Pi,z=a..b);
四.参数方程曲面图:  plot3d([f(x,y),g(x,y),h(x,y)],x=a..b,y=c..d,选项);
>plot3d([r*cos(t),r*sin(t),r],r=0..3,t=0..2*Pi);#圆锥
五.隐函数图:   implicitplot3d(三元方程,x=a..b,y=c..d,2,选项);
>with(plots):implicitplot3d(x^2/4+y^2=z,x=-2..2,y=-2..2,z=0..3);#椭圆抛物面
第三节   数据图
一.散点图:plot([[x1,y1], [x2,y2],……[xn,yn]],style=point)
>plot([[1,4],[3,7],[3,13],[4,5]],color=green,style=point):
二.数据连线图:plot([[x1,y1], [x2,y2],……[xn,yn]]);
    或定义图函数:curves([[x1,y1], [x2,y2],……[xn,yn]]);用display显示
>plot([[1,4],[3,7],[3,13],[4,5]],color=green):
>with(plottools):l:=curve([[1,4],[3,7],[3,13],[4,5]],color=blue):with(plots):display(l);
三.多边形:plot([[x1,y1], [x2,y2],……[xn,yn],[x1.y1]]);
    或定义图函数:ploygons([[x1,y1], [x2,y2],……[xn,yn]]);用display显示
>plot([[1,4],[3,7],[3,13],[1,4]],color=green):
> p:=polygon([[1,4],[3,7],[3,13]],color=green):
> with(plottools):display(p);
四.大写plot命令作数据图
图函数:点points,线curves,多边形polygons,文字text等,也必须大写
>PLOT(POLYGONS([[1,4],[3,7],[3,13]]),COLOUR(HUE,0.2))
>PLOT(CURVES([[0,0],[1,1],[2,1]]),COLOUR(HUE,0.5))
> PLOT(POINTS([1,1],[2,3],[3,2]),COLOUR(HUE,1.5))
> PLOT(TEXT([2,2],'x'),COLOUR(HUE,0.7))
>PLOT(POINTS([0,0],SYMBOL(DIAMOND)),TEXT([0,0],'`Origin`',ALIGNBELOW,ALIGNRIGHT,FONT(HELVETICA,OBLIQUE,10)),CURVES([[-3,0.5],[3,0.5]],THICKNESS(3), LINEST YLE(4)),TEXT([0,0.5],'`Dotted`',ALIGNBELOW),TEXT([3.1415,0],'p',FONT(SYMBOL,12)),TEXT([-3.1415,0],'P',FONT(SYMBOL,12)),POLYGONS([[-2,-0.25],[-2,-0.5],[2,-0.5],[2,-0.25]],C OLOUR(HUE,0.5)),TEXT([0,-0.37],'`Red`',COLOUR(RGB,1,0,0)),AXESSTYLE(FRAME), VIE W(-4..4,-1..1) );
第四章  微积分
第一节  函数:
一.基本初等函数:绝对值abs、开方sqrt、以e为底指数exp、log、ln、log10、sin、cos、tan、cot、sec、csc、反三角arc、双曲sh,ch,th,cth、反双曲arc等。
>sin(5);exp(1);
二.定义函数:
(1)  赋值 f=  表达式; (后赋值将替换以前的赋值加单引号表示符号变量)
(2)  箭头算子法 f=x->表达式、f:=(x,y)-> 表达式;
(3)  过程 f=proc(x)  if 条件 then elif 条件 then…… else fi  end  定义分段函数,这里x是过程带的参数。(这样定义的分段函数不能求极限、导数积分,但可以作为maple中命令)
(4)  转换法 unapply(表达式,自变量,将表达式转换为箭头算子函数
(5) 定义分段函数 f:=piecewise(条件1,表达试1,条件2,表达试2,……)
         f:=x->piecewise(条件1,表达试1,条件2,表达试2,……)
这样定义的分段函数可以求极限、导数、积分等运算。其中piesewise为分段函数命令。
(1)形式定义的函数需定义自变量值,才能计算函数值,或用subs(x=a,f)计算x=a点函数值;(2)(3)(4)形式定义函数可以用f(a)f(a,b)计算x=a点函数值。
函数可以用assume(0<x)定义自变量范围。如果是0<x<1应该用assume(0<x,x<1)
>y:=x^2-5*x+3;y(3);subs(x=3,y);diff(y,x);subs(x=8,”);
>y:=x->x^2-5*x+3;y(3);
>f:=unapply(sqrt(x^2+y^2),x,y);f(3,4);
>p:=proc(x) if x>1 then x^2-1 else 2*(1-x) fi end:p(2);
三.函数运算(加、减、乘、除、复合、展开、合并、化简)
> f:=x->ln(x)+1:g:=y->y^2:
> h:=g@f@g:h(exp(2));h:=f@@4:h(z);h:=f+g:h(z);h:=f-g:h(z);h:=f*g-f/g:h(z);#其中@号为复合运算号,@@则为连续复合
>expand(sin(x+y));#展开
>combine(”);#合并
>simplify(表达式);#化简
注:函数复合运算必须是箭头算子、过程、转换法定义的函数
第二节  极限:
      limit(f(x), 极限点,选项)   Limit为极限号(可用value看值)
选项有:左leftright,省略则为普通极限
注:不能对过程函数直接计算。
一.x=a点极限   limit(f(x)x=a)
>Limit((x-sin(x))/x^3,x=0)=limit((x-sin(x))/x^3,x=0);
>Limit(exp(1/x),x=0)=limit(exp(1/x),x=0);
>Limit(exp(1/x),x=0,left)=limit(exp(1/x),x=0,left);
>Limit(exp(1/x),x=0,right)=limit(exp(1/x),x=0,right);
>Limit(exp(x)-x)^(1/x):”=value(”);
二.x趋向无穷极限  limit(f(x),x=infinity)
> Limit((x^2-3*x+2)/(5*x^2-4),x=infinity)=limit((x^2-3*x+2)/(5*x^2-4),x=infinity);
> Limit(x^sin(x),x=0)=limit(x^sin(x),x=0);
> Limit((x^2-3*x+2)/(5*x-4),x=infinity)=limit((x^2-3*x+2)/(5*x-4),x=infinity);
> Limit(sin(x),x=infinity)=limit(sin(x),x=infinity);
x趋向正负无穷大极限,在infinity前直接加+-号即可
> Limit(exp(x),x=-infinity)=limit(exp(x),x=-infinity);
注:函数若由箭头算子、过程、转换法定义,求极限函数要用f(x)形式
>y:=x->exp(x):limit(y,x=3);limit(y(x),x=3);
第三节.导数
一. diff(f,x1,x2,…)  x1,x2,…为各次求混合导数的自变量
 diff(f,x$m,y$n)   m,n分别为对自变量x、y求导阶数
 Diff 为求导符号,可用value显示值
注:不能对过程函数直接使用
> Diff(exp(x^2),x)=diff(exp(x^2),x);
> Diff((exp(x^2)+x^3)/sin(x),x)=diff((exp(x^2)+x^3)/sin(x),x);
> Diff(log(x+sqrt(1+x^2)),x)”=avlue(”);
> simplify(");
>Diff(log(x+sqrt(1+x^2)),x$2):”=simplify(avlue(”));
>Diff(x^2*cos(y),x,y$3)=diff(x^2*cos(y),x,y$3);
>diff(exp(sqrt(x^2+y^2)+x),x,y);subs(x=3,y=4,);evalf()#计算函数在(3,4)点混合导数值
注:函数若由箭头算子、过程、转换法定义,求导函数要用f(x)形式
>y:=x->sin(1/x):diff(y,x);diff(y(x),x)
二.隐函数导数:  diff(方程,自变量及阶数);
1.将方程中函数变量全部写成自变量函数形式(如y(x)),再求导。
>f:=x^2+x*exp(y(x))=x*y(x);diff(f,x);dy/dx=solve(",diff(y(x),x));
>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(",diff(y,x));
三.导数算子: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=nn个解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);
>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);
> 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
> 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)调入幂级数软件包。
    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](",x,10);#也可以这样直接调用
>a := powseries[powexp](x):
>b := powseries[tpsform](a, x, 5);
第五章  线性代数
with(linalg)调入线性代数系统
矩阵输入:matrix(m,n,[a11,a12,…a1n,a21,…a2n,…,am1,…,amn])或,1..n,
[[a11,…,a1n],…,[am1,…,amn]])  extend(A,m,n) 矩阵A增加m行n列
向量:vector([a11,a12,…,a1n])或,[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,",7,7);
> band([1],5);copyinto(b,",1,3);
运算:加,减,数乘  A+B,A-B,a*A,a*A+c*B等,用evalm()显示. 矩阵乘积multiply(A,B)
增广矩阵augment(A,B,…)或concat(A,B,…)  纵向增广矩阵 stack(A,B,…)
转置transpose(A)  行列式det(A)  伴随adj(A)  逆inverse(A)或A^(-1)  求秩rank(A)
化阶梯:gausselim(A,'r','d') r为A的秩,d为A行列式,用backsub(")求解  gaussjord(A,'r','d')?
> evalm(A)+evalm(B)=evalm(A+B);C:=concat(A,b);stack(A,B);
> gausselim(C,'r','d');r;rank(A);d;det(A);
> gaussjord(C,'r','d');
> inverse(A);multiply(A,");adj(A);multiply(A,");
解线性方程组 Ax=b:
写线性方程组geneqns(A,x,b),解方程linsolve(A,b,'r',x)其中b为向量
> geneqns(A,x,b);linsolve(A,b,x);
特征值,特征向量
eigenvals(A)   eigenvects(A) 加radical显根号形式,implicit显复数形式
注:求数值解时,矩阵应数值化evalf(A)。一般四阶以上没有解析解。
特征矩阵charmat(A,t);特征多项式charpoly(A,x),相似变换frobenius(A,'p')
标准型jordan 判断相似issimilar(A,B,'p')  p为变换矩阵,
正定矩阵分解cholesky(A) 判断正交orthog(A)
> eigenvals(matrix(2,2,[1,2,2,4]));
> eigenvects(matrix(2,2,[1,2,2,4]));
> frobenius(matrix(2,2,[1,2,2,4]),'p');
> multiply(inverse(p),",p);
> jordan(matrix(2,2,[1,2,2,4]),'p');orthog(p);
初等变换:交换行(列)swaprow(A,i,j) swapcol(A,i,j) i行(列)乘m  mulrow(A,i,m) mulcol(A,i,m) i行(列)乘m加到j行(列)addrow(A,i,j,m)  addcol(A,i,j,m)
> addrow(A,2,5,-2);mulcol(A,3,3);
其他矩阵操作:取子阵submatrix(2) 取行列row(A,i..j)  col(A,i..j)
删除行列delrow(A.i..j) delcol(A,i..j)   向量组的基basis(向量组)
行(列)向量基rowspace(A,'d')colspace(A,'d')d个数;正交化GramSchmidt(向量组)
标准化normalize(向量);数量积dotprod(U,V);向量积crossprod(U,V)
> submatrix(A,[2,4,6],[1,4,5]);row(A,2);col(A,4);
> rowspace(A,'d');d;
> multiply(A,b);
>u := vector( [1,x,y] );v := vector( [1,0,0] );
>dotprod(u, v);
>A := matrix(3,2, [2,0,3,4,0,5]);
> rowspace(A);
> colspace(A);
第六章  概率统计
    with(stats) 调入统计软件包
统计包中又有7个子包:
    (1)describe描述性数据分析     (2)fit拟合回归分析
    (3)transform数据形式变换       (4) random按分布产生随机数
    (5)statevalf分布的数值计算     (6) statplots统计绘图
    (7)anova方差分析
第一节      描述性数据分析discribe
格式      describe[函数](数据)
有22个描述性统计量函数:
平均值mean方差variance标准差standarddeviation协方差covariance
相对标准差(标准差/平均值)coefficientofvariation计数(非缺失) count
计缺失数countmissing  中位数median范围range数据求和sumdata众数mode
歪斜度skewness(三阶中心矩/σ^3) 曲率度kurtosis(四阶中心矩/σ^4)
几何平均值geometricmean r次均方moment线性相关数linearcorrelation
平均绝对偏差meandeviation和谐平均值harmonicmea(n/Σ1/xi)
二次平均值quadraticmean查百分位数percentile 查分数位数据quantile
查四分位数quartile查十分位数decile
> with(stats):
> a1:=[3,4,5];a2:=[31,32,33];
>describe[mean](a1),describe[mean](a2);
>describe[standarddeviation](a1);describe[standarddeviation](a2);#标准差相同
>describe[coefficientofvariation](data1): evalf("); #相对标准差大
>describe[coefficientofvariation](data2): evalf("); #相对标准差小
>describe[sumdata](a2);
>describe[mode]([1,2,5,3,7,3,2,3,6,3,4]);#众数为3
第二节      拟合回归分析
有函数  fit[leastsquare]最小二乘法   fit[leastmediansquare] 最小中间二乘法
格式fit[leastsquare[[变量],回归方程,{系数}]]([[第一个变量数据],[第二个],……])
回归方程及系数省略,为线性回归;变量数据写成点的坐标,输出结果将是错误的。
with(stats):
> fit[leastsquare[[x,y,z]]]([[1,2,3,5],[2,4,6,8],[3,5,7,10]]);
> fit[leastsquare[[x,y], y=a*x^2+b*x+c, {a,b,c}]]([[1,2,3,4,5],[2,3,4,5,7]]);
> with(stats):
> fit[leastsquare[[x,y,z,s]]]([[1,2,3,5,6],[1,2,4,6,8],[3,5,7,8,10],[9,5,3,2,0]]);
>with(stats):fit[leastsquare[[x,y],y=a+b*x+c*x^2+d*x^3,{a,b,c,d}]]([[1,2,3,4,5,6,7,8,9,10],[4,7,13,20,30,38,42,45,47,49]]);
>PLOT(POINTS([1,4],[2,7],[3,13],[4,20],[5,30],[6,38],[7,42],[8,45],[9,47],[10,49]),SYMBOL(DIAMOND),COLOUR(RGB,1,0,1));plot(-46.93806744+45.05867515*x^(1/3),x=1..10, linestyle=20, color=green);
第三节  数据形式变换transform
格式 
可用函数apply classmark cumulativefrequency deletemissing divideby  frequency moving  multiapply  scaleweight  split standardscore statsort  statvalue  subtractfrom  tally tallyinto
第四节  按分布产生随机数random
 格式   1.  random[分布[参数]](n)
        2.  f:=random[分布[参数]]('generator[m]');定义该分布的随机数发生器,用'f()'$n产生所需随机数,n为产生随机数个数。
可用概率分布有:
(离散型) 二项分布binomiald[n,p]          均匀分布discreteuniform[a,b]
         经验分布empirical[list_prob]    超几何hypergeometric[N1,N2,n]
         反二项分布negativebinomial[n,p] 泊松分布poisson[mu]
(连续型) 均匀uniform[a,b]      指数exponential[alpha,a] 正态normald[mu,sigma]
        卡方chisquare[n]        t-分布studentst[n]       F-分布fratio[n1,n2]
        伽马gamma[a,b]        拉普拉斯laplaced[a,b]      罗吉斯特logistic[a,b]
        对数正态lognormal[mu,sigma] 贝塔beta[nu1,nu2]    柯西cauchy[a,b]
        威布尔分布weibull[a,b]
> with(stats):p:=random[poisson[15]]('generator[2]'):#建立参数为15的泊松分布随机数发生器p
> 'p()'$10;#用上面的随机数发生器产生10个随机数
> random[normald[30,2]](10);#生成10个正态分布随机数
第五节  分布的数值计算statevalf
有函数:cdf分布函数,       icdf分布函数反函数,     pdf概率密度函数,
       dcdf离散型分布函数idcdf离散型分布函数反函数,pf离散型概率函数
格式:      statevalf[函数,分布[参数]](点或概率值)
> with(stats):
> statevalf[cdf,normald](4);#标准正态分布在4点函数值
> statevalf[icdf,chisquare[14]](0.9);#卡方分布0.1临界值
> statevalf[icdf,normald[1,2]](.9);#N(1,2)变量概率为0.9的点
> alias(t=statevalf[icdf,studentst[12]]):t(0.95);#t-分布用别名alias中t代替对应命令,求0.05临界值
> statevalf[icdf,fratio[2,10]](0.95);#F-分布0.05临界值
第六节  统计绘图statplots
函数有:boxplot,histogram,notchedbox, quantile, quantil2, scatter1d, scatter2d, symmetry, xscale,xshift,xyexchange
> with(stats):
> Xdata := [4.535, 4.029, 5.407, 1.605, 5.757, 3.527, 7.890, 8.159, 6.092,
>          13.442, 2.845, 5.172, 3.277, 8.810, 3.657, 7.226, 3.851, 2.162,
>           2.668, 4.692]:
> Ydata:=  [7.454, 4.476, 2.873, 5.476, 9.975,-1.476, 1.033, 1.140, 4.813,
>            .450, -.788, 9.389, 4.811,-3.107, 4.407, 5.534, 1.691, -.789,
>   1.684, 1.605]:
> plots[display](statplots[scatter2d](Xdata,Ydata), view =[0..17,-4..14], axes=FRAME);#散点图
> plots[display](statplots[boxplot[15]](Ydata),view =[0..17,-4..14], axes=FRAME);#框式图在右
> plots[display](statplots[xyexchange](statplots[notchedbox[12]](Xdata)),view =[0..17,-4..14], axes=FRAME);#刻痕框图在上
> plots[display](statplots[notchedbox](Xdata));
> plots[display](statplots[histogram](Xdata));#直方图
第七节  方差分析anova
仅有一个函数oneway,故直接用with(stats[anova])调入软件包
> with(stats[anova]):with(stats[describe]):
> a1:=[10,11,8]:a2:=[Weight(9,3),11]:a3:=[missing,10,11,7,12]:data:=[a1,a2,a3];
> oneway(data);
> a1:=[1,2,3,4,5]:a2:=[3,5,2,6,7]:a3:=[4,0,8,-1,7]:
> data:=[a1,a2,a3]:oneway(data);
>eval([a3]);
注:输出结果[[a1,b1,c1][a2,b2,c2][a3,b3]][a1,a2,c1/c2,d]中a3=a1+a2为总自由度,a1为组自由度;b3=b1+b2为总方差,b1为组间方差;ci=bi/ai;d为自由度是a1,a2的F-分布不超过c1/c2的概率。
 
第七章  线性规划
先用with(simplex):调入单纯形法软件包。这时系统内最大、最小命令为解线性规划。
maximize(目标函数,{约束},变量类型) minimize(目标函数,{约束},变量类型)
目标函数必须是线性的,约束为等式或不等式,变量类型有NONNEGATIVE非负和  UNRESTRICTED无限制两种,省略为无限制。
例如:用一斤肉二斤菜四斤面包饺子、包子,包子每个用肉、菜、面分别为0.1,0.3,0.2斤,售价0.5元;饺子每个用肉、菜、面分别为0.015,0.04,0.01斤,售价0.06元。求各生产多少,收入最大?
>with(simplex):maximize(0.5*x+0.06*y,{0.1*x+0.015*y<=1,0.3*x+0.04*y<=2,0.2*x+0.01*y<=4,x=3},NONNEGATIVE);assign(");subs(",0.5*x+0.06*y);
第八章  程序语句
循环语句:
1.for 变量 from 起点 by 步长 to 终点 do 语句 od
2.while 条件 do 语句 od
3.for 变量 in 集合 while 条件 do 语句 od
条件语句:
1.if 条件 then 语句 fi
2.if 条件 then 语句 else 语句 fi
3.if 条件 then 语句 elif 语句 (elif…) else 语句 fi
退出语句:exit退出循环   return退出过程
>x:=0:for I from 1 to 100 do if x>100 then exit else x:=x+I if od:x;
>restart:x:=0:j:=0:while j<=100 do x:=x+j:j:=j+1 od:x;
过程函数:
利用程序语句及maple命令可以编写一些应用程序,并且这些程序在maple中可以当做一个命令或函数来使用,并且可以利用maple将程序与其它一些语言(如C语言等)转换。
过程函数是为解决某些特定问题,将一些命令组合在一起作成的maple可以直接调用的函数。
过程函数的格式:
过程名:=proc(参数1,参数2,……)
               local  L1,L2,……;             局部变量
              global  G1,G2,……;             全局变量
              options    选项1,选项2,……;   选项部分
             description   `字符`;              描述部分
             过程体;                            maple语言
             end                                 过程函数必须加结束语句
过程中参数可以是空的;如:proc()
也可以加说明:用 :: 参数类型    限制参数类型;如:proc(x :: numeric,y :: numeric)  过程两个参数,为数字。
参数也可以用args代表所有实际输入的参数,并可用nargs测量参数的长度。如:求数列最大值的过程。
> Max:=proc()
>  local i,m;
>  if nargs=0 then RETURN(FAIL) fi;#测量参数列长度
>  m:=args[1];
>  for i from 2 to nargs do
>   if args[i]>m then m:=args[i] fi;
>  od;
>  m;
>  end:
> Max(2,5,4,7,4,6,4);
                                  7
第九章  实验实例
实验1:梯子问题
靠墙有一宽为a高为b的不可压花棚,至少要多长的梯子才能越过花棚斜靠墙上?
假设:1.梯子是直的;2.墙与地面垂直;3.地面是平面;4.花棚的顶与墙垂直。
模型1:考查过(3,2)点的直线与两轴交点间长度最小值,若≥7,就可以在x轴上求出最小值点,放置梯子。
模型2:(仿真模拟)将梯子一端放置于x轴上不同点,并令其过(3,2)点,由长度7求出另一端点x坐标,当x≤0,则梯子长度够用,对应x轴上的点为梯子放置点,若始终x>0,则梯子不够长。
示意图:
>with(plottools):l:=animate(2-2*(x-3)/t,x=0..6,t=1.7..4,color=green,linestyle=20):p:=polygon([[0,0],[0,2],[3,2],[3,0]],color=red,linestyle=20,thickness=3):display(l,p);
优化模型:梯子看作直线,棚宽a=3,棚高b=2作为平面上点的坐标,考查过(3,2)点直线y-2=-k(x-3)在两轴交点间距离的最小值。两轴交点为(0,2+3k),(3+2/k,0),交点间距离L=[(3+2/k)^2+(2+3k)^2]^0.5  (k为斜率绝对值,也可用x轴交点x0作为自变量)
> l:=((3-2/k)^2+(2-3*k)^2)^0.5:
> plot(l,k=0.1..5);
> l0:=minimize(l,k,0.1..10);
> fsolve(l=7.0235,k);
用极值函数extrema:(以-k=-2/(t-3)替换上式,t为直线与x轴交点)
> l:=(t^2+(2+6/(t-3))^2)^0.5:
> readlib(extrema):extrema(l,{},t,'s');evalf(s);
> assign(s[3]):evalf(l);t:='t':
仿真:y-2=k(x-3),取x=x0,y=0求出k=2/(3-x0),由此得长度=7时另一端点x坐标7cos(a):
x1=x0-7*(x0-3)/[2^2+(3-x0)^2]^0.5,对x0取步长对实际仿真。
> restart:
> a:=3.1:
> for x0 from 3 by 0.01 to 7 do  x:=x0+7*(3-x0)/sqrt(4+(3-x0)^2):if x<a then a:=x else print(x0,x);x0:=7 fi od:
> restart:
>a:=seq([3+.3*n,0*n],n=1..10):b:=seq([3+.3*n-7*.3*n/sqrt(4+(.3*n)^2),14/sqrt(4+(.3*n)^2)],n=1..10):
> with(plots):with(plottools):
>for i from 1 to 10 do l[i]:=line(a[i],b[i],color=blue,thickness=2) od:
>h:=polygon([[0,0],[0,2],[3,2],[3,0]],color=red,thickness=3):display(l[1],l[2],l[3],l[4],l[5],l[6],l[7],l[8],l[9],l[10],h);
思考问题:当梯子长L=6.5,棚高b=2时,要保证梯子不会压坏花棚,花棚最宽可为多少。
实验2:陈酒出售时机问题
生产新酒t年后出售值为R0*exp(a*sqrt(t)),银行利率为r(按复利计算)问何时出售最好。新酒随窖藏时间增值为R0*exp(a*sqrt(t))银行利率为r(按复利计算)问何时出售最好。对R0=50万元,r=0.05,a=1/6。分别考虑2年、6年、8年后用这笔钱投资应该采取的策略。
模型1(模拟):方案1:用钱时再出售。模型就是所给函数;方案2:现在出售存入银行。指数模型;方案3:t年出售再存入银行,直到用钱。模型为分段函数。模拟比较。
>R1:=50*exp(sqrt(n)/6):R2:=50*1.05^n:R3:=50*exp(sqrt(n)/6)*1.05^(t-n):R0:=evalf(seq([n,R1,R2],n=0..16),5);
> R:=array(1..8):
> for t from 2 by 2 to 8 do R[t]:=evalf(seq([n,R3],),5) od;t:='t':
>plot([exp(sqrt(x)/6),exp(0.05*x),x],x=0..15,0..3,color=[red,green,blue],linestyle=20);
模型2(优化):考虑在哪一年出售折合现在的存钱数最大。由复利计算公式,R0元本金t年后总值:R=limiteR0*(1+r/n)^(nt)=R0*exp(r*t),得折现公式:R0=R*exp(-r*t),
> R0:=exp(sqrt(x)/6-0.05*x):
> plot(R0,x=0..10,linestyle=20);
>maximize(50*exp(sqrt(x)/6-0.05*x),x,0..10);fsolve(50*exp(sqrt(x)/6-0.05*x)=1.48996,x);
> diff(50*exp(sqrt(x)/6-0.05*x),x);fsolve(");evalf(50*exp(sqrt(")/6-0.05*"));
>readlib(extrema):extrema(50*exp(sqrt(x)/6-0.05*x),{},x,'s');eval(s);
思考问题:如果预计两年后,利率下将一个百分点,何时出售最好?
         x3          100       x6
  200            x4        400           200
 
         x2          x5        x7
300             x1         600             x8
         500         200      400
300             x9          x10             500
        600                   700
实验3:交通流量问题
右图是一部分城区交通流量(每小时过车数)
试建立数学模型讨论网络中未知部分的具体流量。
假设:
(1)各节点没有滞留车辆;
(2)网络内也没有滞留。
模型:利用节点平衡可以得到9个方程,再利用网络平衡可以得到一个方程,这些都是线性方程,因此,这是一个有10个方程10个未知数的线性方程组问题。
x2+x4-x3=300,x4+x5=100+400,x7-x6=400-200,x1+x2=300+500,x1+x5=600+200,x7+x8=600+400,x9=600+300-500,x10-x9=200,x10=700+400-500,x3+x6+x8=500+600+2*300+200+100-700-300=1000
用线性代数求解:
>with(linalg):
>A:=matrix([[0,1,1,-1,0,0,0,0,0,0],[0,0,0,1,1,0,0,0,0,0],[0,0,0,0,0,-1,1,0,0,0],[1,1,0,0,0,0,0,0,0,0],[1,0,0,0,1,0,0,0,0,0],[0,0,0,0,0,0,1,1,0,0],[0,0,1,0,0,1,0,1,0,0],[0,0,0,0,0,0,0,0,1,0],[0,0,0,0,0,0,0,0,-1,1],[0,0,0,0,0,0,0,0,0,1]]):B:=array([300,500,200,800,800,1000,1000,400,200,600]):
>rand(A),rand(contract(A,B));
>linsolve(A,B,'r',C);
思考问题:如果要求各线路流量尽可能均匀,试求网络中未知部分流量。
实验4:线性规划
设工厂生产A、B、C、D四种产品,每单位用甲、乙、丙、丁原料为(A)1,0.5 ,0.3,0; (B)0.7,2,0.5,0.8;(C)2,1,0.2,3;(D)0.5,1,2,2。售价分别是5,7,12,11,(1)如果各原料总计有1000,800,800,500单位,问各生产多少收入最大?(2)若原料价格分别是0.5,0.7,0.6,1,问各生产多少利润最大及原料使用情况?
数学模型:x[i]记第i种产品产量,(1)为求 5x[1]+7x[2]+12x[3]+11x[4]满足x[1]+0.7x[2]+2x[3]+0.5x[4]<=1000,0.5x[1]+2x[2]+x[3]+x[4]<=800,0.3x[1]+0.5x[2]+0.2x[3]+2x[4]<=800,0.8x[2]+3x[3]+2x[4]<=500的最大值。
(2)只是目标函数不一样。
因为受到的约束与目标函数都是线性运算,故也称为线性最优化问题或线性规划问题。
>with(simplex): >maximize(5*x+7*y+12*z+11*w,{x+.7*y+2*z+.5*w<=1000,.5*x+2*y+z+w<=800,.3*x+.5*y+.2*z+2*w<=800,.8*y+3*z+2*w<=500},NONNEGATIVE);
>maximize(5*x+7*y+12*z+11*w-.5*(x+.7*y+2*z+.5*w-1000)-.7*(.5*x+2*y+z+w-800)-.6*(.3*x+.5*y+.2*z+2*w-800)-(.8*y+3*z+2*w-500),{x+.7*y+2*z+.5*w<=1000,.5*x+2*y+z+w<=800,.3*x+.5*y+.2*z+2*w<=800,.8*y+3*z+2*w<=500},NONNEGATIVE);
> assign(");#定义上述运算结果,即x,y,z,w值定义为求出的解
最优值及原料剩余:
>R=5*x+7*y+12*z+11*w;l1=-(x+.7*y+2*z+.5*w-1000);l2=-(.5*x+2*y+z+w-800);l3=-(.3*x+.5*y+.2*z+2*w-800);l4=-(.8*y+3*z+2*w-500);
思考问题:如果有其他单位想购买该厂原料,应该如何对这些原料定价?
实验5:投入产出问题
设本年度农业生产的产品中:农业自身消耗118,工业消耗137,其它方面消耗43,剩余的500被消费掉了,308留作积累,230出口。工业生产的产品分配去向为:206,835,273,950,524,266。其它方面的产品分配去向为:47,482,237,550,100,128。农、工、其它方面的折旧:115,320,107。报酬:520,510,414。纯收入:330,770,470。试根据上述数据求来年总产分别为1500,7000,3000时各部门所能提供的终产品(消费、积累、出口)及终产品要求分别为1100,1800,800时,各部门应如何安排生产。(单位:亿元) 
产品去向模型:X1=X11+X12+X13+Y1,X2=X21+X22+X23+Y2,X3=X31+X32+X33+Y3,取aij=Xij/Xj表示第j部门单位产品使用i部门产品数(价值),则X1=a11X1+a12X2+a13X3+Y1,X2=a21X1+a22X2+a23X3+Y3,X3=a31X1+a32X2+a33X3+Y3,Y=消费+积累+出口
价值构成模型:Xi=X1i+X2i+X3i+Mi  (i=1,2,3) 或 Xi=a1iXi+a2iXi+a3iXi+Mi
Mi为第i部门的折旧与创造新价值(工资、利润)之和。
若记 , , , 
则产品分配模型可以简记为:X=AX+Y,或 (E-A)X=Y
产品构成模型可以简记为:X=DX+M,或 (E-D)X=M
with(linalg):
> x:=matrix(3,1):y:=matrix(3,1):d:=matrix(3,1):m=matrix(3,1):a:=matrix(3,3):
>a[1,1]:=118:a[1,2]:=137:a[1,3]:=43:y[1,1]:=1038:d[1,1]:=115:a[2,1]:=206:a[2,2]:=835:a[2,3]:=2734:y[2,1]:=1740:d[2,1]:=320:a[3,1]:=47:a[3,2]:=482:a[3,3]:=237:y[3,1]:=778:d[3,1]:=107:m[1,1]:=850:m[2,1]:=1280:m[3,1]:=884:
> for j from 1 to 3 do x[j,1]:=a[j,1]+a[j,2]+a[j,3]+y[j,1]: od:
> for i from 1 to 3 do for j from 1 to 3 do a[i,j]:=a[i,j]/x[j,1] od od;
> E:=band([1],3):
>x0:=matrix([[1500],[7000],[3000]]):y=evalf(evalm(multiply(E-a,x0)));y0:=array([1100,1800,800]):x=evalf(linsolve(E-a,y0));
思考问题:在题目所给两种情况下,来年创造的新价值分别为多少?
实验6:报童问题
报童在报馆批发报纸销售。批发价为b,零售价为a,销售不完退回价为c,a>b>c,确定报童销售策略。(取a=0.5,b=0.3,c=0.05元)
下面是50天的销售数据:459,  624, 509, 433, 815, 612, 434, 640, 565, 593, 926, 164, 734, 428, 593, 527, 513, 474,  824, 862, 775, 755, 697, 628, 771, 402, 885, 292, 473, 358, 699, 555, 84, 606,  484, 447,  564, 280, 687, 790, 621, 531, 577, 468, 544, 764, 378, 666, 217, 310
假设:1.报童销售收入只与批发报纸数及销售数量有关,不受其他因素影响。
2.报纸销售量很大,故可近似作为正态分布
记销售量为X(随机变量),分布为p(x),批发量为N,收入为R
则R=(a-b)N,(X≥N),(a-b)X-(b-c)(N-X),(X<N)
平均收入ER=
求ER最优值得。由 ,得  由此查分布表,可求得N。
>data:=[459,  624, 509, 433, 815, 612, 434, 640, 565, 593, 926, 164, 734, 428, 593, 527, 513, 474,  824, 862, 775, 755, 697, 628, 771, 402, 885, 292, 473, 358, 699, 555, 84, 606,  484, 447,  564, 280, 687, 790, 621, 531, 577, 468, 544, 764, 378, 666, 217, 310]:
>with(stats):jun:=evalf(describe[mean](data));cha:=describe[standarddeviation](data):#计算数据的均值与标准差
>statevalf[icdf,normald[jun,cha]]((.5-.3)/(.5-.05));#查正态分布值,得N
思考问题:如果已知需求量分布
350以下
375
400
425
450
475
500
525
550
575
600
625
650以上
0.01
0.01
0.02
0.05
0.1
0.2
0.22
0.2
0.1
0.05
0.02
0.01
0.01
hue trunc函数
确定报童销售策略。
实验7:击舰问题
我方正前方1海里处发现一敌舰以0.4海里/分速度横向航行,立刻发射制导,若速度为0.8海里/分,求敌舰航行多远及何时被击中。
模型1:(仿真模拟)
我方位置取为[0,0],敌舰初始位置为[1,0],t时刻敌舰及位置为[1,Zt]、[Xt,Yt],取时间间隔为s,计算不同时刻敌舰位置,求出何时击中。
假设:制导始终对准敌舰。则t时刻x轴方向速度
Vx=0.8*(1-Xt)/[(1-Xt)^2+(Zt-Yt)^2]^0.5,y轴方向速度
Vy=0.8*(Zt-Yt)/[(1-Xt)^2+(Zt-Yt)^2]^0.5,
Zt+s=Zt+0.4*s,Xt+s=Xt+s*Vx,Yt+s=Yt+s*Vy
>restart:
>x[1]:=0:y[1]:=0:z[1]:=0:a[1]:=0.8:b[1]:=0:
>for t from 2 to 60 do z[t]:=z[t-1]+0.4*0.1: x[t]:=x[t-1]+a[t-1]*0.1: y[t]:=y[t-1] +b[t-1]*0.1:a[t]:=0.8*(1-x[t-1])/sqrt((1-x[t-1])^2+(z[t-1]-y[t-1])^2):b[t]:=0.8*(z[t-1]-y[t-1])/sqrt((1-x[t-1])^2+(z[t-1]-y[t-1])^2)^0.5:if 1-x[t]<0.001 then break fi od:u:=seq([x[i],y[i]],i=1..60):v:=seq([1,z[i]],i=1..60):'t'=t;'z'=z[t];
>PLOT(CURVES([u],COLOUR(HUE,1)),POINTS(v,COLOUR(HUE,0.2)),VIEW(0..1,0..1));
(微分方程模型)
整理得  和
代入前式,得   
>dsolve({diff(y(x),x$2)=sqrt(1+(diff(y(x),x))^2)/(2-2*x),y(0)=0,D(y)(0)=0},y(x)):allvalues(");
思考问题:如果不是制导,只是普通直线发射,如何才能击中敌舰?
实验8:广告策略问题
产品的销售随广告投入而增加,但销售速度会随销售率增加逐渐减慢,且随着市场饱和,增长速度也趋向0,试根据市场数据(时间序列)确定广告策略。[500,200][1000,500][0,1200][0,900][1000,740][900,1000][1200,1500][2000,3500][1800,2780][4000,3800][3800,4120]。
取A(t)为t时刻广告投入,s(t)为t时刻销售量,ds/dt销售速度,l响应系数,M饱和量, n衰减系数     则  ds/dt=l*A(t)(1-s(t)/M)-n*(s(t)-s0)    (s0为无广告销售量)
>with(stats): >evalf(fit[leastsquare[[A,As,s,ds]]]([[500,1000,100,100,1000,900,1200,2000,1700,4000,3750],[500*0,1000*250,100*500,100*1500,1000*1000,900*700,1200*1200,2000*1500,1700*3000,4000*2400,3750*4120],[0,250,500,1500,1000,700,1200,1500,3000,2400,4120],[250,250,1000,-500,-300,500,300,1500,600,1720,880]])):#用数据求动态模型系数
>dsolve({diff(s(t),t)=77.77556782+.5688790174*100-.00002794273673*100*s(t)-.1778079854*s(t),s(0)=0},s(t),type=mumeric):assign("):#取A(t)=100求解
思考问题:如果采取分段投如方式,会有什么结果?
 
作图练习
 应用Maple数学软件包,完成下列函数的图形显示(注意选择自变量的取值范围):
    1.f(x)=sin2x/x2
    2.f(x)=(3x3-x2-3x+5)/(x2-2x-1);
    3.曲线 x=tcos(2t),y=sin(2t);
    4.曲线 x=t-sint,y=1-cost;
    5.x2+y2=1
    6.x2+y2-5xy+15=0;
    7.r=e;
8.z=cos(xy);
    9. y1=sin(ax),y2=asinx; (作振幅、频率的动态图)
    10.y=sin(x)/x;y=(1+1/x)x;
    11.y=-2x2,y=2x+t(作在一个图中,并观察解的变化);
    12.z2=x2+y2;
    13.z=a(x2+y2);(观察a不同时图形变化)
    14.x=cost,y=sint,z=t;
微积分作业
极    限
应用Maple,完成下列函数的极限:
 
导    数
 应用Maple数学软件包,完成下列函数求导数:
  1.y=,y',y'';
  2.y=xsin(cosx),求 y',y'';f'(0);f''(π).
  3.y= ,y',y'';
  4.求 x2+xy2=   关于x的偏导数;
  5.求 z=  关于x,y的偏导数以及二阶的偏导数.
  6.y=3x4-4x2-5x,求f'(x),f'(0);
  7.y=   ,求y的十阶导数在x=0的值.
8.设h=ycos(xy), 用微分算子求关于x,y的偏导数以及二阶偏导数。
积    分
 应用Maple数学软件包,完成下列函数积分:
 1:#求不定积分: ;
 2:#求不定积分:
 3:#求定积分:
 4:#求定积分:
 5:#求定积分的数值解:
方程求解
 应用Maple数学软件包,完成下列方程求解:
1.作f(x)=3x3+x2+3x+5图形,并将f(x)分解因式、 求根。
2.y=12x5+32x4-57x3-213x2-104x+60;画出x在-3到3,y在-2到2的图形,分解因式,求根。
3.求方程 (x-1)(x2+x+1)=0的根,并将根表示出来;
4.解不等式:(1)x2-5x+2<0;(2)x2-5x+2>=0;
5.求解方程组: x2y2=0,x-y=1
6.求解方程:  23x5+105x4-10*x2+17x =0在[-1..1]的根,与全部根。
求极值
 应用Maple数学软件包,完成下列函数求极值:
1.求:y=x3-3x2+7 的极值与极值点。
2.求: y=ln(x2+1)在[-1..2]上的最大,最小值与最大,最小值点。
3.用条件极值命令求y=x3/(x-1)2. 极值与极值点:
4.用条件极值命令求函数 f(x,y)=x2+xy+2y2,满足条件 x+y=12 的极值与极值点。
5.设 y=-3x3+7x2-3x,根据图形,求函数的极值与极值点。
函数的级数展开与数列、级数的求和
 应用Maple数学软件包,完成下列级数求和与展开
1.求级数∑1/k2和(k=1,2,…,∞)
2.求级数∑(-1)k/5k和(k=1,2,…,∞)。
3.求级数∑n!/2n和(n=0,1,2,…,∞)。
4.求级数∑2n/n!,(k=1,2,…,∞)的和。
5.将f(x)=e-x^2展开为x的幂级数(选择阶数为10项)。
6.将f(x)=x2/ sqrt(1+x)展开为x-1的幂级数(选择阶数为5项)。
7.将f(x)=cos(x2)展开为x-π/2的幂级数(选择阶数为5项)。
微分方程与差分方程求解
应用Maple数学软件包,完成下列微分方程、差分方程的求解:
1.求微分方程 xy'=yln(xy)-y 的通解及直接显示解。
2.求微分方程 v'(t)+2t=0,v(1)=5 的特解.
3.求微分方程 y''-(a+b)y'+aby=0 的通解.
4.求 y''=xsinx 的积分曲线方程,使积分曲线通过点(0,1/2)且在该点的切线斜率为 2。
5.求微分方程 x2y'+y=ex 的通解.
6.设某人每年向银行存入R0元,银行年利率为r,则第n年该人银行总资产为R(n)=(1+r)R(n-1)+R0,求第19年末该人在银行的总资产。
7.求差分方程y(n+1)=3y(n)-2y(n-1)的通解及满足y(0)=2,y(1)=1的特解。
8. 求差分方程y(n+1)=3y(n)+10y(n-1)的通解及当y(0)=2,y(1)=1时,求y(5)。
线性代数
1. 设A= ,B= ,b=[1 3 2 7]
(1)求A*B (2)取B的前4列为C,计算A+C,A-C/3 (3)求A的行列式,逆矩阵、伴随矩阵(4)求B的秩(5)作线性方程组BX=b并求通解。
2.用高斯消元法解线性方程组:
    2x1+3x2-5x3+ x4-3x5=7
      x1+4x2+ x3-3x4+ x5=4
    5x1+15x2-2x3-8x4    =19
并给出系数矩阵的秩
3. 设A= 求A的行列式,特征值、特征向量及标准形。
4.将向量α1=[1 2 3 4],α2=[2 1 3 1],α3=[-1 1 2 1]标准正交化。
5. 对1题中矩阵B作初等变换:
(1)第二列乘上5 (2)第一行乘3加到第三行(3)交换1,5两列。
6. 用程序语句计算1+2+…+100
7.用程序语句计算1、3题中两个A矩阵对应元素乘积,并且当1题中元素小于0时,乘积项取为0。
8. 解线性规划问题:min(2x+3y+5z)
             其中    x+2y+2z>=30
                    3x+y+2z>=20
                    2x+y+10z>=40
                  x>=0,y>=0,z>=0
9.作模型解问题:设甲乙丙三地有某物资500、700、1200吨,A、B、C三地各需600、800、500吨,甲乙丙到A距离分别为80,100,120公里,到B分别是80,70,60公里,到C为100,90,130公里。试选择一个合理的物资调运方案。
概率统计
1.现有(x,y)的数据(0.1,3),(0.5,4),(0.4,4),(1,8)(1.2,10)(0.7,6)求回归方程y=ax+b和y=ax2+bx+c。
2.设X∽N(150,100),求概率(1)P(X>135);(2)P(X≤160);(3)若已知P(X>u)=0.05,求u
3.生成15个参数λ=8的泊松分布随机数。
4.设总体X的样本为1723,1658,1699,1702,1687,1688,1716,1689,求平均值,标准差,并检验X为正态分布总体时,总体均值是否为μ=1690。
5.设(x,y)的数据(0.1,4.9),(0.5,35.5),(0.4,23),(1,440)(1.2,1200)(0.7,96)求回归方程y=aebx(注:先化为z=lny=lna+bx=A+bx求回归,再由a=eA解出a,得所求回归方程)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。