Mathematica-定义函数与变换规则.docx
第9章定义函数与变换规则前面几教所介纲的各种函数都是在MAhgtie系统中给好定义、明确功能,提供给用户直接调用的。但在实际问题中还有许多函数因为用户特殊需姿.而系统中没有定义.在这种情况下需要由用户口己来给出定义,以供后面使用的方便,这就姑下面要介绍的自定义南数C9.1 自定义函数9.1.1 自定义一元函数自定义一元函数方法如下:fx:=自选表达式例如人,:=2*+3等,如果将此式同数学中常用的函数定义符号/(w)=2*+3相比较,容易看到二者间的差别。按照Mathematka的规定,应该将SI括号换为专用于函数的方括号,即/UJ=2、*3,于是二者间的主要差别有二,一是自变贵“,一”与“”的差别,二是定义符“:=”与1”的差别。<1)先看X与X功能上的差别(占位符,规则变量,模式变量)【例1】f*J=2*+3b;x-*3642x(*-代表”运行后等于”,相当于+,)y36+2y/(4'*5ZnI,2,3-12+36.4+36.6+3用«x:=2*+36;gx)-*3fe+2xgty-gly(*无定义,找不到与右端表达式相匹配的人原样输出*)gib("无定义,网上,)g(I,2.3lWH.2.31(*无定义,问上*)上面例子说明:自定义函数符号AHj:=2M+3中的XX在X后面必须索眼希加一个下划线)同数学函数符号/(x)中,的功能基本上一样,都是起着自变量的作用在MathemIiCa里将W.称为规则变就或模式变量.匍/U中的工类似于数学里的一个常量,即只代表/U-J在某一点的值。tx:=2x+36中模式变量X代表着一类重要的实体,它不仅可以取实数,还可以取向量和矩阵,以及由/所规定的同右端表达式中与XJe匹配的任何转构的II1.(2)再看“=”与功能上的差别(马上赋值,延时赋值)它们的主要差别是:前者为立即赋值,后若为ii时赋值,亦即使用=”号时.右边表达式在定义时被立即赋值,而使用“:=”号时,右边的表达式在定义时衡不赋值,直到被调用时才被赋值。请看下面的例子:【例2】dcar,g;X2;txj三*,2;g_:=2;-31M一9上面例子说明fX=x2在定义时便被赋位X=2,在调用它时3J中的值已是2,了,而gjJ:”<2在定义时暂时不赋值,直到调用时/31才被IK值/3=3气在使用自定义函数时,要特别注意到它与数学中巳经习惯使用的函败符号/(Q在这两点上的不同,以避免一些不必筮错混的发生。例2中设置开头语句Ckar,gj,是为了清除掠前面对/与g的所有定义,否则容易引超同例1中/,g的混淆,常用的消除函数有:,,:.清除人工J的定义dead/消除/的所有定义9.1.2 自定义多元函数自定义二元函数的一般形式是fu_.V:=自选表达式例如在第2章的2.5.3节参数式给图中,绘制螺旋面时我们曾引入了xu_.«*_:=«*Coet>5?u=u»Sinv;zu:=*u+6«共有3个自定义二元函数。这为我们绘制参数曲线面提供了很大的方便。类似的还可以定义三元、四元以及更多元的自定义函数C例如.,-,x-:=*Exp-2*af2(,带参数的概率函数e"*")$1.a_,b_,c_,*:=a-Sin6-N+c(*带参数的简萧运动函数*)Zhouer9.1.3 自定义函数的保存与重新调出已经自定义好的函数,假如希望以后多次运用,这就须要妥当保存与重新调出,保存的方法如下:Save“文件名”,自定义函数名序列f,g,【例3】将函数/G)="½保存到文件Hel中。1 +X/#:=1/(1+a2);Saveufile,/如果还有新的函数想要迫加到文件file1中.则有g"=*2+»t2jK。.,*_,¥_:=*Ex-(*2+/2);Save(",file',g,h如果想要查看一下文件HeI中的内容.有!filel/UJ=1/(1+/2)g"_,»_:=12+/2A(_»y_1:=*EXP-32+/2)j保存在文件Glel中名为ftg,h的函数如果要里新调用,方法如下:首先进入MathematiCa,然后调出filcl文件,便可直接使用文件中的函数了。例如,计算/U)+gU,2的值有:In:=<<fileiIn2:=ti+gl,2OUI=11/2Note:Save“文件名”,变量名1,变量名2,查看内容:!文件名显示已经运用的全部变量:?Global,*92纯函数在MathematiCa中还常用到一种没有函数名字的函数,这种特别形式的函数称为纯函数。9. 2.1纯函数的一般形式FUnCtion自变位,函数表达了匕例如InFl:=Euncti1.x.*2+*;(*定义纯函数/+*)ln2:=Function*,af2+s2(*计算/+x在*=2处的值*)OUtl2j=6ln(3:=FunctionCIx,yI,x'2+y,2x*yl.2Out3三310. 2.2纯函数的缩写形式上面纯函数的般形式与通常函数的书写形式相比还较麻烦,至少须要输入更多的字符,假如采纳函数的缩写形式就会简便得多,缩耳形式如下:函数衰达式&式中用&代替rFunCtion,省略了自变量,如果是一元函数自变量,用符号#表示,多元时则用#n表示第。个自变量。例如上面例子的缩写形式为:/=(#-2+#)&2-6g=(#l2+#22-#1*#2)&g1.2=3另外,符号笄表示全部的自变量,小n表示从第n个起往后的全部自变量。f#,#2&×.y.zf×.y,z,y.zEg.a=Range10:SelectCa,ModS,2=O&9.3表达式求值与变换规则9.3.1表达式求值在HatheinatiCa系统中,全部输入的实体都可称为表达式,系统对表达式的处理过程称为求值过程,求值的结果可能是个数值、个图形、个表达式等等。求值的对象是表达式,求值的结果也是表达式,因此可将求值过程看作是从表达式到表达式的一种变换,或者是一种映射。Malhemulica对表达式的处理系统是由一个求值系统和一个变换规则库组成。变换规则库通常由系统内部已有的函数组成.用户也可新建些函数加入到规则库中。求值的过程是系统运用库中的各种规则对表达式进行变换,始终到库中没有变换规则可利用为止。新得到的表达式就是对原输入表达式求值的结果。系统的求值实力则是由变换规则库中有些什么规则干脆确定。卜面先看一个简洁例子来说明一下表达式的求值过程:【例】MJcIJ(将表?a.6!与Ic!连接起来)Outl*la,6,c)上Sf表达式输入并开始执行后,系统在已有的变换规则库里找到一条与Jom有关的规则,然后进行相应的变换,JR后得到结果la,6,cI并稚出。(例2】ln21三x=2;y=3;/(*)=*+4;gy三y-I;,yy*t*gy5OUt=9上面输入的5个表达式,分别由用户定义了5条变慢规则,系统将按照用户的这些规则进行变怏,褥到结果(效值9)后井健也。系统刷启动时,用户定义的规则集合为空,规划库地只有系统内部的规划.接着用户定义的变换规则也将被加入到规则库中,用户在使用时不会感到系统规WI与用户规则有什么根本的区别。9.3.2变换规则变换规则可分为自动运用的规则与非自动运用的规则两类。(1)自动运用的规则由上述内容知道.对表达式的求值过程就是系统对表达式进行一系列的使用变换规则的过程,系统原有的变换规则呵用户新建的变换规则(函数或表达式)均被存入系统的规则庠里,在求值时系统将会口动衣Krj使用。其中用一="与“:=”号定义的规则都属于这一类,可弥之为自动使用的规则,比如在前面表达式求值中所率的例1、例2就是这样的例子。(2)非自动运用的规则非自动使用的规则不能放入系统的规则库中,求值系统无法找到它们,因而系统不能口动使用,饕由用户来说明这些规则,并要求它们做某些变换时,这些规则才能对立达式发挥作用,在数学里有许多用等式描述的演算规则,它们经常从两个不同的方向被人们使用,例如/-1=(工+1)(*-1),根据不同的需要,可以要求它从左到右展开,也可以要求它从右到左合并.像这样的演算规刖就应该放人非自动使用的规则中。因为在定义自动使用规则时,总是依照一个方向来考虑和进行变换的。Eg.2xy.(x->2,y->3(3)带有条件的规则在延时赋值号“:=”与“:>”号定义的变换规副中,还可附加条件,它们定义的形式如下:模式:=表达式/;条件;模式:>表达式/;条件其中/;是附加条件用的操作符。【例3】利用带条件的规则定义阶乘函数/(n)=n!。f=5/n:i:n»/n-l/;Integcrt)nJ<5n>0其中附加条件的内容是当n为整数时其值为真;否则为假.同时还要求n>01÷JTt-I<2【例4】利用带条件的规则定义分段函数Sa)=5-X,2>50,其俺g>_l:=l+”;-1<三x<2;g:x:=5-x/;2<="=5;g*_:=O/;HV-Ilx>5;这样定义的规则除了模式与对象表达式必然匹配以外,同时还要求附加条件也要满足,执行的结果才能正确。94表达式的统一形式(略)