210 likes | 403 Views
Mathematica 编程语言基础. 专题 5 :编程. 条件命令. If[ 条件,真操作,假操作,其它操作 ] 先判断条件 ; 如果是 true ,执行真操作 ; 如果是 false ,执行假操作 ; 如果两者都不是,执行其它操作. If[ 条件,真操作 ] If[ 条件,真操作,假操作 ]. 表达式 /; 条件 仅当条件为 True 时 才执行表达式. Which[ 条件1, 表达式 1 , 条件2, 表达式 2 , …] 依次计算 条件 i , 给出对应 第一个 条件为 True 的 表达式的 值;
E N D
Mathematica编程语言基础 专题5:编程
条件命令 • If[条件,真操作,假操作,其它操作] 先判断条件; 如果是true,执行真操作; 如果是false,执行假操作; 如果两者都不是,执行其它操作
If[条件,真操作] • If[条件,真操作,假操作] • 表达式/;条件 仅当条件为True时 才执行表达式
Which[条件1, 表达式1, 条件2, 表达式2,…] 依次计算条件i,给出对应第一个条件为True 的表达式的值; 若所有条件i的值都是False,则返回Null
Switch[表达式, 形式1, 形1值,形式2, 形2值, …] 执行表达式,将结果依次与形式i匹配,给出与第一个可匹配的形式的值; 若没有可匹配的形式,则返回Null
循环命令 • While[条件, 表达式] 判断条件,如果为true,执行一次表达式; 如果为flase,退出循环。 重复上边步骤,直致条件为false • 表达式可由多个语句组成, 用“;”隔开
For[初始化,条件,增量,表达式] • 执行初始化(只执行一次); • 判断条件, 如果为true, 执行一次表达式; 如果为flase,退出循环; • 计算增量, 修改条件; • 重复上边步骤, 直致条件为false • 初始化、条件、增量、表达式都可由多个语句组成,用“;”隔开
Do[表达式, {i, imin, imax, di}] 按循环描述,重复求值表达式
循环控制命令 • Break[ ] 退出最里面的循环 • Continue[ ] 转入当前循环的下一步 • Return[expr] 退出所有循环,返回expr
简单输出语句 • 循环控制函数自身不输出结果 • Print[变量 or “字符串”] 输出变量的值或字符串内容 • 不受句末“;”影响
例 定义如下函数 f(x)= • 使用“ /;” 定义 • f [x_]:= 0/;x<=0 • f [x_]:= x /; x>0&&x<=2 • f [x_]:= x^2 /; x>2
② 使用 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 ]
例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 roots In[10]:=g[3,1,2] Out[10]= two complex roots In[11]:=g[3,0,0] Out[11]=duplicate roots
例2找出300至500之间同时能被3和11整除的自然数。例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= 75 x= 4 y= 18 z= 78 x= 8 y= 11 z= 81 x= 12 y= 4 z= 84
例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 Good 7+3=12 Wong!Ttry again! 7+3=10 Good
例5:用割线法求解方程x3-2x2+7x+4=0的根,要求误差|xk-xk-1|<10^(-12),割线法的计算公式为例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
文件和外部操作 • <<file 从文件中读取数据 • <<contentx` 从具有指定上下文文件读取 • expr>>file 把表达式输出到文件,参Save • expr>>>file 把表达式追加到文件 • FilePrint 显示文件内容 • Save[“file”, f,g,…] • Directory[], SetDirectory[“dir”] • FileName[], FileName[“form”] • CopyFile[“file1”, “file2”], DeleteFile[“file”]
文件和外部操作 • Import[“file”, “Table”] 导入数据表 • Export[“file”, list, “Table”]把list数据表导出到文件
导入导出一般数据(按文件后缀区分) • Import[“name.ext”] • Export[“name.ext”, expr] • $ImportFormats 系统支持的导入格式 • $ExportFormats 系统支持的导出格式 • expr可以放在ToBox[]中,可加format参数