版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1Mathematica
编程语言基础专题5:编程2纯函数没有名字的函数,可用如下方式定义Function[x,body]orFunction[{x1,x2,…},body]Body& 自变量为#1,#2,#3….纯函数省去了函数命名,常常与Map,Apply,Nest等函数结合使用3# 表示纯函数第一个变量#n 表示纯函数第n个变量## 表示纯函数第所有变量序列##n 表示纯函数从第n个变量开始的变量序列56一些常用函数运算Composition[f,g,…] 函数的复合,相当于f@g@InvereFunction[f] f的反函数Identity 恒等函数Through[p[f1,f2][x]]给出p[f1[x],f2[x]]Operate[p,f[x]] 给出p[f][x]78模式的命名(pattern)_ 任意表达式x_ 名为x的任意表达式x:pattern 与pattern匹配的名为x的表达式10限制模式pattern/;condition 条件满足时模式匹配lhs:=rhs/;condition 条件满足时使用定义lhs:>rhs/;condition 条件满足时使用规则12多种选择方案 |1415变量个数不确定以及模式默认值__可以表示个数不确定的变量___可以表示零个或多个变量两者其他用法与_相同x_:x0表示模式x具有默认值x0x_.表示变量x具有默认值x_+y_. y的默认值为0x_y_. y的默认值为1x_^y_. y的默认值为116带有默认值的模式可以作为函数的可选变量17重复模式expr.. 重复一次或多次expr… 重复零次或多次18x==y 当x与y的值相等时,返回true,
否则返回falsex!=y或x≠y 当x与y的值不相等时,返回true,
否则返回falsex>y x<y x<=y或x≤yx>=y或x≥y 逻辑判断符号20条件命令If[条件,真操作,假操作,其它操作]
先判断条件;
如果是true,执行真操作;
如果是false,执行假操作;
如果两者都不是,执行其它操作21If[条件,真操作]If[条件,真操作,假操作]表达式/;条件 仅当条件为True时 才执行表达式23Switch[表达式,形式1,形1值,
形式2,形2值,…]
执行表达式,将结果依次与形式i匹配,给出与第一个可匹配的形式的值; 若没有可匹配的形式,则返回Null24循环命令While[条件,表达式]
判断条件,如果为true,执行一次表达式;
如果为flase,退出循环。 重复上边步骤,直致条件为false表达式可由多个语句组成,用“;”隔开26Do[表达式,{i,imin,imax,di}]
按循环描述,重复求值表达式27Break[] 退出最里面的循环Continue[] 转入当前循环的下一步Return[expr] 退出所有循环,返回expr循环控制命令28简单输出语句循环控制函数自身不输出结果Print[变量or“字符串”]
输出变量的值或字符串内容不受句末“;”影响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]3132例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,"tworealroots",w<0,"twocomplexroots",w==0,"duplicateroots"])In[9]:=g[0,1,2]Out[9]=tworealrootsIn[10]:=g[3,1,2]Out[10]=twocomplexrootsIn[11]:=g[3,0,0]Out[11]=duplicateroots例2
找出300至500之间同时能被3和11整除的自然数。解:
Mathematica命令为:In[23]:=Do[If[Mod[i,13]==0&&Mod[i,3]==0,Print[i]],{i,300,500}]312351390429Out[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=0y=25z=75x=4y=18z=78x=8y=11z=81x=12y=4z=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!Tryagain!"];Print[t,"+",s,"="];y=Input[]];Print[t,"+",s,"=",y,"Good"]]执行结果为3+0=3+0=3Good7+3=12Wong!Ttryagain!7+3=10Good例5:
用割线法求解方程x3-2x2+7x+4=0的根,要求误差|xk-xk-1|<10^(-12),割线法的计算公式为
解:In[26]:=f[x_]:=x^3-2x^2+7x+4In[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.48712015592837
模块化(Module)
Moudule[{x,y,…},body] 具有局部变量x,y,…的模块38对局部变量赋初值
Module[{x=x0,y=y0,…},body]在使用局部变量时可以利用条件39模块工作的基本原理模块每使用一次,就产生一个新符号代替局部变量,新符号的名字被唯一给定,它不与任何其他名字冲突。命名的方法是给定局部变量后加$,并给出唯一序号。这些符号具有临时性Unique[x] 产生形如x$nnn唯一名称的新符号Unique[{x,y,…}] 产生一个新符号表$MouduleNumber为当前临时符号的序号,$SessionID为当前进程的进程号,巧妙设定可以避免不同进程临时序号相同产生的冲突。例如$ModuleNuber=10^10$SessionID40数学中的哑元41Block块Module变量具有局部性,Block变量名是全局的,值是局部的,退出Block后变量值自动恢复42With块使用局部常数With[{x=x0,y=y0,…},body]定义局部常数x,y,…。可以认为它是/.的推广43产生编译后的函数Compile[{x1,x2,…},expr] 产生编译后的函数,对xi的值计算expr。编译后的函数会快很多,适合多次使用的函数44标准的计算过程计算表达式的头部(Head[]或者[[0]]都能获得头部,Level[expr,Heads->True]会自动显示头部)依次计算表达式的每个元素使用与Orderless、Listable和Flat相关的规则使用已给出的定义使用内部定义计算结果45非标准计算过程x=y 不计算左边(请尝试x=x+1)If[p,a,b] a或b不同时计算Do[expr,{n}] 计算表达式n次Plot[f,{x,…}] 对x的一系列数值计算fFunction[{x},body] 直到运用函数时才进行计算46可以改变计算过程的函数Evaluate[expr]Hold[expr]4748程序调试相关(自行查阅相关帮助)TraceStack49文件和外部操作<<file 从文件中读取数据<<contentx` 从具有指定上下文文件读取expr>>file 把表达式输出到文件,参Saveexpr>>>file 把表达式追加到文件
显示文件内容Save[“file”,f,g,…]Directory[],SetDirectory[“dir”][],[“form”]CopyFile[“file1”,“file2”],DeleteFile[“file”]50文件和外部操作Import[“file”,“Table”] 导入数据表Export[“file”,list,“Table”]把list数据表导出到文件51导入导出一般数据(按文件后缀区分)Import[“name.ext”]Export[“name.ext”,expr]$ImportFormats 系统支持的导入格式$ExportFormats 系统支持的导出格式expr可以放在ToBox[]中,可加format参数52其他形式TeXForm[expr],TeXSave[“”],TeXSave[“”,“source.nb”]HTMLSave[“”,“source.nb”]Cform[expr]和FortranForm[expr]Splice[“file”,“outfile”]把形如<*expr*>的内容转化为相对应的输出,例如y=<*Integrate[Sin[x]^5,x]*>; 变为y=-5*Cos(x)/8+5*Cos(3*x)/48-Cos(5*x)/80;53运行外部命令<<“!command”MathLink(略)Install[“command”]Uninstall[link]54上下文任何符号由上下文和一个短名构成,形如context`short$Context给出当前上下文,默认为GlobalContext[s]给出一个符号的上下文Context[]所有上下文组成的集合$ContextPath为当前上下文搜索路径<<Calculus`Pade`只是将此包添加到上下文搜索路径中,可以通过全名直接使用包中函数,例如55建立程序包BeginPackage[“Package`”] 将Package作为当前上
下文f::usage=“text” 引入作为输出目标Begin[“`Private`”] 设置上下文为 Package`Privatef[args]=value 给出程序包中定义的主体End[] 转换到当前一个上下文EndPackage[] 上下文结束程序包,并放
入搜索路径56指定独立包函数<<context`或者Get[“context`”]Needs[“context`”] 当指定上下文不在$Packages中时读入程序包BeginPackage[“Package`”]开始一个包Begin[“context`”]转向一个新的上下文,End[]转向前一个上下文DeclarePackage[“context`”
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 国家知识产权局专利局专利审查协作北京中心2026年度专利审查员公开招聘100人备考题库及一套答案详解
- jawa 布局与日历课程设计
- 2025年中国科学院高能物理研究所软件工程师岗位招聘备考题库及1套完整答案详解
- matlabe课程设计的论文
- 2440秒表课程设计
- 2025年洛阳市公安机关招聘警务辅助人员职位数核减及调剂情况考试重点试题及答案解析
- 2025恒丰银行上海分行社会招聘29人参考考试试题及答案解析
- 2025年深圳市优才人力资源有限公司公开招聘聘员(派遣至深圳市龙岗区工信局)的备考题库完整参考答案详解
- 2025年昆明市官渡区云南大学附属中学星耀学校招聘备考题库及一套参考答案详解
- 2025湖北智新半导体有限公司招聘备考考试题库及答案解析
- 2025年1月黑龙江省普通高中学业水平合格性考试物理试卷(含答案)
- 江西省三新协同体2025-2026年高一上12月思想政治试卷(含解析)
- 知识点及2025秋期末测试卷(附答案)-苏教版(新教材)小学科学小学科学二年级上册
- 2025安徽芜湖市鸠江区人民医院招聘工作人员21人笔试考试参考试题及答案解析
- 《城市轨道交通车站机电设备运用》课件 项目三:站台门系统
- 企业财务尽调咨询服务合同
- 企业税务规划合规审查手册
- 2026年山西工程职业学院单招职业技能考试题库及答案解析(名师系列)
- 附件扭转诊治中国专家共识(2024年版)解读
- 社区工作者社工面试题及答案解析
- 2024年福建省特殊技能人才录用公安特警队员笔试真题
评论
0/150
提交评论