2.根据下图,使用switch语句如何使用设计一个能够完成加、减、乘、除、取余等运算的简单计算器。

利用你现有的c语言知识 设计开发一个简易计算器,可进行加、减、乘、除、求余运算。_百度知道
利用你现有的c语言知识 设计开发一个简易计算器,可进行加、减、乘、除、求余运算。
1、要有口令验证模块:密码正确进入菜单,密码错误要提示错误。
2、设计菜单:1加法运算,2减法运算,3乘法运算,4除法运算,5求余运算6退出系统。3、利用多分支结构选择某功能后,进行相应运算。
4、每个模块单独编写成自定义函数
5、程序由main(...
我有更好的答案
#include &stdio.h& float numA = 0;float numB = 0;float temp = 0;void calc(){
printf(&\n&);
printf(&======欢迎使用计算器=====&);
printf(&\n&);
printf(&请输入第一个数:&);
scanf(&%lf&,&numA)
printf(&请输入第二个数:&);
scanf(&%lf&,&numB);
printf(&请输入你的选择:\n1加法运算\n,2减法运算\n,3乘法运算\n,4除法运算\n,5求余运算\n,6退出系统\n&);
char choose = 0;scanf(&%c&,choose);
switch (choose) {
case '1':
temp = numA + numB;
case '2':
temp = numA - numB;
case '3':
temp = numA * numB;
case '4':
temp = numA / numB;
case '5':
temp = (int)numA % (int)numB;
case '6':
.printf(&已经成功退出系统!&);
printf(&输入错误,请重新输入!&);
print(&\n&);
} }void login(){
printf(&请系统登录输入密码:&);
char password [100]=&&;
scanf(&%s&,&password)
if (password==&admin&) {
printf(&你输入的系统密码不正确,请重新输入!\n&);
printf(&\n&);
} } void main() {
printf(&结果是:%lf&,temp); }
采纳率:61%
来自团队:
你好!你dos下的黑窗口吗
能再给另外一份不同的吗
为您推荐:
其他类似问题
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。扫二维码下载作业帮
3亿+用户的选择
下载作业帮安装包
扫二维码下载作业帮
3亿+用户的选择
设计一个简单的计算器,完成加,减、乘、除运算.运算结果保留2位小数【例如在运行时输入算术式:3+4 那么会输出结果是3.00+4.00=7.00】
作业帮用户
扫二维码下载作业帮
3亿+用户的选择
输入的是整数还是浮点数 包括括号吗 只有两个数的运算吗?请把要求写清楚#include#includeint main(){double a,b;scanf("%lf%c%lf",&a,&x,&b);if(x=='+')printf("%.2lf\n",a+b);else if(x=='-')printf("%.2lf\n",a-b);else if(x=='*')printf("%.2lf\n",a*b);else if(x=='/'&&b!=0)printf("%.2lf\n",a/b);else printf("除数不能为0\n");return 0;}
为您推荐:
其他类似问题
扫描下载二维码用switch语句编程设计一个简单的计算器程序,哪错了?_百度知道
用switch语句编程设计一个简单的计算器程序,哪错了?
用switch语句编程设计一个简单的计算器程序,要求根据用户从键盘输入的表达式:
计算表达式的值,指定的算术运算符为加(+)、减(-)、乘(*)、除(/)。
本实验程序是在例4.8的基础上,增加如下要求:
(1)如果要求程序能进行...
我有更好的答案
switch(op)后不加分号就可以了,我刚调完,可以运行
采纳率:49%
2楼的回答是对的!
switchPHP的?
就是一个C++程序题,不是PHP
为您推荐:
其他类似问题
switch的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Mathematica 教程第 1 章 Mathematica 概述1.1 1.2 1.3 运行和启动:介绍如何启动 Mathematica 软件,如何输入并运行命令 表达式的输入:介绍如何使用表达式 帮助的使用:如何在 mathematica 中寻求帮助第 2 章 Mathematica 的基本量2.1 2.2 2.3 2.4 2.5 2.6 数据类型和常量:mathematica 中的数据类型和基本常量 变量:变量的定义,变量的替换,变量的清除等 函数:函数的概念,系统函数,自定义函数的方法 表:表的创建,表元素的操作,表的应用 表达式:表达式的操作 常用符号:经常使用的一些符号的意义第 3 章 Mathematica 的基本运算3.1 3.2 3.3 多项式运算:多项的四则运算,多项式的化简等 方程求解:求解一般方程,条件方程,方程数值解以及方程组的求解 求积求和:求积与求和第 4 章 函数作图4.1 4.2 4.3 4.4 4.5 二维函数作图:一般函数的作图,参数方程的绘图 二维图形元素:点,线等图形元素的使用 图形样式:图形的样式,对图形进行设置 图形的重绘和组合:重新显示所绘图形,将多个图形组合在一起 三维图形的绘制:三维图形的绘制,三维参数方程的图形,三维图形的 设置第 5 章 微积分的基本操作5.1 5.2 5.3 5.4 5.5 5.6 函数的极限:如何求函数的极限 导数与微分:如何求函数的导数,微分 定积分与不定积分:如何求函数的不定积分和定积分,以及数值积分 多变量函数的微分:如何求多元函数的偏导数,微分 多变量函数的积分:如何计算重积分 无穷级数:无穷级数的计算,敛散性的判断第 6 章 微分方程的求解6.1 6.2 微分方程的解:微分方程的求解 微分方程的数值解:如何求微分方程的数值解第 7 章 Mathematica 程序设计7.1 7.2 模块:模块的概念和定义方法 条件结构:条件结构的使用和定义方法 7.3 7.4循环结构:循环结构的使用 流程控制第8章8.1 8.2 8.3 8.4 8.5 8.6 8.7 8.8 8.9 8.10Mathematica 中的常用函数运算符和一些特殊符号:常用的和不常用一些运算符号 系统常数:系统定义的一些常量及其意义 代数运算:表达式相关的一些运算函数 解方程:和方程求解有关的一些操作 微积分相关函数:关于求导,积分,泰勒展开等相关的函数 多项式函数:多项式的相关函数 随机函数:能产生随机数的函数函数 数值函数:和数值处理相关的函数,包括一些常用的数值算法 表相关函数:创建表,表元素的操作,表的操作函数 绘图函数:二维绘图,三维绘图,绘图设置,密度图,图元,着色,图 形显示等函数 8.11 流程控制函数 第 1 章 Mathematica 概述1.1 Mathematica 的启动和运行Mathematica 是美国 Wolfram 研究公司生产的一种数学分析型的软件, 以符号计算见长, 也具有高精度的数值计算功能和强大的图形功能。 假设在 Windows 环境下已安装好 Mathematica5.0,启动 Windows 后,在“开始”菜单 的“程序”中单击 ,就启动了 Mathematica5.0,在屏幕上显示如图 1 的Notebook 窗口,系统暂时取名 Untitled-1,直到用户保存时重新命名为止。图1 输入 1+1,然后按下 Shif+Enter 键,这时系统开始计算并输出计算结果,并给输入和 输出附上次序标识 In[1]和 Out[1],注意 In[1]是计算后才出现的;再输入第二个表达式, 要求系统将一个二项式 x5 + y5 展开,按 Shift+Enter 输出计算结果后,系统分别将其标识 为 In[2]和 Out[2],如图 2。图2 在 Mathematica 的 Notebook 界面下, 可以用这种交互方式完成各种运算, 如函数作图, 求极限、解方程等,也可以用它编写像 C 那样的结构化程序。 在 Mathematica 系统中定义了 许多功能强大的函数,我们称之为内建函数(built-in function), 直接调用这些函数可以 取到事半功倍的效果。这些函数分为两类,一类是数学意义上的函数,如:绝对值函数 Abs[x],正弦函数 Sin[x],余弦函数 Cos[x],以 e 为底的对数函数 Log[x],以 a 为底的对 数 函 数 Log[a,x] 等 ; 第 二 类 是 命 令 意 义 上 的 函 数 , 如 作 函 数 图 形 的 函 数 Plot[f[x],{x,xmin,xmax}],解方程函数 Solve[eqn,x],求导函数 D[f[x],x]等。 必须注意的是: Mathematica 严格区分大小写,一般地,内建函数的首写字母必须大写,有时一个函数 名是由 几个 单词构 成, 则每 个单词 的首 写字 母也必 须大 写, 如:求 局部 极小 值函数 FindMinimum[f[x],{x,x0}等。第二点要注意的是,在 Mathematica 中,函数名和自变量之 间的分隔符是用方括号“[ ]” ,而不是一般数学书上用的圆括号“( )” ,初学者很容易犯这 类错误。 如果输入了不合语法规则的表达式, 系统会显示出错信息, 并且不给出计算结果, 例如: 要画正弦函数在区间[-10,10]上的图形,输入 plot[Sin[x],{x,-10,10}],则系统提示“可 能有拼写错误, 新符号‘plot’ 很像已经存在的符号‘Plot’ ” , 实际上,系统作图命令 “ Plot ” 第一 个字 母必 须大 写, 一般 地,系 统内 建函 数首 写字 母都 要大 写。 再输入 Plot[Sin[x],{x,-10,10} 如图 3。 ,系统又提示缺少右方括号,并且将不配对的括号用紫色显示,图3 一个表达式只有准确无误, 方能得出正确结果。 学会看系统出错信息能帮助我们较快找 出错误,提高工作效率。 完成各种计算后,点击“文件” “退出” 退出,如果文件未存盘, 系统提示用户存盘,文件名以“.nb”作为后缀,称为 Notebook 文件。以后想使用本次保存 的结果时可以通过 “文件” “打开” 菜单读入, 也可以直接双击它, 系统自动调用 Mathematica 将它打开。1.2 表达式的输入Mathematica 提供了多种输入数学表达式的方法。除了用键盘输入外, 还可以使用工 具样或者快捷方式健入运算符、矩阵或数学表达式。1. 数学表达式二维格式的输入Mathematic 担提供了两种格式的数学表达式。 形如 x/(2+3x)+y*(x-w)的称为一维格式, 形如x y ? 的称为二维格式。 2 ? 3x x ? w 你可以使用快捷方式输入二维格式, 也可用基本输入工具栏输入二维格式。 下面列出了 用快捷方式输入二维格式的方法: 数学运算 数学表达式 分式 n 次方 开 2 次方 下标 例如输入数学表达式 x2 按键 x x Ctrl+/ Ctrl+^ 2 n x 2x 2xnxCtrl +2 x Ctrl+_( x ? 1)4 ,可以按如下顺序输入按键: 2x ? y(,x,+,1,),Ctrl+ ^,+,4,→,Ctrl+/,Ctrl+2,2,x,+,y 另外也可从“文件”菜单中激活“控制面板” “Basic Input”工具栏,也可输入,并且 使用工具栏可输入更复杂的数学表达式,如下图 4。图4图52.特殊字符的输入MathemMatica 还提供了用以输入各种特殊符号的工具栏。基本输入工具栏包含了常用 的特殊字符(上图), 只要单击这些字符按钮即可输入。 若要输入其它的特殊字符或运算符号, 必须使用从“文件”菜单中激活“控制面板” “Complete Characters”工具栏,如上图 5, 单击符号后即可输入。 1.3Mathematica 的联机帮助系统用 Mathematica 的过程中, 常常需要了解一个命令的详细用法, 或者想知系统中是否有 完成某一计算的命令,联机帮助系统永远是最详细、最方便的资料库。1.获取函数和命令的帮助在 Notebook 界面下,用 ?或 ?? 可向系统查询运算符、函数和命令的定义和用法,获 取简单而直接的帮助信息。 例如, 向系统查询作图函数 Plot 命令的用法 ?Plot 系统将给 出调用 Plot 的格式以及 Plot 命令的功能(如果用两个问号 “??” , 则信息会更详细一 些)。? Plot* 给出所有以 Plot 这四个字母开头的命令。2.Help 菜单任何时候都可以通过按 shift+F1 键或点击 “帮助” 菜单项 “帮助浏览” , 调出帮助菜单, 如图 6 所示。图6 其中的各按钮用途如下: Built-in Function 内建函数,按数值计算、代数计算、图形和编程分类存放 Add-ons & Links 程序包附件和链接 The Mathematica Book 一本完整的 Mathematica 使用手册 Getting Started/Demos 初学者入门指南/多种演示 Tour Front End 漫游 Mathematic 菜单命令的快捷键,二维输入格式等Master Index 按字母命令给出命令、函数和选项的索引表 如果要查找 Mathematica 中具有某个功能的函数,可以通过帮助菜单中的 Mahematica 使用手 册, 通过其 目录 索引 可以快 速定 位到 自己要 找的 帮助 信息。 例如 :需 要查找 Mathematica 中有关解方程的命令, 单击 “The Mathematica Book” 按钮, 再单击 “Contents” , 在目录中找到有关解方程的节次, 点击相应的超链接, 有关内容的详细说明就马上调出来了。 如果知道具体的函数名, 但不知其详细使用说明, 可以在命令按钮 Goto 右边的文本框中键 入函数名,按回车键后就显示有关函数的定义、例题和相关联的章节。例如,要查找函数 Plot 的用法, 只要在文本框中键入 Plot, 按回车键后显示 Plot 函数的详细用法和例题的窗 口,如图 7。图7 如果已经确知 Mathematica 中有具有某个功能的函数,但不知具体函数名,可以点击 Built-in Functions 按钮,再按功能分类从粗到细一步一步找到具体的函数,例如,要找 画一元函数图形的函数,点击 Built-in Functions →Graphics and Sound→2D Plots→ Plot,找到 Plot 的帮助信息(如图 7)。 第 2 章 Mathematica 的基本量2.1 数据类型和常数1.数值类型在 Mathematic 中,基本的数值类型有四种:整数、有理数、实数和复数。 如果你的计算机的内存足够大,Mathemateic 可以表示任意长度的精确实数,而不受所 用的计算机字长的影响。整数与整数的计算结果仍是精确的整数或是有理数。例如 2 的 100 次方是一个 31 位的整数: ln[1]:=2^100 Out[1]= 在 Mathematica 中允许使用分数, 也就是用有理数表示化简过的分数。 当两个整数相除 而又不能整除时,系统就用有理数来表示,即有理数是由两个整数的比来组成如: In[2]:= Out[2]=实数是用浮点数表示的,Mathematica 实数的有效位可取任意位数,是一种具有任意精 确度的近似实数,当然在计算的时候也可以控制实数的精度。实数有两种表示方法:一种是 小数,另外一种是用指数方法表示的。如: In[3]:=0.239998 Out[3]=0.23998 In[4]:=0.12*10^11 Out[4]=0.12*10^11 实数也可以与整数,有理数进行混合运算,结果还是一个实数。 In[5]:=2+1/4+0.5 Out[5]=2.75 小数表示 复数是由实部和虚部组成, 实部和虚部可以用整数、 实数、 有理数表示。 在 Mathematica 中,用 I 表示虚数单位如: In[6]:=3+0.7I Out[6]=3+0.7i2.不同类型数的转换在 Mathematica 的不同应用中, 通常对数字的类型要求是不同的。 例如在公式推导中的 数字常用整数或有理数表示, 而在数值计算中的数字常用实数表示。 在一般情况下在输出行 Out[n]中,系统根据输入行 In[n]的数字类型对计算结果做出相应的处理。如果有一些特殊 的要求,就要进行数据类型转换。 在 Mathematica 中的提供以下几个函数达到转换的目的: N[x] 将 x 转换成实数 N[x,n] Rationalize[x] Rationalize[x,dx] 举例: In[1]:=N[5/3,20] 将 x 转换成近似实数,精度为 n 给出 x 的有理数近似值 给出 x 的有理数近似值,误差小于 dx Out[1]=1.6666667 In[2]:=N[%,10] Out[2]=1. In[3]:=Rationalize[%] Out[3]= %表示上一输出结果,即%=1.6666667。 第二个输出是把上面计算的结果变为 10 位精度的数字。5 33.数学常数Mathematica 中定义了一些常见的数学常数,这些数学常数都是精确数。 Pi E Degree I Infinity -infinity GondenRatio In[1]:=Pi^2 Out[1]=π2 In[2]:=Pi^2//N Out[2]=9.8696 表示π=3.14159?? 自然对数的底 e=2.71828?? 1 度,π/180 弧度 虚数单位 i 无穷大∞ 负无穷大 -∞ 黄金分割数 0.61803数学常数可用在公式推导和数值计算中,在数值计算中表示精确值。如:4.数的输出形式在数的输出中可以使用转换函数进行不同数据类型和精度的转换。 另外对一些特殊要求 的格式还可以使用如下的格式函数: NumberForm[expr,n] ScientificFormat[expr] EngineergForm[expr] 例如: In[1]:=N[Pi^30,30] 以 n 位精度的实数形式输出实数 expr 以科学记数法输出实数 expr 以工程记数法输出实数 exprOut[1]=8.8 In[2]:=NumberForm[%,10] Out[2]//NumberForm=8.×1014 下面的函数输出按工程记数法表示的指数可被 3 整除的实数 In[3]=EngineeringForm[%%] %%表示上两步的输出结果,即 Out[1] Out[3]//EngineeringForm=821.434×10122.2 变量1.变量的命名Mathematica 中内部函数和命令都是以大写字母开始的标示符,为了不会与它们混淆, 我们自定义的变量应该是以小写字母开始,后跟数字和字母的组合,长度不限。例如: a12,ast,aST 都是合法的,而 12a,z*a,a b(中间有空格)是非法的。另外在 Mathematica 中的变量是区分大小写的。在 Mathematica 中,变量不仅可以存放一个数值,还可以存放表 达式或复杂的算式。2.给变量赋值在 Mathmatica 中用等号=为变量赋值。同一个变量可以表示一个数值,一个数组,一 个表达式,甚至一个图形。如: In[1]:=x=3 Out[1]=3 In[2]:=x^2+2*x Out[2]=15 In[3]:=x=%+1 Out[3]=16 对不同的变量可同时赋不同的值,例如: In[4]:={u,v,w}={1,2,3} Out[4]={1,2,3} In[5]:=2u+3v+w Out[5]=11 对于已定义的变量,当你不再使用它是,为防止变量值的混淆,可以随时用=.清除它 的值,如果变量本身也要清除用函数 Clear[var],例如: In[6]:=u=. In[7]:=2u+v Out[7]=2+2u (上面已定义了 u,v 的值)3.变量的替换在给定一个表达式时其中的变量可能取不同的值, 这是可用变量替换来计算表达式的不 同值。方法为用 expr/.x-&xval,例如: In[1]:=f=x/2+1 Out[1]= 1+x 2In[2]:=f/.x-&1 Out[2]=3 2In[3]:=f/.x-&2 Out[3]=3 如果表达式中有多个变量,也可同时替换,方法为:expr/.{x-&xval,y-&yval,...} In[4]:=(x+y)(x-y)^2/.{x-&3,y-&1-a} Out[4]=(4-a)(2+a)22.3 函数1.系统函数在 Mathmatic 中定义了大量的数学函数可以直接调用, 这些函数其名称一般表达了一定 的意义,可以帮助我们理解。下面是几个常用的函数: Floor[x] Ceiling[x] Sign[x] Round[x] Abs[x] Max[x1,x2,x3??..] Min[x1,x2,x3??..] Random[] Random[R,xmax] Random[R,{xmin,xmax}] Exp[x] Log[x] Log[b,x]不比 x 大的最大整数 不比 x 小的最小整数 符号函数 接近 x 的整数 x 绝对值 x1 ,x2,x3??. 中的最大值 x1,x2,x3??. 中的最小值 0~1 之间的随机函数 0~xmax 之间的随机函数(R 为 Real,Integer,Complex 之一) xmin~xmax 之间的随机函数(R 为 Real,Integer,Complex 之一) 指数函数 ex自然对数函数 lnx 以 b 为底的对数函数 logb xSin[x],Cos[x],Tan[x],Csc[x],Sec[x],Cot[x] 三角函数(变量是以弧度为单位的) ArcSin[x],ArcCos[x],ArcTan[x],ArcCsc[x],ArcSec[x],ArcCot[x] 反三角函数 Sinh[x],Cosh[x],Tanhx[x],Csch[x],Sech[x],Coth[x] 双曲函数 ArcSinh[x], ArcCosh[x], ArcTanhx[x], ArcCsch[x],ArcSech[x],ArcCoth[x] 反双曲函数 Mod[m,n] m 被 n 整除的余数,余数与 n 同号 Quotient[m,n] GCD[n1,n2,n3??]或 GCD[s] m/n 的整数部分 n1,n2, ? 或 s 的最大公约数,s 为数据集合LCM[n1,n2??]或 LCM[s] n1,n2 ? 或 s 的最小公倍数,s 为数据集合 N! N 的阶程 N!! N 的双阶程 Mathematica 中的函数与数学上的函数有些不同的地方, Mathematica 中函数是一个具有 独立功能的程序模块,可以直接被调用。同时每一函数也可以包括一个或多个参数,也可以 没有参数。参数的的数据类型也比较复杂。更加详细的可以参看系统的帮助,了解各个函数 的功能和使用方法是学习 Mathematica 软件的基础。2.函数的定义(1) 函数的立即定义立即定义函数的语法如下 f[x_]=expr 函数名为 f, 自变量为 x,expr 是表达式。在执行时 会把 expr 中的 x 都换为 f 的自变量 x (不是 x_ )。函数的自变量具有局部性,只对所在的函 数起作用。函数执行结束后也就没有了,不会改变其它全局定义的同名变量的值。 请看下面的例子,定义函数 f(x)=xsinx+x2 ,对定义的函数我们可以求函数值,也可绘制 它的图形。 In[1]:=f[x_]=x*Sin[x]+x^2 Out[1]=x 2 +xSin[x] In[2]:=f[1] Out[2]=1+Sin[1] In[3]:=Plot[f[x],{x,-3,3}] 8642-3-2-1123Out[3]= -Graphics对于定义的函数我们可以使用命令 Clear[f] 清除掉,而 Remove[f] 则从系统中删除该函 数。(2) 多变量函数的定义也可以定义多个变量的函数,格式为 f[x_,y_,z_, ?]=expr 自变量为 x,y,z?,相应的 expr 中的自变量会被替换。例如定义函数 f(x,y)=xy+ycosx。 In[1]:=f[x_,y_ ]=x*y+y*Cos[x] Out[1]=xy+yCos[x] In[2]:=f[2,3] Out[2]=6+3Cos[2](3) 延迟定义函数延迟定义函数从定义方法上与即时定义的区别为 “=” 与“:=”延迟定义的格式为 f[x_]:=expr 其他操作基本相同。那么延迟定义和即时定义的主要区别是什么?即时定义函 数在输入函数后立即定义函数并存放在内存中并可直接调用。 延时定义只是在调用函数时才 真正定义函数。(4) 使用条件运算符定义和 If 命令定义函数x?0 ? x ?1 ? 2 如果要定义如: f ( x) ? ? x 0 ? x ? ?1 ? sin x x ? ?1 ?这样的分段函数应该如何定义,显然要根据 x 的不同值给出不同的表达式。一种办法 是使用条件运算符, 基本格式为: f[x_]:=expr/;condition , 当 condition 条件满足时才把 expr 赋给 f(x) 。下面定义方法,通过图形可以验证所定义函数的正确性。 In[1]:=f[x_]:=x-1/;x&=0 f[x_]:=x^2/;(x&-1)&&(x&0) f[x_]:=x-1/;x&= -1 In[4]:=Plot[f[x],{x,-2,2}] 10.5-2-112-0.5-1Out[4]= -Graphics当然使用 If 命令也可以定义上面的函数,If 语句的格式为 If[条件,值 1,值 2],如果 条件成立取“值 1” ,否则取“值 2” ,用 If 语句的定义结果如下: In[5]:=g[x_]:=If[x&=0,x-1,If[x&= -1,Sin[x],x^2]] In[6]:=Plot[g[x],{x,-2,2}]10.5-2-112-0.5-1Out[6]= -Graphics可以看出用 If 定义的函数 g(x)和前面函数 f(x)相同, 这里使用了两个 If 嵌套, 逻辑性比 较强。关于其他的条件命令的进一步讨论请看后面的章节。2.4 表将一些相互关联的元素放在一起,使它们成为一个整体。既可以对整体操作,也可以对 整体中的一个元素单独进行操作。在 Mathematica 中这样的数据结构就称作表 (List) 。表 {a,b,c }表示一个向量;表{{a,b},{c,d}} 表示一个矩阵。1.建表在表中元素较少时,可以采取直接列表的方式列出表中的元素,如{1,2,3} ,请看下面 的操作: In[1]:={1,2,3} Out[1]={1,2,3} 下面是符号表达式的列表: In[2]:=1+%x+x^% Out[2]={1+2x,1+2x+x ,1+3x+x } 下面是把 Out[2]列表中的表达式对 x 求导:2 3 In[3]:=D[%,x] Out[3]={2,2+2x,3+3x } In[4]:=%/.x-&1 Out[4]={2,4,6} 如果表中的元素较多时,可以用建表函数进行建表: Table[f,{i,min,max,step}] Table[f,{min,max}] 以 step 为步长给出 f 的数值表,i 由 min 变到 max 给出 f 的数值表,i 由 min 变到 max 步长为 12Table[f,max] 给出 max 个 f 的表 Table[f,{i,imin,imax},{j,jmin,jmax}, ?.] 生成一个多维表 TableForm[list] 或 list//TableForm Range[n] Range[n1,n2,d] 以表格格式显示一个表 生成一个{1,2, ??,n}的列表 生成{n1,n1+d,n1+d, ?.,n2}的列表下面给出 x 乘 i 的值的表,i 的变化范围为[2,6]: In[1]:=Table[x*i,{i,2,6}] Out[1]={2x,3x,4x,5x,6x} In[2]:=Table[x^2,{4}] Out[2]={x2 ,x2 ,x2 ,x2 } 用 Range 函数生成一个序列数: In[3]:=Range[10] Out[3]={1,2,3,4,5,6,7,8,9,10} 下面这个序列是以步长为 2,范围从 8 到 20: In[4]:=Range[8,20,2] Out[4]={8,10,12,14,16,18,20} 上面的参数变化都是只有一个,也可制成包括多个参数的表,下面生成一个多维表: In[5]:=Table[2i+j,{i,1,3},{j,3,5}] Out[5]={{5,6,7},{7,8,9},{9,10,11}} 使用函数 TableForm 可以以表格的方式输出 In[6]:=%//TableForm Out[6]//TableForm=5 6 7 8 9 7 910 112.表的元素的操作当 t 表示一个表时,t[[i]] 表示 t 中的第 i 个子表。如果 t={1,2,a,b}那么 t[[3]]表示“a” 。 In[1]:=t=Table[I+2,j{I,1,3},{j,3,5}] Out[1]={{7,9,11},{8,10,12},{9,11,13}} In[2]:=t[[2]] Out[2]={8,10,12} 对于表的操作 Mathematica 提供了丰富的函数,详细的可以查阅后面的附录或者系统帮 助。 2.5 表达式1.表达式的含义Mathematica 能处理数学公式,表以及图形等多种数据形式。尽管他们从形式上看起来 不一样,但在 Mathematica 内部都被看成同种类型,即都把他 们当作表达式的形式。 Mathematica 中的表达式是由常量、变量、函数、命令、运算符和括号等组成,它最典型的 形式是 f[x,y] 。2.表达式的表示形式在显示表达式时,由于需要的不同,有时我们需要表达式的展开形式,有时又需要其因 子乘积的形式。 在我们计算过程中可能得到很复杂的表达式, 这时我们又需要对它们进行化 简。常用的处理这种情况的函数就是变换表达式表示形式函数。 Expand[expr] 按幂次升高的顺序展开表达式 Factor[expr] Simplify[expr]4 2以因子乘积的形式表示表达式 进行最佳的代数运算,并给出表达式的最少项形式表达式(x+y) (x+y ) 展开: In[1]:=Expand[(x+y)^4*(x+y^2)] 5 4 3 2 4 2 2 3 3 3 4 2 4 5 6 Out[1]=x +4x y+6x y +x y +4x y +4x y +xy +6x y +4xy +y 还原上面的表达式为因子乘积的形式: In[2]:=Factor[%] Out[2]=(x+y) 4 (x+y 2 ) 多项式表达式的项数较多,比较复杂,在显示时显得比较杂乱,而且在计算过程中没有 必要知道全部的内容;或表达式的项很有规律,没有必要打印全部的表达式的结果, Mathematica 提供了一些命令,可将它缩短输出或不输出。 expr//Short 或 Short[expr] 显示表达式的一行形式 Short[expr,n] 显示表达式的 n 行形式,命令后加一分号“; ” 不输出结果 30 将表达式(1+x) 展开,并仅显示一行有代表项的式子: In[3]:=Expand[(1+ x)^30]//Short Out[3]=1+30x+435x 2 +4060x 3 +&&23&&+ +435x 2 8 +30x 2 9 +x 3 0 将上式分成三行的形式展开: In[4]:=Short[Expand[(1+ x)^30],3] Out[4]=1+30x+435x 2 +405x 4 + 5 25 142506x +&&19&&+142506x + 2 + +435x 2 8 +30x 2 9 +x 3 0 把代数表达式变换到你所需要的形式没有一种固定的模式, 一般情况下, 最好的办法是 进行多次实验,尝试不同的变换并观察其结果,再挑出你满意的表示形式。3.关系表达式与逻辑表达式我们已经知道“=”表示给变量赋值。现在我们来学习一些其它的逻辑与关系算子。关 系表达式是最简单的逻辑表达式,我们常用关系表达式表示一个判别条件。例如:x&0,y=0。 关系表达式的一般形式是:表达式+关系算子+表达式。其中表达式可为数字表达式、字符 表达式或意义更广泛的表达式,如一个图形表达式等。在我们实际运用中,这里的表达式常 常是数字表达式或字符表达式。下面出 Mathematica 中的各种关系算子: x==y x!=y x&y x&=y x&y x&=y x==y==z x!=y!=z x&y&z x&y&z In[1]:=x=2;y=9 Out[1]=9 In[2]:=x&y相等 不相等 大于 大于等于 小于 小于等于 都相等 都不相等 严格递减 严格递增给变量 x,y 赋值,输出后一变量的值,如:Out[2]=False 下面是比较两个表达式的大小: In[3]:=3^2&y+1 上面已设 y=9 Out[3]= False 用一个关系式只能表示一个判定条件, 要表示几个判定条件胡组合, 必须用逻辑运算符 将关系表达式组织在一起,我们称表示判定条件的表达式为逻辑表达式。 下面是常用的逻辑运算和它们的意义: ! && || Xor If 非 并 或 异或 条件LogicalExpand[expr] 展开逻辑表达式 例如下面的例子说明它们的应用: In[4]:=3*x^2&y+1&&3^2==y ( 前面已给 x,y 赋值,x=2,y=9) Out[4]=False In[5]:=3*x^2&y+1||3^2==y Out[5]=True2.6 常用的符号(term) f[x] {} [[i]] % %% %%%(k) %n 圆括号用于组合运算 方括号用于函数 花括号用于列表 双括号用于排序 代表最后产生的结果 倒数第二次的算结果 倒数第 k 次的计算结果 例出行 Out[n] 的结果(用时要小心) 第 3 章 Mathematica 的基本运算3.1 多项式的表示形式可认为多项式是表达式的一种特殊的形式,所以多项式的运算与表达式的运算基本一 样,表达式中的各种输出形式也可用于多项式的输出。Mathematica 提供一组按不同形式表 示代数式的函数。 Expand[ploy] ExpandAll[ploy] Factor[ploy] FactorTerms[ploy,{x,y, ?}] Simplify[poly] FullSimplify[ploy] Collect[poly,x] Collect[poly,{x,y…}] 按幂次展开多项式 ploy 全部展开多项式 ploy 对多项式 poly 进行因式分解 按变量 x,y, ?进行分解 把多项式化为最简形式 把多项式化简 把多项式 poly 按 x 幂展开 把多项式 poly 按 x,y?. 的幂次展开1.下面是一些例子(1) 对 x -1 进行分解 In[1]:=Factor[x^8-1] Out[1]=(-1+x)(1+x)(1+x 2 )(1+x4 ) (2) 展开多项式 (1+x) 5 In[2]:= Expand[(1+x)^5] Out[2]=1+5x+10x 2 +10x 3 +5x 4 +x5 (3) 展开多项式 (1+x+3y) 4 In[3]:= Expand[(1+x+3y)^4] Out[3]=1+4x+6x 2 +4x 3 +x 4 +12y+36xy+36x 2 y+12x 3 y+54y 2 +108xy +54x y +108y +108xy +81y (4) 展开并化简(2+x) 4 (1+x) 4 (3+x) 32 2 2 3 3 4 8In[4]:= Simplify[Expand[(2+x)^4(1+x)^4(3+x)^3]] Out[4]=(3+x) 3 (2+3x+x 2 ) 42.多项式的代数运算多项式的运算有加、减、乘、除运算:+,-,*,/ 下面通过例子说明。 (1) 多项式的加 运算 a 2 +3a+2 与 a+1 相加(后面例子中也使用这两个多项式运算) In[5]:=(a^2+3*a+2)+(a+1)2括号可以不要Out[5]= 3+4a+ a 或者 In[5]:=p1= a^2+3*a+2;p2= a+1;p1+p2 Out[5]= 3+4a+ a 2 (2) 多项式相减 In[6]:=(a^2+3*a+2) -(a+1) Out[6]= 1+2a+ a 2 或者 In[6]:=p1-p2 Out[6]= 1+2a+ a 2 (3) 多项式相乘 In[7]:=(a^2+3*a+2)*(a+1) Out[7]= (1+ a) (2+3a+ a2 ) 或者 In[7]:=p1*p2 Out[7]= (1+ a) (2+3a+ a2 ) In[8]:=Expand[p1*p2] Out[8]=2+5a+4a +a (4) 多项式相除2 3In[9]:=(a^2+3*a+2)/(a+1)2 ? 3a ? a 2 Out[9]= 1? a或者 In[9]:=p1/p2 Out[9]=2 ? 3a ? a 2 1? a(5) 另外使用 Cancel 函数可以约去公因式 In[10]:=Cancel[p1/p2] Out[10]=2+a 两个多项式相除,总能写成一个多项式和一个有理式相加 Mathematic 中提供两个函数 PolynomialQuotient 和 PolynomialRemainder 分别返商式和余式。 例如:x2 1? 2x1 x ? 4 2In[11]:=PolynomialQuotient[x^2, 1+2x,x] Out[11]= ? 商的整式部分In[12]:= PolynomialRemainder[x^2, 1+2x,x] Out[12]=1 4商的余式部分3.2 方程及其根的表示因为 Mathematica 把方程看作逻辑语句。在数学方程式表示为形如“x -2x -3=0”的形 式。在 Mathematica 中“=”用作赋值语句,这样在 Mathematica 中用“==”(两个等号中间 没有空格)表示逻辑等号,则方程应表示为“x^2 -2x -3==0” 。方程的解同原方程一样被看 作是逻辑语句。例如用 Roots[lhs==rhs,vars] 求方程 x 2 -3x+2=0 的根显示为: In[1]:=Roots[x^2-3x+3==0,x] Out[1]=x==1||x==2 这种表示形式说明 x 取 1 或 2 均可 而用 Solve[lhs ==rhs,vars]可得解集形式: In[2]:=Solve[x^2-3x+3==0,x] Out[2]={{x→1},{x→2}}2 1 求解一元代数方程下面是常用的一些方程求解函数: Solve[lhs ==rhs,vars] 给出方程的解集 NSolve[lhs ==rhs,vars] 直接给出方程的数值解集 Roots[lhs ==rhs,vars] FindRoot[lhs ==rhs,{x,x 0 }] 先看 Solve 函数例子: In[3]:=Solve[x^2-2x-3==0,x] Out[3]= {{x→-1},{x→3}} Solve 函数可处理的主要方程是多项式方程。 Mathematica 总能对不高于四次的方程进行 精确求解,对于三次或四次方程,解的形式可能很复杂。 例如求 x 3 +5x+3=0 In[4]:=Solve[x^3+5x+3==0,x] 求表达式的根 求 x 在 x 0 附近的方程的数值解这时可用 N 函数近似数值解: In[5]:=N[%] Out[5]= {{x→-0.5641},{x→0.81i},{x→0.81i}} 当方程中有一些复杂的函数时,Mathematica 可能无法直接给出解来。在这种情况下我 们可用 FindRoot[] 来求解,但要给出起始条件。 例如求 3Cosx=lnx 的解: In[6]:=FindRoot[3*Cos[x] ==Log[x],{x,1}] Out[6]= {x→1.44726} 但只能求出 x=1 附近的解,如果方程有几个不同的解,当给定不同的条件时,将给出 不同的解。如上例若求 x=10 附近的解命令为: In[7]:=FindRoot[3*Cos[x] ==Log[x],{x,10}] Out[7]= {x→13.1064} 因此确定解的起始位置是比较关键,一种常用的方法是,先绘制图形观察后再解。 In[8]:=Plot[{3*Cos[x],Log[x]},{x,1,15}]3 2 12 -1 -2 -3468101214 Out[8]= - Graphics 如上例通过图形可断定在 x=5 附近有另一根: In[9]:=FindRoot[3*Cos[x] ==Log[x],{x,5}] Out[9]= {x→5.30199}2.求方程组的根使用 Solve,NSolve 和 FindRoot 也可求方程组的解,只是使用时格式略有不同,下面 给出一个 Solve 函数的例子: 求解 ??2 x ? 3 y ? 9 ? x ? 2y ?1In[10]:=Slove[{2*x+3*y==9,x-2*y==1},{x,y}] Out[10]= {{x→3, y→1}}3 求方程的全解如果我们求 ax 2 +bx+c=0 的根,我们用 Solve 函数解的结果是: In[11]:=Solve[a*x^2+b*x+c ==0,x] Out[11]={{ x→?b ? b 2 ? 4ac ?b ? b 2 ? 4ac },{ x→ }} 2a 2a这显然是不合理的,因为对不同的 a,b,c 方程的解有不同的情况,而上面只是给出部分 解如果要解决这个问题可用 Reduce 命令,它可根据 a,b,c 的取值给出全部值。 In[12]:=Reduce[a*x^2+b*x+c ==0,x]?b ? b 2 ? 4ac ?b ? b 2 ? 4ac Out[12]= a≠0 && (x== || x== || 2a 2aa==0 && b≠0 && x== ?c ||c==0 && b==0 && a==0 b因此 Solve, Roots 只给出方程的一般解, 而 Reduce 函数数可以给出方程的全部可能解。4.解条件方程在作方程计算时, 可以把一个方程看作你要处理的主要方程, 而把其他方程作为必须满 足的辅助条件,你将会发现这样处理很方便。譬如在求解像 x 4 + bx 2 +c = 0 这样的方程时, 2 通常我们采用 x = y 的代换方法,使求解方程得到简化。 在 Mahematica 中,我们通常是首先命名辅助条件组,然后用名字把辅助条件包含在你 要用函数 Solve[] 求解的方程组中。 用 Sc 定义方程:sin x + cos x = 1,在这种条件下,求解方程 cosx + 2sinx = 1。 In[1]:=Sc=Sin[x]^2+Cos[x]^2 ==1 Out[1]=Cos[x] 2 +Sin[x] 2 ==1 In[2]:=Solve[{Cos[x]+2Sin[x] ==1,Sc},{Sin[x],Cos[x]}] Out[2]={{Sin[x] →0,Cos[x] →1},{Sin[x] →2 24 3 ,Cos[x]→ ? }} 5 5 3.3 求和与求积在 Mathematica 中,数学上的和式符号 ? 用 Sum 表示,连乘符号 ? 用 Product 表示。下 面列出求和与求积函数的形式和意义:i maxSum[f,{i,imin,imax}] Sum[f,{i,imin,imax,di}] Sum[f,{i,imin,imax},{j,jmin,jmax}]求和i ?i min?f以步长 di 增加 i 求和i max嵌套求和i ?i min j ? j mini max? ?j maxfProduct[f,{i,imain,imax}] Product [f,{i,imin,imax,di}] Product[f,{I,imin,imax},{j,jmin,jmax}]求积i ?i min?f以步长 di 增加 i 求积i max嵌套求积i ?i min j ? j min? ?j maxfNsum[f,{i,imin,Infinity}]求i ?i min ???f 近似值NProduct[f,{i,imin,Infinity}] 一些例子: 求 1 到 9 的奇数和: In[1]:=Sum[2i-1,{i,1,9}] Out[1]=81 若下限是 1,可以省略: In[2]:=Sum[2i-1,{i, 9}] Out[2]=81 下式构造一个多项式: In[3]:=Sum[i*x^i,{i,1,9,2}] 3 5 7 9 Out[3]=x +3x +5x +7x +9x Mathematic 可以给出和的精确结果: In[4]:=Sum[1/n!,{n,1,11}] Out[4]=求i ?i min?f 近似值9600In[5]:=N[%] Out[5]=1.71828 第 4 章 函数作图4.1 基本的二维图形Mathematica 在直角坐标系中作一元函数图形用下列基本命令: Plot[f ,{x,xmin,xmax},option-&value] 在指定区间上按选项定义值画出函数在直角坐标系中的图形 Plot[{f1,f2,f3, ?},{x,xmin,xmax},option-&value] 在指定区间上按选项定义值同时画出多个函数在直角坐标系中的图形 Mathematica 绘图时允许用户设置选项值对绘制图形的细节提出各种要求。例如,要设 置图形的高宽比,给图形加标题等。每个选项都有一个确定的名字,以“选项名-&选项值” 的形式放在 Plot 中的最右边位置,一次可设置多个选项,选项依次排列,用逗号隔开,也 可以不设置选项,采用系统的默认值。 选项 说明 AspectRatio AxesLabel PlotLabel PlotRange PlotStyle PlotPoint 图形的高、宽比 给坐标轴加上名字 给图形加上标题 指定函数因变量的区间 用什么样方式作图(颜色,粗细等) 画图时计算的点数 默认值 1/0.618 不加 不加 计算的结果 值是一个表 251.举例(1) 例如绘制 f ( x) ?sin x 2 的图形: x ?1In[1]:=f[x_]=Sin[x^2]/(x+1) Plot[f[x],{x,0,2Pi}] Out[1]=Sin[x 2 ] 1+x0.40.2123456-0.2Out[2]= -Graphics限制长宽比例: In[3]:=Plot[f[x],{x,0,2Pi},AspectRatio-&1/2]长宽比例为 1:2 0.40.21 -0.223456Out[3]= -Graphics(2) 如果要取消刻度可以使用 Ticks 选项: In[4]:=Plot[f[x],{x,0,2Pi},Ticks-&None]Out[4]= -Graphics(3) 如果要标注坐标名称 x 轴为“Time” ,y 轴为“Height” : In[5]:= Plot[f[x],{x,0,2Pi},AxesLabel-&{“time”,”height”}]height 0.40.21 -0.223456timeOut[5]= -Graphics(4) 将坐标原点移到点(3,0) ,并标注图形名称为 Decay waves : In[6]:= Plot[f[x],{x,0,2Pi},AxesOrigin-&{3,0},PlotLabel-&“Decay waves”]Decay 0.4 waves0.2012 -0.2456Out[6]= -Graphics- (5) 修改 x 方向的刻度,y 轴方向的刻度则用默认值: In[7]:= Plot[f[x],{x,0,2Pi},Ticks-&{{0,Pi/2,Pi,3Pi/2,2Pi},Automatic}]Out[7]= -Graphics(6) 定义 y 轴的绘图范围: In[8]:= Plot[f[x],{x,0,2Pi},PlotRange-&{-0.6,0.6}]0.4 0.21 -0.2 -0.423456Out[8]= -Graphics(7) 另外我们也可以将图形结果定义给变量,但不显示图形,后用 Show 命令显示: In[9]:=g1=Plot[f[x],{x,0,2Pi},DisplayFunction-&Identity] g2=Plot[x*Cos[x]/12,{x,0,2Pi}, DisplayFunction-&Identity] Show[g1,g2, DisplayFunction-&$ DisplayFunction] Out[9]= -GraphicsOut[10]= -Graphics-0.40.21 -0.223456Out[11]= -Graphics- 2.数据集合的图形Mathematica 用于绘数字集合的图形的命令与前而介绍的绘函数图形的命令是相似的。 如下: ListPlot[{y1,y2,…..} ] 绘出在 x 的值为 1,2?时 y1,y2, ?的图形 ListPlot[{{x1,y1},{x2,y2},…..}] ListPlot[List,PlotJoined-&True] 绘出离散点(xi,yi) 把离散点连成曲线(1)下面举例说明下面是一个离散数据的集合的图形: In[1]:=List1=Table[i^3+i,{i,10}] Out[1]={2,10,30,68,130,222,350,520,738,1010} In[2]:=ListPlot[List1]1000800600 40020046810Out[2]= -Graphics-3.二维参数作图前面我们使用 Plot 命令可以绘出直角坐标系下的函数图形,使用 ParametrecPlot 可以绘 制参数曲线下面给出 ParametricPlot 的常用形式: ParametricPlot[{fx,fy},{t,tmin,tmax}] ParametricPlot[{fx,fy},{gx,gy},….{t,tmin,tmax}] ParametricPlot[{fx,fy},{t,tmin,tmax},AspectRatio-&Automatic] (1) 绘制参数方程 ? 绘出参数图 绘出一组参数图 设法保持曲线的形? x ? sin 3t cos t 的图形 ? y ? sin 3t sin t0.5 0.25In[1]:= ParametricPlot[{Sin[3t]Cos[t],Sin[3t]Sin[t]},{t,0,2Pi}]-0.75-0.5-0.25 -0.25 -0.5 -0.75 -10.250.50.75Out[1]= -Graphics- (2) 下面将一个园与上面参数方程的图象绘在同一个坐标下,并保证图形的形状正确: In[2]:= ParametricPlot[{{Sin[3t]Cos[t],Sin[3t]Sin[t]},{Sin[t],Cos[t]}},{t,0,2Pi}, AspectRatio-&Automatic]10.5-1-0.50.51-0.5-1Out[2]= -Graphics-4.2 二维图形元素用图形元素绘图适合于绘制结构复杂的图形。Mathematica 中还提供了各种如绘制点、 线段、圆弧等函数。同样我们可先用 Graphics 作出平面图形的表达式,再用 Show 显示守成 的图形。下面给出在 Mathematica 中常用的二维图形元素: Point[[x,y]] 点 Line[{{x1,y1},{x2,y2},…}] Rectangle[{xmin,ymin},{xmax,ymax}] Polygon[{{x1,y1},{x2,y2}, ??.}] Circle[{x,y},r] Circle[{x,y},{rx,ry}] Circle[{x,y},r,{theta1,thata2}] Circle[{x,y},{rx,ry},{theta1,theta2}] Disk[{x,y},r] Raster[{{a11,a12,…..},{a21,……},….}] Text[Expr,{x,y}] 线段 填充矩阵 填充多边形 圆 半轴分别为 rx,ry 的椭圆 圆弧 椭圆弧 填充圆 灰度在 0 到 1 之间的灰层组 文本大小下图绘出一个有颜色和大小的点,且在图形四周插入文本: In[1]:=g1=Graphics[{Text[“Left”,{ -1,0},{-1,0}],Text[“Right”,{1,0},{1,0}],Text[“Above”,{0, 1},{0,-1}],Text[“Below”,{0, -1},{0,-1}],{PointSize[0.3],Point[{0,0}]}},PlotRange-&All] Show[g1] Out[1]= -Graphics- AboveLeftRightBelowOut[2]= -Graphics下面绘制一些有线条组成的图形: In[3]:=sawline=Line[Table[{n,(-1)^n},{n,6}]] Show[Graphics[sawline]] Out[3]=Line[{{1, -1},{2,1},{3,-1},{4,1},{5,-1},{6,1}}]Out[4]= -Graphics当然也可以添加坐标轴,下面的例子说明了这一点: In[5]:=Show[Graphics[sawline],Axes-&True]10.52 -0.53456-1Out[5]= -Graphics下面的例子是说明了 Retangle 的图形绘制,例子中用一些小矩形逼近正弦曲线与 x 轴 所成面积。程序中生成一个图形集合并显示出来。 In[6]:=St=Table[Rectangle[{x,0},{x+0.08,Sin[x]}],{x,0,2Pi,0.15}] Show[Graphics[St],Axes-&True] 10.51 -0.523456-1Out[7]= -Graphics-4.3 图形的样式我们称图形的颜色、曲线的形状和宽度等特性为图形样式。在本节中,我们就图形的各 种样式,尤其是曲线的样式进行学习。下面给出选项用于设置图形样式: Graykvel[] RGBColor[r,g,b] Hue[A] Hue[h,s,b] PointSize[d] AbsolutePointSize[d] Thickness[w] AbsoluteThickness[w] Dashing[wl,w2,….] Absolutedashing[{w1,w2,…..}] PlotStyle-&style PlotStyle-&{{Style1},{Style2}…….} MeshStyle-&Style 灰度介于 0(黑)到 l(白)之间 由红、绿,蓝组成的颜色,每种色彩取 0 到 1 之间的数 取 0 到 1 之间的色彩 指定色调,位置和亮度的颜色,每项介于 0 到 1 之间 给出半径为 d 的点,单位是 Plot 的一个分数 给出半径为 d 的点(以绝对单位量取) 给所有线的宽度 w ,单位是 Plot 的分数 给所有线的宽度 w ,(以绝对单位量取) 给所有线为一系列虚线,虚线段的长度为 wl,w2, ? 以绝对单位给出虚线长度 设立 Plot 中所有曲线的风格 设立 Plot 中一些列曲线的风格 设立宽度和表面网格的风格1.图形颜色的设置在 Mathematicaa 提供各种图形指令中,对图形元素颜色的设置是一个很重要的设置. 。 下面给出三条不同颜色的正弦曲线,此处以灰度表示,即颜色深浅不同。 In[1]:=Plot[{Sin[x],Sin[2x],Sin[3x]},{x,0,2Pi},PlotStyle-&{RGBColor[0.9,0,0], RGBColor[0,0.9,0], RGBColor[0,0,0.9]}]10.51 -0.523456-1Out[1]= -Graphics- 下面用不同的色调对三个菱形进行着色。 In[2]:=v1={{ -1,0},{0, -1},{1,0},{0,1}}; Show[Graphics[{Hue[0.1],Polygon[3*v1], Hue[0.8],Polygon[2*v1], Hue[0.2],Polygon[v1]}, AspectRatio-&Automatic]]Out[2]= -Graphics-2.图形大小下面是一些点,注意点大小的控制。 In[3]:=Table[Point[{n^2,Prime[n]}],{n,5}];Show[Graphics[{PointSize[0.1],%}],PlotRange-& All];下面的点的控制是用绝对单位: In[4]:=ListPlot[Table[Prime[n],{n,10}],Prolog-&AbsolutePointSize[5]]25 20 15 1046810Out[4]= -Graphics-3.线段的控制下面的例子是控制线段的宽度,使用的是绝对控制。 In[5]:=Show[Graphics[{Table[{AbsoluteThickness[d],Line[{{0,0},{1,d}}]},{d,5}], Line[{{0,5},{1,0}}]}]]Out[5]= -GraphicsMathematica 提供的虚线指令可生成多种不同的复杂虚线。4.4 图形的重绘和组合每次绘制图形后,Mathematica 保存了图形的所有信息,所以用户可以重绘这些图形。 我们在重绘图形的时候,还可以改变一些使用。下面是常用重绘图形的函数。 Show[plot] 重绘图形 Show[plot,option-&value] Show[plot1,plot2,plot3…] Show[GraphcisArray[{{plot1,plot2,…}…}]] InputForm[plot] 改变方案重绘图形 多个图形的绘制 绘制图形矩阵 给出所有的图形信息1.使用 Show 显示图形下面绘制函数 sinx 2 的图形。 In[1]:=Plot[Sin[x^2],{x, -Pi,Pi}]10.5-3-2-1123-0.5-1Out[1]= -GraphicsIn[2]:=Show[%] 10.5-3-2-1123-0.5-1Out[2]= -Graphics重绘图形时,可以改变命令的设置,下面改变 y 的比例同时给图加边框: In[3]:=Show[%,PlotRange-&{-1,2},Frame-&True]]2 1.5 1 0.5 0 -0.5-3-2-10123Out[3]= -Graphics-2.使用 Show 命令进行组合也可使 用 Show 进行 图形 组合 。图 形组 合与 图形 是否 有相 同的 比例 无关, 这是 Mathematica 会自动选择新的比例来绘制图形。 下面绘制函数 xsin(2x+π)的图形和 xcos2x 然 后绘制在一张图时。 In[4]:=f1=Plot[x*Sin[2x+Pi],{x,0,4Pi}]1052 -54681012-10Out[4]= -GraphicsIn[5]:=f2=Plot[x*Cos[2x],{x,0,4Pi}] 1052 -54681012-10Out[5]= -GraphicsIn[6]:=Show[f1,f2]1052 -54681012-10Out[6]= -Graphics-3.将多个图形组合为一个图形我们也可把图形组合为一个图形,我们还可以用 GraphicsArray 把多个图形绘制在一个 图形矩阵中如下图。 In[7]:=Show[GraphicsArray[{{%6,f1},{%6,f2}}]]10 5 -5 -10 2 4 6 8 10 12 10 5 -5 -10 10 5 2 4 6 8 10 12 -5 -10 2 4 6 8 10 12 2 4 6 8 10 1210 5 -5 -10Out[7]= -GraphicsArray- 4.5 基本三维图形绘制函数 f(x,y)在平面区域上的三维立体图形的基本命令是 Plot3D,Plot3D 和 Plot 的 工作方式和选项基本相同。ListPlot3D 可以用来绘制三维数字集合的三维图形,其用法也类 似于 ListPlot,下面给出这两个函数的常用形式: Plot3D[f ,(x,xmin,xmax) ,(y,ymin,ymax)] 绘制以 x 和 y 为变量的三维函数的图形 ListPlot3D[{Z11,Z12, ?},{Z21,Z22, ?}, ?..]] 绘出高度为 Zvx 数组的三维图形 Plot3D 同平面图形一样,也有许多输出选项,你可通过多次试验找出你所需的最佳图 形样式。 选项 Axes AxesLabel Boxed ColorFunction TextStyle ormatType DisplayFunction FaceGrids HiddenSurface Lighdng Mesh PlotRange Shading ViewPoint 取值 True None True Automatic STextStyle StandardForm SdlisplayFunction None True True True Automatic True {1.3,-2.4,2} 意义 是否包括坐标轴 在轴上加上标志:zlabel 规定 z 轴的标志, {xlabel,ylabel,zlabel} 规定所有轴的标志 是否在曲面周围加上立方体 使用什么颜色的明暗度; Hue 表示使用一系列颜色 用于图形文本的缺省类型 用于图形文本的缺省格式类型 如何绘制图形,Indentity 表示不显示 如何在立体界面上绘上网格; All 表示在每个界面上绘上网格 是否以立体的形式绘出曲面 是否用明暗分布米给表面加色 是否在表面上绘出 xy 网格 图中坐标的范围;可以规定为 All,{zmin,zmax} 或{xminn,xmax} ,{ymin,ymax},{zmin,zmax} 表面是用阴影还是留空白 表面的空间观察点1.三维绘图举例(1) 函数 sin(x+y)cos(x+y) 的立体图: In[1]:=t1=Plot3D[Sin[x+y]*Cos[x+y],{x,0,4},{y,0,4}]0.5 0.25 0 -0.25 -0.5 0 1 2 3 4 0 1 2 3 4 Out[1]= -SurfaceGraphics(2) 对于三维图形中 Axes 、Axeslabel、Boxed 等操作同二维图形的一些操作很相似。用 PlotRange 设定曲线的表面的变化范围。 In[2]:=Show[t1,PlotRange-&{0.2,0.2}]0.4 0.3 0.2 0.1 0 0 1 2 3 4 0 1 2 3 4Out[2]= -SurfaceGraphics(3) 图形轴上加上标记,且在每个平面上画上网格。 In[3]:=Show[t1,AxesLabel-&{“Time”,”Depth”,”V alue”},FaceGrids -&All]0.5 0.25 Value 0 -0.25 -0.5 0 1 2 Time 3 4 0 14 3 2 DepthOut[3]= -SurfaceGraphics(4) 视图的改变 学习过画法几何或工程制图的都知道, 制图时通常用三视图来表示一个物体的具体形状 特性。我们在生活中也知道从不同观察点观察物体,其效果是很不一样的。Mathematica 在 绘制立体图形时,在系统默认的情况下,观察点在(1.3, -2.4, 2)处。这个参考点选择是具有 一般性的,因此偶尔把图形的不同部分重在一起也不会发生视觉混乱。 下面例子改变观察视点。 In[4]:=Show[t1,ViewPoint-&{2, -2,0}]0.5 0.25 0 -0.25 -0.5 0 1 2 3 0 4 1 2 3 4 Out[4]= -SurfaceGraphics从上面我们可以看出, 观察点位于曲面的上方有利于看清对于图形全貌。 对于较复杂的 图形,我们在所绘的图形上包括尽可能多的曲线对于我们观察很有帮助。同时,在曲面的周 围直接绘出立方体盒子也有利于我们认清曲面的方位。 (5) 下面是没有网格和立体盒子的曲面图,它看起来就不如前面的图形清晰明了。 In[5]:=Show[t1,Mesh-&False, Boxed-&False]0.5 0.25 0 -0.25 -0.5 0 1 2 3 4 0 1 2 3 4Out[5]= -SurfaceGraphics(6) 下图给出没有阴影的曲面 In[6]:=Show[t1,Shading-&False]0.5 0.25 0 -0.25 -0.5 0 1 2 3 4 0 1 2 3 4Out[6]= -SurfaceGraphics带有阴影和网格的图形对于理解曲面的形状是很有好处的。 在有些矢量图形的输出装置 中,你可能得不到阴影,但是当有阴影时,输出装置可能要花很长时间来输出它。 (7) 给空间立体曲面着色 通常情况下,Mathematica 为了使图形更加逼真而用明暗分布的形式给空间立体曲面着 色。在这种情况下,Mathematica 假定在图形的右上方有三种光源照在物体上。但有时这种 方法会造成混乱, 此时你可用 Lighting-&False 来采取根据高度在表面上涂以不同灰度的阴影 的方法。 In[7]:=Show[t1,Lighting-&False] 0.5 0.25 0 -0.25 -0.5 0 1 2 3 4 0 1 2 3 4Out[7]= -SurfaceGraphics-2 用数据来进行绘图同二维绘图一样,三维图形也可用数据来进行绘图。下面给出数据矩阵,因其较大未表 示其结果。 In[8]:= MyTable:=Table[Sin[x*y]+Random[Real,{0.15,0.15}],{x,0,3Pi/2,Pi/15},{y,0,3Pi/2,Pi/15}] ListPlot3D[MyTable]1 0.5 0 -0.5 15 5 10 15 20 5 10 20Out[9]= -SurfaceGraphics-3.三维空间的参数方程绘图三维空间中的参数绘图函数 ParametricPlot3D[{fx,fv,fz},{t,tmin,tmax}] 和二维空间中的 ParametricPlot 很相仿。 在这种情况下, Mathematica 实际上都是根据参数 t 来产生一系列点, 然后再连接起来。 三维参数作图的基本形式为: ParametricPlot3D[{fx,fv,fz},{t,tmin,tmax}] 给出空间曲线的参数图 ParametricPlot3D[{fx,fv,fz},{t,tmin,tmax},{u,umin,umax}] 给出空间曲面的参数图 ParametricPlot3D[{fx,fv,fz,s}…..] 按照函数关系 s 绘出参数图的阴影部分 ParametricPlot3D[{fx,f v,fz},{gx,gy,gz}…..] 下面是一些空间曲线的例子 把一些图形绘制在一起 In[10]:=pp1:= ParametricPlot3D[{3*Cos[4*t+1],Cos[2*t+3],4Cos[2*t+5]},{t,0,Pi}]; In[11]:=pp2:= ParametricPlot3D[{3*Cos[4*t+1],Cos[2*t+3],4Cos[2*t+5]},{t,0,Pi}, Boxed-&False]; In[12]:=pp3:= ParametricPlot3D[{3*Cos[4*t+1],Cos[2*t+3],4Cos[2*t+5]},{t,0,Pi}, Boxed-&False,Axes-&False]; In[13]:=pp4:= ParametricPlot3D[{3*Cos[4*t+1],Cos[2*t+3],4Cos[2*t+5]},{t,0,Pi}, Boxed-&False,Axes-&False,BoxRatios-&{1,1,1}]; In[14]:=Show[GraphicsArray[{{pp1,pp2},{pp3,pp4}}]] 结果为1 0.5 0 -0.5 -1 -2 0 2 4 1 0.5 0 -0.5 -1 -2 0 2 42200-2 -4-2 -4Out[14]= -GraphicsArray命令 ParametricPlot3D[{fx,fv,fz},{t,tmin,tmax},{u,umin,umax}] 产生一个曲面而不是 一条曲线,曲面是由四边形组成。 In[15]:= ParametricPlot3D[{r,Exp[- r^2Cos[4r]^2]*Cos[t], Exp[- r^2Cos[4r]^2]*Sin[t]}, {r, -1,1},{t,0,2Pi}]1 0.5 0 -0.5 -1 10.50 -0.5 -1 -1 -0.5 0 0.5 1 Out[15]= -Graphics3D下面这个图形也很漂亮 In[16]:= ParametricPlot3D[{Cos[u]Sin[v],Sin[u]Sin[v], Cos[v]+Log[Tan[v/2]]+0.1*u}, {u, 0,4Pi},{v,0.001,1},PlotPoints-&{64,32}]-0.5 0.5 0 -0.5 1 0 0.50-1-2-3Out[16]= -Graphics3D- 第 5 章 微积分的基本操作5.1 极限Mathematica 计算极限的命令是 Limit 它的使用方法主要有: Limit[expr,x-&x0 ] Limit[expr,x-&x0 ,Direction-&1] 当 x 趋向于 x0 时求 expr 的极限 当 x 趋向于 x0 时求 expr 的左极限Limit[expr,x-&x0 ,Direction-&-1] 当 x 趋向于 x0 时求 expr 的右极限 趋向的点可以是常数,也可以是+∞,-∞ 例如: 1.求 limx ??x2 ? 2 3x ? 6In[1]:=Limit[Sqrt[x^2+2]/(3x-6),x-&Infinity] Out[1]=1 32.求 limsin 2 x x ?0 x2In[2]:=Limit[Sin[x]^2/x^2,x-&0] Out[2]=1 3.求 lim ?x ?0ln x xIn[3]:=Limit[Log[x]/x,x-&0,Direction-&-1] Out[3]= -∞5.2 微分1.函数的微分在 Mathematica 中, 计算函数的微分或导数是非常方便的, 命令为 D[f,x], 表示对 x 求函 数 f 的导数或偏导数。该函数的常用格式有以下几种 D[f,x] 计算导数df ?f 或 dx ?xD[f,x1 ,x2 ,…]计算多重偏导数?n f ?x1?x2 ?xnD[f,{x,n}]计算 n 阶导数dn f dx ndf ,其中 v1 ,v2 ?依赖于 x dxD[f,x,NonConstants-&{v1 ,v2 ,…}] 计算导数 例如: (1) 求函数 sinx 的导数 In[1]:=D[Sin[x],x] Out[1]=Cos[x] x (2) 求函数 e sinx 的 2 阶导数 In[2]:=D[Exp[x]*Sin[x],{x,2}] Out[2]=2e x Cos[x] (3) 假设 a 是常数,对 sinax 求导 In[3]:=D[Sin[a*x],x] Out[3]=aCos[ax] 2 2 (4) 二元函数 f(x,y)=x y+y 求 f 对 x,y 的一阶和二阶偏导 In[4]:=f[x_,y_]=x^2*y+y^2 Out[4]= x 2 y+y 2 In[5]:=D[f[x,y],x] Out[5]=2xy In[6]:=D[f[x,y],y] Out[6]=x 2 + 2y In[7]:=D[f[x,y],x,y] Out[7]=2x In[8]:=D[f[x,y],{x,2}] Out[8]=2y In[9]:=D[f[x,y],{y,2}] Out[9]=2 Mathematica 可以求函数式未知的函数微分,通常结果使用数学上的表示法。 例如: In[10]:=D[x*g[x],x] Out[10]=g[x]+xg′ [x] In[11]:=D[x*g[x],{x,4}] Out[11]=4g (3)[x]+xg (4)[x] 对复合函数求导法则同样可用: In[12]:=D[g[h[x]],x] Out[12]=g′ [h[x]] h′ [x] 如果要得到函数在某一点的导数值,可以把这点代入导数如: In[13]:=D[Exp[x]*Sin[x],x]/.x-&2 Out[13]=e 2 Cos[2]+e 2 Sin[2] In[14]:=N[%] Out[14]=3.643922.全微分在 Mathematica 中,D[f,x] 给出 f 的偏导数,其中假定 f 中的其他变量与 x 无关。当 f 为 单变量时,D[f,x] 计算 f 对 x 的导数。函数 Dt[f,x] 给出 f 的全微分形式,并假定 f 中所有变量 依赖于 x. 下面是 Dt 命令的常用形及意义 Dt[f] Dt[f,x] Dt[f,x1 ,x2 ,…] 求全微分 df 求 f 对 x 的微分 求 f 对 xi 多重全微分Dt[f,x,Constants-&{c1 ,c2 , ?.}] 求全微分 df,其中 c 1 ,c2 ..是常数 2 2 下面我们求 x +y 的偏微分和全微分 In[1]:=D[x^2+y^2,x] Out[1]=2x In[2]:=Dt[x^2+y^2,x] Out[2]=2x+2yDt[y,x] 可以看出第一种情况 y 与 x 没有关系,第二种情况 y 是 x 的函数。再看下列求多项式 x +xy +yz 的全微分并假定 z 保持不变是常数。 In[3]:=Dt[x^2+x*y^3+y*z,Constants-&{z}] 3 Out[3]=2Dt[x,Constants →{z}]+y Dt[x, Constants→{z}] 2 +3xy Dt[y,Constants →{z}]+zDt[y, Constants →{z}] 如果 y 是 x 的函数,那么 y 被看成是常数 In[4]:=Dt[x^2+x*y[x]+y[x]*z] Out[4]=2xDt[x]+Dt[x]y[x]+Dt[z]y[x]+xDt[x]y ′ [x]+zDt[x] y′ [x]2 35.3 计算积分1.不定积分在 Mathematica 中计算不定积分命令为 Integerate[f,x] , 当然也可使用工具栏直接输入不 定积分式。来求函数的不定积分。当然并不是所有的不定积分都能求出来。 例如若求 sin sin xdx Mathematica 就无能为力: In[1]:=Integrate[Sin[Sin[x]],x] Out[1]=?? sin[sin[x]]dx但对于一些手工计算相当复杂的不定积分, MatheMatica 还是能轻易求得,例如求u 1? u2 ? 2 ? 11u 2 duIn[2]:=u 1+u 2 ? 2+11u 2 du1+u ? 1123ArcTanh[Out[2]=1 11 1+u 2 ] 2 11 11积分变量的形式也可以是一函数,例如: In[3]:= Sin[Sin[x]]dSin[x] Out[3]= -Cos[Sin[x]] 输入命令也可求得正确结果: In[4]:=Integrate[Sin[Sin[x]],Sin[x]] Out[4]= -Cos[Sin[x]] 对于在函数中出现的除积分变量外的函数,统统当作常数处理,请看下面例子: In[5]:= (a*x +b*x+c)dx??2 Out[5]= cx+bx 2 ax 3 + 2 32.定积分定积分的求解主要命令是 Integrate[f,{x,min,max}] , 或者使用工具栏输入也可以。例 如求?4?4x 2eax dxIn[6]:=Integrate[x^2Exp[ax],{x, -4,4}]128eax Out[6]= 3显然这条命令也可以求广义积分,例如求 In[7]:=Integrate[1/(x-2)^2,{x,0,4}] Out[7]=∞ 求无穷积也可以,例如?401 dx : ( x - 2)2???11 dx : x4In[8]:=Integrate[1/x^4,{x,1,Infinity}] Out[8]=1 3如果广义积分发散也能给出结果,例如: In[9]:=Integrate[1/x^2,{x, -1,1}] Out[9]= ∞ 如果无法判定敛散性,就用给出一个提示,例如: In[10]:=Integrate[1/x,{x,0,2}] Integrate::idiv: Integral of Out[10]=1 does not converge on {0,2} . x?201 dx x如果广义积分敛散性与某个符号的取值有关, 它也能给出在不同情况下的积分结果。 例 如???11 dx : xpIn[11]:=Integrate[1/x^p,{x,1,Infinity}] Out[11]=If[Re[p]&1,1 p ,Integrate[x C ,{x,1,∞},Assumptions →Re[p]≤1]] -1+p 1 , 否则不收敛。在 Integrate 中可加两个参数 -1+p结果的意义是当 p &1 时,积分值为Assumptions 和 GenerateConditions 例如上例中,只要用 Assumptions-&{Re[p]&1} 就可以得 到收敛情况的解: In[12]:=Integrate[1/x^p,{x,1,Infinity},Assumptions-&{Re[p]&1}] Out[12]=1 -1+p3.数值积分数值积分是解决求定积分的另一种有效的方法, 它可以给出一个近似解。 特别是对于用 Integrate 命令无法求出的定积分,数值积分更是可以发挥巨大作用。 它的命令格式为: Nintegrate[f,{x,a,b}] Nintegrate[f,{x,a,x1 ,x2 ,…,b}] Nintegrate[f,{x,a,b},MaxRecursion-&n] 在[a,b]上求 f 数值积分 以 x1 ,x2 ?. 为分割求[a,b]上的数值积分 求数值积分时指定迭代次数 n下面我们求 Sinsinx 在[0, π]上的积分值,由于这个函数的不定积分求不出,因此使用 Integrate 命令无法得到具体结果,但可以用数值积分求: In[13]:=Nintegrate[Sin[Sin[x]],{x,0,Pi}] Out[13]=1.78649 如果积分函数存在不连续点,或存在奇点我们可对积分进行分段求解。例如函数1 |x|在[-1, 1]上, 显然 x=0 点是一个无穷间断点。 因此若要求其数值积分, 必须在其中插入点 0。 In[14]:=NIntegrate[1/Sqrt[Abs[x]],{x,-1,1}] Nintegrate::inum:Integrand1 is not numerical at {x} = {0. }. Abs[x]Out[14]=Nintegrate[1 ,{x, -1,1}] Abs[x]In[15]:=NIntegrate[1/Sqrt[Abs[x]],{x,-1,0,1}] Out[15]=4. 对无穷积分,也可求数值积分,例如: In[16]:=Nintegrate[Exp[ -x^2],{x,0,Infinity}] Out[16]=0.8862275.4 多变量函数的微分下面是计算多变量函数的偏导数及全微分的命令与单变量基本相同, 通过分析下面的例 子我们可以我们可以轻松掌握。?n f ( 1 ) D[f,x1 , x2 ,…, x n ]计算偏导数 ?x1?x2 ?xn下面是实际的例子: 求函数 sin(xy )对 x 的偏导数: In[1]:=D[Sin[x*y^2],x] Out[1]=y Cos[xy ] 求函数 sin(xy 2 )对 x 的二阶偏导数:2 2 2 In[2]:=D[Sin[x*y^2],x,x] 4 2 Out[2]= -y Sin[xy ] 上述命令也可写成如下形式: In[3]:=D[Sin[x*y^2],{x,2}] Out[3]= -y 4 Sin[xy 2 ] 求函数 sin(xy )对 x 的二阶对 y 的一阶混合偏导数: In[4]:=D[Sin[x*y^2],x,x,y] 5 2 3 2 Out[4]= -2xy Cos[xy ] - 4y Sin[xy ] 上述命令也可写成如下形式: In[5]:=D[Sin[x*y^2],{x,2},y] 5 2 3 2 Out[5]= -2xy Cos[xy ] - 4y Sin[xy ] ( 2) D[f,x,NonConstants-&{c1 ,c 2 ,…}],2?f 中 ci 依赖于 x ?x下面是实际的例子: In[6]:=D[x^2+y^2,x,NonConstants-&{y}] Out[6]=2x+2yD[y,x,NonConstants →{y}] 注意:D[y,x,NonConstants →{y}]表示 (3) Dt[f] 计算全微分 df?y ,其中 y 是 x 的函数。 ?x下面是实际的例子: 计算 d(x 2 y 3 ) In[7]:=Dt[x^2*y^3] Out[7]=2xy 3 Dt[x]+3x 2 y 2 Dt[y] 其中 Dt[x]为 dx,Dt[y]为 dy 定义 z 为一个二元函数,求 z 的全微分,并提出 Dt[x]和 Dt[y]: In[8]:=z=x^3*y+x^2*y^2-3x*y^2;Collect[Dt[z],{Dt[x],Dt[y]}] Out[8]=(3x 2 y -3y 2 +2xy 2 )Dt[x]+(x 3 C 6xy+2x 2 y)Dt[y] 将上式表示成的标准形式: In[9]:=%/.{Dt[x]-&dx,Dt[y]-&dy} Out[9]= dy(x 3 C 6xy+2x 2 y)+ dx(3x 2 y -3y 2 +2xy 2 ) 求 z 对 x 的导数: In[10]:=Dt[z,x] Out[10]=3x 2 y -3y 2 +2xy 2 +x 3 Dt[y,x] -6xyDt[y,x]+2x 2 yDt[y,x] 因为 Mathematica 不知道 y 是否为 x 的函数,所以保留 Dt[y,x]。用置换运算将 Dt[y,x] 置换成 0 即可求得 z 对 x 的导数: In[11]:=Dt[z,x]/.Dt[y,x]-&0 Out[11]=3x 2 y -3y 2 +2xy 2 ( 4) 求隐函数的导数 下面是实际的例子: 求隐函数 5y 2 + siny= x 2 的导数: In[12]:=Dt[5*y^2+Sin[y] ==x^2,x] Out[12]=10yDt[y,x]+Cos[y]Dt[y,x] ==2x In[13]:=Solve[%,Dt[y,x]] Out[13]={{Dt[y,x] →2x }} 10y+Cos[y] (5)Dt[f,x,Constants-&{c1 ,c 2 ,…}]计算全微分 df , 其中 c i 是常数下面是实际的例子: In[14]:= Dt[x^2+y^2+z^2,x,Constants-&{z}] Out[14]=2x+2yDt[y,x,Constants →{z}] ( 6 ) Dt[f, x1 , x2 ,…, x n ]计算 f 对 xi 的多重全微分 下面是实际的例子: In[15]:= z=x^3*y+x^2*y^2-3x*y^2; In[16]:=Dt[z,x,y] 2 2 2 Out[16]=3x C 6y + 4xy + 6xyDt[x,y] + 2y Dt[x,y] C 6xDt[y,x] + 2x Dt[y,x] + 3x 2 Dt[x,y]Dt[y,x] C 6yDt[x,y]Dt[y,x] + 4xyDt[x,y]Dt[y,x]5.5 多变量函数的积分 (重积分)多变量函数的积分类似于一元函数的积分, 可以利用 Integrate 函数来完成。命令如下: Integrate[f,{x,a,b},{y,c,d},…{z,m,n}] 计算重积分??abdc?nmf ( x, y,, z )dzdydxNintegrate[f,{x,a,b},{y,c,d},…{z,m,n}] 数值积分或重积分的数值解 下面是具体的例子: 计算重积分?? x221 dxdy ? y ?1In[1]:=?? x1 dxdy +y+1Out[1]= 2 1+yArcTan[x ]+xLog[1+x 2 +y] 1+y我们也可以直接输入 Integrate 命令进行积分,但要注意 x 与 y 的顺序: In[2]:=Integrate[1/(x^2+y+1),y,x] Out[2]= 2 1+yArcTan[x ]+xLog[1+x 2 +y] 1+y计算二重积分??0ab0( x 2 ? y 2 )dxdy :In[3]:= Integrate[x^2+y^2,{x,0,a},{y,0,b}] Out[3]=1 ab(a 2 +b 2 ) 3y 的积分限也可以是 x 的函数: In[4]:= Integrate[x^2+y^2,{x,0,a},{y,0,x^2}]a5 a7 + Out[4]= 5 21以下是数值积分的例子: 在重积分中,无法求出某个变量的积分值,会求出可积的部分,再输出运算结果。 In[5]:= Integrate[Sqrt[x+y],{x,0,2},{y,0,Sqrt[x+2]}] Out[5]=1 (/ 4 C02 3/ 4 C2430Log[3]+1215Log[1+22 1/ 4 +2 2 ]) 960将上式转换成数值解: In[6]:=N[%] Out[6]=4.65557 直接利用 NIntegrate 命令求解,也可以得到相同的答案: In[7]:= NIntegrate[Sqrt[x+y],{x,0,2},{y,0,Sqrt[x+2]}] Out[7]=4.65557 以下是一个三重积分? ? ??2 x224y ? x2? y ? x2x 2 ? z 2 dzdydx :In[8]:=Off[Nintegrate::slwcon];Nintegrate[Sqrt[x^2+z^2],{x,-2,2},{y,x^2,4},{z,-Sqrt[y-x^2], Sqrt[y-x^2]}] Out[8]=26.8083 注意:命令 Off[Nintegrate::slwcon] 的作用是不显示提示信息。 第 6 章 微分方程的求解6.1 微分方程解在 Mathematica 中使用 DSolve[]可以求解线性和非线性微分方程,以及联立的微分方程 组。在没有给定方程的初值条件下,我们所得到的解包括 C[1],C[2] 是待定系数。求解微分 方程就是寻找未知的函数的表达式,在 Mathematica 中,方程中未知函数用 y[x]表示,其微 分用 y’[x],y’’[x]等表示。下面给出微分方程(组)的求解函数: DSolve[eqn,y[x],x] 求解微分方程函数 y[x] DSolve[eqn,y,x] DSolve[{eqn1,eqn2,…},{y1,y2,….},x] 求解微分方程函数 y 求解微分方程组1.用 Dsolve 求解微分方程 y[x]In[1]:=DSolve[y ’[x] ==2y[x],y[x],x] Out[1]={{y[x] →e 2 x C[1]}} In[2]:=DSolve[y’[x]+ 2y[x]+1 ==0,y[x],x] Out[2]={{y[x] → ?1 - 2x +e C[1]}} 2In[3]:=DSolve[y’’[x]+ 2y ’[x]+ y[x] ==0,y[x],x] Out[3]={{y[x] →e - x C[1]+ e - x xC[2]}} 解 y[x]仅适合其本身,并不适合于 y[x]的其它形式,如 y’[x],y[0]等,也就是说 y[x]不 是函数,例如我们如果有如下操作,y ’[x],y[0]并没有发生变化: In[4]:=y[x]+y[0]+y’[x]/.% Out[4]= {e - C[1]+ e - xC[2]+y[0]+y’[x]}x x2.解的纯函数形式使用 DSolve 命令可以给出解的纯函数形式,即 y,请分析下面的例子: In[5]:= DSolve[y ’[x] ==2y[x],y,x] Out[5]={{y→Function[{x},e 2 x C[1]]}} In[6]:=DSolve[y’[x]+ 2y[x]+1 ==0,y,x] Out[6]={{y→Function[{x}, ?1 - 2x +e C[1]]}} 2x xIn[7]:=DSolve[y’’[x]+ 2y ’[x]+ y[x] ==0,y,x] Out[7]={{y→Function[{x},e - C[1]+ e - xC[2]]}} 这里 y 适合 y 的所有情况下面的例子可以说明这一点 In[8]:=y[ x]+y’[x]+y[0]/.% Out[8]= {C[1]+ e - x C[2]} 在标准数学表达式中, 直接引入亚变量表示函数自变量, 用此方法可以生成微分方程的 解。如果需要的只是解的符号形式,引入这样来变量很方便。然而,如果想在其他的的计算 中使用该结果,那么最好使用不带亚变量的纯函数形式的结果。 3.求微分方程组请分析下面的例子 In[9]:=DSolve[{y[x] ==-z ’[x],z[x] ==-y’[x]},{y[x],z[x]},x] Out[9]={{z[x] →1 -x 1 x x x e (1+ e 2 )C[1] - e - (-1+e 2 ) C[2], 2 2 1 x 1 x x x y[x] → ? e - (-1+ e 2 )C[1]+ e - (1+e 2 )C[2]}} 2 2当然微分方程组也有纯函数形式: In[10]:=DSolve[{y[x] ==-z ’[x],z[x] ==-y’[x]},{y,z} ,x] Out[10]={{z→Function[{x},1 -x 1 e (1+ e 2 x )C[1] - e - x (-1+e 2 x) C[2]], 2 2 1 -x 1 y→Function[{x}, ? e (-1+ e 2 x )C[1]+ e - x (1+e 2 x )C[2]]}} 2 24.带初始条件的微分方程的解当给定一个微分方程的初始条件可以确定一个待定系数。请看下面的例子 In[11]:=DSolve[{y’[x] == y[x],y[0] ==5},y[x],x] Out[11]={{y[x] →5e x}} In[12]:=DSolve[{y’’[x] == y[x],y’[0] ==0},y[x],x] Out[12]={{y[x] →e - (1+ e 2 )C[2]}}x x由于给出一个初始条件所以只能确定 C[1]5.进一步讨论对于简单的微分方程的解比较简单, 对一些微分方程它的解就复杂的多。 特别是对一些 微分方程组或高阶微分方程,不一定能得具体的解,其解中可能含有一些特殊函数。并且很 多特殊函数的提出,就是为了解这些方程的,如: In[13]:=DSolve[y’[x] -2x* y[x]==1,y[x],x] Out[13]={{y[x] → e- x2C[1]+1 - x2 e ? Erfi[x]}} 2In[14]:=DSolve[y’’[x] -x* y[x]==0,y[x],x] Out[14]={{y[x] →AiryAi[x]C[1]+AiryBi[x]C[2]}} In[15]:=DSolve[y’’[x] -Exp[x]y[x] ==0,y[x],x] Out[15]={{y[x] →BesselI[0,2 e ]C[1]+ 2BesselK[0,2 e ]C[2]}} 上面三个方程中分别使用了三种类型的函数,可以查看系统帮助了解他们的性质和含 义。对于非线性微分方程,仅有一些特殊的情况可用标准数学函数得到解。Dsolve 能够处 理所有在标准数学手册有解的非线性微分方程。例如: In[16]:=DSolve[y’[x] -y[x]^2==0,y[x],x] Out[16]={{y[x] →x x1 }} -x+C[1]1/ 3In[17]:=DSolve[y’[x] -y[x]^2==x,y[x],x] Out[17]={{y[x] → - ((-1) 1/ 3 (AiryBiPrime[( -1)x]+AiryAiPrime[( -1)1/ 3x]C[1])) / ( AiryBi [( -1)1/ 3x]+AiryAi [( -1)1/ 3x]C[1])}}可以看出第二个方程的解已经非常复杂。6.2 微分方程的数值解在 Mathematica 中用函数 DSolve[] 得到微分方程的准确解, 用函数 NDSolve 得到微分方 程的数值解,当然在此处要给出求解区间(x,xmin,xmax) 。 NDSolve 也是既能计算单个的微分方程, 也能计算联立微分方程组。 它能对大多数的常 微分方程和部分偏微分方程求解。 在常微分可能有一些未知函数 yi , 但这些未知函数都依赖 于一个单变量 x。 NDSolve[{eqn1,eqn2, ?},y,{x,xmin,xmax}] 求函数 y 的数值解,x 属于[xmin,xmax] 求多个函数 yi 的数值解 NDSolve[{eqnl,eqn2, ?},{y1 ,y2 , ?}{x,xmin,xmax}]NDSolve 以 InterpolatingFunction 目标生成函数 yi 的解,InterpolatingFunction 目标提供 在独立变量 x 的 xmin 到 xmax 范围内求解的近似值。 NDSolve 用迭代法求解, 它以某一个 x 值开始,尽可能覆盖从 xmin 到 xmax 的全区间。 为使迭代开始, NDSolve 指定 yi 及其导数为初始条件。 初始条件给定某定点 x 处的 yi [x] 及尽可能的导数 y’i [x],一般情况下,初始条件可在任意 x 处,NDSolve 将以此为起点自动 覆盖 xmin 到 xmax 的全区域。 下面对初始条件 y[0]=0 和 y[1]=0 分别求出 x 从 0 到 1 的范围 内 y’[x]=y[x] 的解。 In[1]:=NDSolve[{y’[x] ==y[x],y[0] ==0},y,{x,0,1}] Out[1]={{y→InterpolatingFunction[{{0. ,1. }},&&]}} In[2]:=NDSolve[{y’[x] ==y[x],y[1] ==0},y,{x,0,1}] Out[2]={{y→InterpolatingFunction[{{0. ,1. }},&&]}} 再看下面的微分方程的数值解 In[3]:=NDSolve[{y’[x] ==y[x]^3,y[0] ==1},y,{x,0,1}] NDSolve::ndsz: At x==0.57525`,step sizesingularity or stiff system suspected . Out[3] ={{y→InterpolatingFunction[{{0. ,0. 5}},&&]}} 使用 Mathematica 也可以很容易的得到解的图形。这儿给出如何观察微商的逆函数的近 似值图形。我们使用命令 Evaluate 代替 InterpolatingFunction 能够节省时间。例如: In[4]:=s1=NDSolve[{y’[x] ==1/(2*y[x]),y[. 01]==0.1},y,{x,. 01,1}] Out[4]= ={{y→InterpolatingFunction[{{0. 01,1. }},&&]}} In[5]:=Plot[Evaluate[y[x]/.s1],{x, . 01,1}]1 0.8 0.6 0.4 0.20.20.40.60.81Out[5]= -Graphics- 第 7 章 Mathematica 程序设计7.1 模块和块中的变量前面我们学习了有关 Mathematica 的各种基本运算及操作,为了使 Mathematica 更有效 的工作,我们可对 Mathematica 进行模块化运算。在模块内部通过编写一系列表达式语句, 使其实现一定的功能。 在 Mathematica 内部也提供了很多程序包, 我们将学习如何调用它们。 一般情况下,Mathematica 假设所有变量都为全局变量。也就是说无论何时你使用一个 你定义的变量,Mathematica 都假设你指的是同一个目标。然而在编制程序时,你则不会想 把所有的变量当作全局变量, 因为如果这样程序可能就不具有通用性, 你也可能在调用程序 时陷入混乱状态。给出定义模块或块和局部变量的常用形式: Module[{x,y,...},body] Module[{x=x0,y=y0,…},body] lhs:=Module[vars,rhs/:cond] Block[{x,y,... },body] Block[{x=x0,y=y0,…},bddy] 具有局部变量 x,y?的模块 具有初始值的局部变量的模块 rhs 和 cond 共享局部变量 运用局部值 x,y, ?计算 body 给 x,y,.. 赋初始值Mathematica 中的模块工作很简单,每当使用模块时,就产生一个新的符号来表示它的 每一个局部变量。产生的新符号具有唯一的名字,互不冲突,有效的保护了模块内外的每个 变量的作用范围。首先我们来看 Module 函数,这个函数的第一部分参数,里说明的变量只 在 Module 内起作用,body 执行体,包含合法的 Mathematica 语句,多个语句之间可用“; ” 分割下面定义有初值的变量 t,Mathematica 默认它为全局变量: In[1]:=t=l0 Out[1]=10 模块中的 t 为局部变量, 因此它独立于全局变量 t In[2]:=Module[{t},t=8;Print[t]] 8 全局变量 t 的值仍为 10 In[3]=t=l0 Out[3]=10 下面定义函数中的中间变量 t 为局部变量并调用 f In[4]:=f[v_]:=Module[{t},t=(1+v)^2;Expand[t]] In[5]:=f[a] Out[5]=1+2a+a 2 全局变量 t 的值仍为 10 ln[6]:=t=10 Out[6]=10 我们可以对模块中的任意局部变量进行初始化, 这些初始值总是在模块执行前就被计算 出来。下面给局部变量 t 赋初值 u 调用函数 g: In[7]:=g[u_]:=Module[{t=u},t=t+t/(1+u)] In[8]:=g[a+b] Out[8]=a+b+a+b 1+a+bMathematica 中的模块允许你把某变量名看作局部变量名。然而又存在有时你又希望它 们为全局变量时但变量值为局部的矛盾,这时我们可以用 Block[] 函数。下面是一个含有全 局变量 x 表达式,使用 x 的局部值计算上面的表达式: In[9]:=x^2+1 Out[9]=1+x 2 In[10]:=Block[{x=a+1},%] Out[10]=1+(1+a) 2 In[11]:=x Out[11]=x 在 Mathematica 中编制程序时,必须使程序中的各个部分尽可能的独立,这样程序才便 于读懂、维护和修改。确保程序各部分不相干的主要方法是设置具有一定作用域的变量。在 Mathematica 中有两种限制变量作用域的基本方法:模块(Module) 和块(Block) 。我们在书写 实际程序中,模块比块更具普遍性。然而在交互式计算中需要定义作用域时,块更实用。 Module[vars,body] 所要做的是把执行模块时表达式 body 的形式看成 Mathematica 程序 的“代码” 。然而当“代码”中直接出现变量 vars 时,这些 vars 都将被看作局部的。 Block[vars,body]并不查看表达式 body 的形式,而在整个计算 Body 的过程中,实用 vars 的 局部值。 下例中我们根据 i 定义 m: In[12]:=m=i^2 Out[12]= i 在计算 i+m 的整个过程中使用块中 i 的局部值: In[13]:=Block[{i = a},i+m] Out[13]=a+a 而对于下面的例子,只有直接出现在 i+m 中的 i,才被看作局部变量: In[14]:=Module[{i=a},i+m] Out[14]=a+i 22 27.2 条件结构我们在用计算机语言进行编程时,常用到条件语句。在 Mathematica 中也提供了多种设 置条件的方法,并规定只有在该条件满足时才计算表达式。 下面条件结构的常用形式: lhs :=rhsl/;test If[test,then,else] 当 test 为真时使用定义 如 test 为真计算 then,反之计算 elsewhich[test1,value1,test2,...] 依次计算 testi,给出对应的第一个为真的值 Switch[expr,forml,value1,form2,...] expr 与每一个 formi 相比较, 给出第一个相匹配的值 Switch[expr,form1, value1,form2, ?,def] 用 def 为系统默认值1. If 命令下面的 test 为真,故返回第一表达式的值: In[1]:=If [1&0,1+2,2+3] Out[1]=3 用 Mathematica 编程时,不可避免的要在单个或多个定义之间进行选择。单个定义的右 边包含多个由 If 函数控制的分支, 多个定义是用/;condition 来表示的。 运用多个定义进行编 程你常能得到结构很好的程序。 下面定义了一个阶跃函数, 即当 x&0 时值为 1, 反之值为 -1: In[2]:=If[x&0,1, -1] Out[2]=If[x&0,1, -1] 下面运用/;condition 形式分别定义阶跃函数的正数和负数部分: In[3]:=g[x_]:=1/;x&0 In[4]:=g[x_]:= -1/;x&0 用“?”显示用/;condition 定义的函数 g 的完整信息: In[5]:=?g Global`g g[x_]:=1/;x&0 g[x_]:=-1/;x&0 求函数 g(x)在-2 和 5 的值: In[6]:=g[ -2] Out[6]= -1 In[7]:=g[5] Out[7]=1 我们用函数 If 时,还可以用 if(test,expr) 结构,即当 test 真时,计算表达式 expr,表达式 expr 的值就是整个 If 结构的值,反之返回空值。2.Which 命令对于一般情况函数 If 提供一个两者择一的方法。然而,有时条件多于两个,在这种情 况下可用 If 函数的嵌套方式来处理,但在这种情况下使用 Whitch 或 Switch 函数将更合适。 下面用 Which 定义具有三个条件的函数,调用这个函数: In[8]:=h[x_]:=Which[x&0,1,x==0,0,x&0, -1] In[9]:={h[0],h[3],h[ -3]} Out[9]={0,1, -1} 用 Switch 定义一个与模的余数有关的函数: In[10]:=q[x_]:=Switch[Mod[x,3],0,a,1,b,2,c] In[11]:=q[17] Out[11]=c 因为 Mod[17,3]=2,因此运用了 Switch 中的第三种情况。3. 符号条件在 Mathemahca 中,有一种可能的情况就是你给出的条件结果既不是真也不为假。下面 测试的结果既不是真也不是假,因此 If 的两个分支保持不变: ln[1]:=If[x==y,a,b] Out[1]=If[x==y,a,b] 你可以给 If 加上第三个条件结果,这允许你测试的结果既不是真也不是假的情况下使 用它: ln[2]:=If[x==y,a,b,c] Out[2]=c 下面给出处理符号条件的函数。因 x=x,故 Mathematica 给出结果为真。 但 Mathematica 在下面情况下以符号等式输出: ln[4]:=x==y Out[4]:=x==y 除非表达式能得出真,否则都被假设为假: ln[5]:=TrueQ[x==x] Out[5]=True ln[6]:=TrueQ[x==y] Out[6]=False 我们用“===”可直接测试两个表达式的等同性: In[7]:x===y Out[7]:=False 一般情况下,“===”返回值为真(True)或假(False) ,而“==”为符号形式输出,表示一个 符号等式。在特殊情况下可用“===”测试一个表达式的结构,而用“==”测试数学上的等 同性。下例用“===”来测试表达式的结构: In[8]:=(1+x)^2===(1+x)(x+1) Out[8]=True In[9]:=(1+x)^2===1+2*x+x^2 Out[9]=False In[10]:=Tan[x] ===Sin[x]/Cos[x] Out[10]=True 在建立条件时,你常需要运用组合条件,如 testl&&test2&&?。对于这些组合条件,如 果其中有一个为假,则最后结果为假。Mathematica 依次对 test 进行计算,直到其中有一个 为假为止。4.是逻辑表达式的运算形式逻辑表达式: expr1&&expr2&&expr3 计算 expri 直到其中有一个为假为止 exprl||expr2||expr3 计算 expri 直到其中有一个为真为止 下面的函数包括两个组合条件: In[l1]:=t[x_]:=(x!=0&&1/x&3) 对这两个测试条件进行计算: ln[12]:={t[0],t[-3],t[1],t[1/5]} Out[12]={False,True,True,False} Mathematica 处理逻辑表达式的方法允许你组合一系列的测试条件,且只有当前面条件 满足时才处理后面的条件。7.3 循环结构Mathematica 程序的执行包括对一系列 Mathematica 表达式的计算。对简单程序,表达 式的计算可用分号“; ”来隔开, 然后一个接一个地进行计算。然而,有时你需要对同一表达 式进行多次计算,即循环计算。1. Do 循环结构简单地 Do 循环结构形式: Do[expr,{i,imax}] Do[expr,{i,imin,imax,di}] 循环计算 expr, 以步长 1,i 从 1 增加到 imax 循环计算 expr, 以步长 di,i 从 imin 增加到 imaxDo[expr,{n}] 循环计算 expr n 次 计算 Print[i+i^2] ,i 从 1 增加到 3: In[1]:=Do[Print[i+i^2],{i,1,3}] 2 6 12 Do 中的定义的循环方式与函数 Table 和 Sum 中的定义一样。在函数 Do 中,你同样能 建立重循环。下面给出的 i 从 1 到 4 进行循环,而对于每个 i,j 又从 1 到 i-1 进行循环: In[2]:=Do[Print[{i,j}],{i,1,4},{j,1,i-1}] 两个{}中的初值 1 可以省略 {2,1} {3,1} {3,2} {4,1} {4,2} {4,3} 我们还可把一个过程放入 Do 函数中: In[3]:=t=67;Do[Print[t];t=Floor[t/2],{3}] 67 33 162. While 与 For 结构在 Mathematica 程序中,Do 是以结构方式进行循环的,然而有时你需要生成非结构循 环。此时,运用函数 While 和 For 是合适的。下面是 While 和 For 函数的循环结构形式: While[test,body] 只要 test 为真,就重复计算 body For[start,test,incr,body] 以 start 为起始值,重复计算 body 和 incr,直到 test 为假为止 当条件满足时,While 循环一直进行,因此,为了防止死循环,在 While 中应包括命令 能改变 test 的值。 In[4]:=n=25;While[(n=Floor[n/3])!=0,Print[n]] 8 2 下面给出 For 循环的例子,i++表示 i 的值加 1(在本节的最后我们给出在编程时常会用 到的赋值方法): In[5]:=For[i=1,i&4,i++,Print[i]] 1 2 3 下面再给出一个较复杂的 For 循环的例子,一旦 i^2&l0 不成立,就中止循环: In[6]:=For[i=1;t=x,i^2&10,i++,t=t^2+i;Print[t]] 1+x 2 2+(1+x 2 ) 2 3+(2+(1+x 2 ) 2 ) 2 Mathematica 中的函数 While 和 For 循环总是在执行循环体前对循环条件进行测试,一 旦测试结果为假,就中止 While 和 For 循环,因此,循环体的计算总是在测试结果为真的情 况下进行的。 3.一些特殊的赋值方式一些赋值方式在循环结构中有时能带来一些方便。 i++ 变量 i 加 1 i-变量 i 减 1 ++i, --i i+=di i-=di x*=C x/=c {x,y}={y,x} 变量 i 先加 1 变量 i 先减 1 i 加 di i 减 di x 乘以 C x 除以 c 交换 x 和 y 值4 重复运用函数我们除了可用 Do、While、For 等进行循环计算外,我们还可以运用函数进行编程,运 用函数编程结构你能得出非常有效的程序,例如 Nest[f,x,n] 允许你对某一表达式重复运用函 数f 。 给出重复运用函数的方式: Nest[f,expr,n] 对表达式 expr 重复调用函数 f n 次 FixedPoint[f,expr,n] NestWhile[f,expr,test] 对表达式 expr 重复调用函数 f n 次,直到结果不变为止 对表达式 expr 重复调用函数 f,直到产生的结果为假时为止下面对函数 f 迭代 5 次: In[1]:=Nest[f,x,5] Out[1]=f[f[f[f[f[x]]]]] 对纯函数进行迭代,你能得出与运用 Do 函数得出的结果一样: In[2]:=Nest[Function[t,1/Sqrt[1+t]],x,2] Out[2]=1 1+ 1 1+xNest 函数允许你重复运用某函数,然而,有时你想在结果不再发生变化的情况下就中 止对函数的使用, 此时立刻使用函数 FixedPoint[f,x] 。 FixedPoint 函数重复运用某一函数直到 结果不再发生变化: In[3]:=FixedPoint[Function[t,Print[t];Floor[t/3]],67] 67 22 7 2 0 Out[3]=0 7.4 流程控制函数程序结构的流程控制一般来说比较简单, 但是在应用 While 或 For 等循环时就比较 复杂了,这是因为他们的流程控制依赖于表达式的值。而且在这样的循环中,流程的控制并 不依赖于循环体中表达式的值。有时你在编制 Mathematica 程序时,在该程序中,流程控制 受某一过程或循环体执行结果的影响。这时,我们可用 Mathematica 提供的流程控制函数来 控制流程。这些函数的工作过程与 C 语言中的很相似。 常用的流程控制函数: Break[] 退出本层的循环 Continue[] Return[expr] Goto[name] 转入当前循环的下一步 退出函数中的所有过程及循环,并返回 expr 值 转入当前过程中的元素 Label[name]Throw[value] 返回 expr 值 当 t&20 时,Break[]就引起循环体的中断: In[1]:=t=1;Do[t*=k;Print[t];If[t&20,Break[]],{k,10}] 1 2 6 24 当 k&3 时,Continue[] 继续执行循环: In[2]:=t=1;Do[t*=k;Print[t];If[t&3,Continue[]],t+=2,{k,5}] 1 2 6 32 170 下面给出 Return 的一个例子: In[3]:=f[x_]:=(If[x&5,Return[big]];t=x^3;Return[t-7]) In[4]:=f[10] Out[4]=big In[5]:=f[4] Out[5]=57 Return[] 允许你退出一函数,并返回一个值。Mathematica 可以进行局部返回,这可允许 你退出一列迭代函数。 非局部返回在错误处理时是很有用的。 下面给出的例子中如函数变量 小于 0 则输出 error。 In[6]:=h[x_]:=If[x&0,Throw[error],Sqrt[x]] In[7]:=Catch[h[6]] Out[7]= 6 In[8]:=Catch[h[ -6]] Out[8]=error X=6 时不产生 error,且出示 Catch 的结果, 当变量小于 0 时输出 error。 第8章Linel Linel,line2 ?name ??name !command N! !!filename &&filename Expr:&&filename Expr&&&filename () [] {} &*MathFun*& (*Note*) #n ## Rule& % %% V ar::mote “Astring” Context A+b a-b A*b 或 ab A/bMathematica 中的常用函数执行 Line,不显示结果 顺次执行 Line1,Line2,并显示结果 关于系统变量

我要回帖

更多关于 switch语句如何使用 的文章

 

随机推荐