Upload
kayo
View
276
Download
0
Embed Size (px)
DESCRIPTION
Mathematica 编程语言基础. 专题 5 :编程. 条件命令. If[ 条件,真操作,假操作,其它操作 ] 先判断条件 ; 如果是 true ,执行真操作 ; 如果是 false ,执行假操作 ; 如果两者都不是,执行其它操作. If[ 条件,真操作 ] If[ 条件,真操作,假操作 ]. 表达式 /; 条件 仅当条件为 True 时才执行表达式. Which[ 条件1, 表达式 1 , 条件2, 表达式 2 , …] 依次计算 条件 i , 给出对应 第一个 条件为 True 的 表达式的 值; - PowerPoint PPT Presentation
Citation preview
1
Mathematica编程语言基础
专题 5:编程
20
条件命令条件命令If[ 条件,真操作,假操作,其它操作 ]
先判断条件 ;
如果是 true ,执行真操作 ;
如果是 false ,执行假操作 ;
如果两者都不是,执行其它操作
21
If[ 条件,真操作 ]
If[ 条件,真操作,假操作 ]
表达式 /; 条件 仅当条件为 True时 才执行表达式
22
Which[ 条件 1, 表达式 1, 条件 2, 表达式 2, …]
依次计算条件 i ,给出对应第一个条件为 True 的表达式的值;
若所有条件 i 的值都是 False ,则返回 Null
23
Switch[ 表达式 , 形式 1, 形 1 值 , 形式 2, 形 2 值 , …]
执行表达式,将结果依次与形式 i匹配,给出与第一个可匹配的形式的值 ;
若没有可匹配的形式,则返回 Null
24
循环命令循环命令 While[ 条件 , 表达式 ]
判断条件,如果为 true ,执行一次表达式 ;
如果为 flase ,退出循环。重复上边步骤,直致条件为 false
表达式可由多个语句组成 , 用“ ;” 隔开
25
For[ 初始化,条件,增量,表达式 ] 执行初始化 ( 只执行一次 ); 判断条件 , 如果为 true, 执行一次表达式 ;
如果为 flase ,退出循环 ; 计算增量 , 修改条件 ; 重复上边步骤 , 直致条件为 false
• 初始化、条件、增量、表达式都可由多个语句组成,用“ ;” 隔开
26
Do[ 表达式 , {i, imin, imax, di}]
按循环描述,重复求值表达式
27
Break[ ] 退出最里面的循环Continue[ ] 转入当前循环的下一步Return[expr] 退出所有循环,返回expr
循环控制命令循环控制命令
28
简单输出语句简单输出语句 循环控制函数自身不输出结果 Print[ 变量 or “ 字符串” ]
输出变量的值或字符串内容 不受句末“ ;” 影响
29
例 定义如下函数
2
0, 0
, 0 2
, 2
x
x x
x x
① 使用“ /;” 定义f [x_]:= 0 /;x<=0
f [x_]:= x /; x>0&&x<=2
f [x_]:= x^2 /; x>2
f(x)=
30
② 使用 If 定义f [x_]:= If [ x<=0, 0, If [x>2, x^2, x ] ]
③ 使用 Which 定义f [x_]:= Which [ x<=0, 0, x>2, x^2, True, x ]
31
In[41]:= Fori 1; t x, i^2 20, i , t t^2 i;
Printt 1 x2
2 1 x22
3 2 1 x222
4 3 2 1 x2222
32
In[64]:= t 1; Dot k; Printt;Ift 3 && t 6, Continue ; t , k, 10
2
3
5
9
13
18
24
31
39
48
例 1. 写出一元二次方程 ax2 + bx + c = 0 判别根的类型的 Mathematica 自定义函数形式。
解 : 一元二次方程根的判别式为 =b2 -4ac,当 >0 时方程有两个实根 ; 当 <0 时方程有两个复根 ; 当 =0 时方程有两个实重根 , 它有多于两种的选择 , 故可以用 Which 语句表示。
• Mathematica 命令为In[8]:=g[a_, b_, c_]:=(w=b^2-
4*a*c;Which[w>0,"two real roots",
w<0,"two complex roots",w == 0,"duplicate roots" ])
In[9]:=g[0,1,2]Out[9]= two real rootsIn[10]:=g[3,1,2]Out[10]= two complex rootsIn[11]:=g[3,0,0]Out[11]=duplicate roots
例 2 找出 300 至 500 之间同时能被 3 和 11 整除的自然数。• 解 : Mathematica 命令为 : In[23]:= Do[If[Mod[i,13]== 0 && Mod[i,3]== 0,Print[i]],{i,300,500}] 312 351 390 429 Out[23]= 468
• 例 3 找出方程在 [0,100] 内的整数解。• 解 :• In[24]:= Do[z =100 – x - y; If[5x+3y+z/3==100,Print["x= ",x," y=",y," z=",z]] , {x,0,100},{y,0,100}]• 得解x= 0 y= 25 z= 75x= 4 y= 18 z= 78x= 8 y= 11 z= 81x= 12 y= 4 z= 84
1003
35
100z
yx
zyx
例 4 编制 20 以内整数加法自测程序解 :In[30]:=For [i=1,i<=10,i++,
t=Random[Integer,{0,10}]; s=Random[Integer,{0,10}]; Print[t,"+",s,"="];
y=Input[]; While[y!=t+s, Print[t,"+",s,"=",y," Wong !Try
again!"];Print[t,"+",s,"="]; y=Input[]] ;Print[t,"+",s,"=",y," Good"] ]• 执行结果为3+0=3+0=3 Good7+3=12 Wong!Ttry again!7+3=10 Good
例 5: 用割线法求解方程 x3-2x2+7x+4=0 的根 , 要求误差 |xk-xk-1|<10^(-12), 割线法的计算公式为
•
• 解 : • In[26]:= f[x_]:=x^3-2x^2+7x+4• In[27]:= x0=-1;x1=1; • In[28]:= While[Abs[x0-x1]>10^-12,x2=x1-
(x1-x0)*f[x1]/(f[x1]-f[x0]);x0=x1;x1=x2]• In[29]:= N[x1,12]• Out[29]= -0.487120155928
)()()(
11
1
21
211
10
k
kk
kkkk
xfxfxf
xxxx
xx
49
文件和外部操作• <<file 从文件中读取数据• <<contentx` 从具有指定上下文文件读取• expr>>file 把表达式输出到文件,参 Save• expr>>>file 把表达式追加到文件• FilePrint 显示文件内容• Save[“file”, f,g,…]• Directory[], SetDirectory[“dir”]• FileName[], FileName[“form”]• CopyFile[“file1”, “file2”], DeleteFile[“file”]
50
文件和外部操作• Import[“file”, “Table”] 导入数据表• Export[“file”, list, “Table”] 把 list 数据表导出到
文件
In[204]:= Export"out.dat", 5.7, 4.3, 1.2, 7.8 Import"out.dat", "Table"
Out[204]= out.dat
Out[205]= 5.7, 4.3, 1.2, 7.8
51
导入导出一般数据(按文件后缀区分)
• Import[“name.ext”]• Export[“name.ext”, expr]
• $ImportFormats 系统支持的导入格式• $ExportFormats 系统支持的导出格式• expr 可以放在 ToBox[] 中,可加 format 参数