1、自定义函数,简单函数的定义 复杂情况 纯函数 函数的属性,简单函数的定义,自定义函数的方法 fx_ := x2 + yf2fyfa - 1 在例中,In1定义了数学意义上的函数f(x)=x2+y,自定义函数仍用:“函数名自变量“的形式,其中自变量x用 x_ 表示,而=用:= 表示,等号右边的数学表达式按常规形式.这一步执行后,没有输出结果,但Mathernatica记忆了关系式fx_:=x2+y。,在例中首先定义了自变量是u,v的二元函数f(u,v)=u2-v2,在In3中以u=1,v=l+x代入得到函数值1-(l+x)2,在In4和In 5中就是对表达式1-(1+x)2求导和积分。这说明,对
2、自定义函数仍可按人的意图进行各种符号运算。不过在Mathematica中自定义函数时,格式较为特殊,容易出现错误。,x与x_的区别,gx:=x2+y;fx_:=x2+yg2;f2gy;fy fx_可以定义函数, gx不能定义一个函数 Mathematica只记住了符号gx表示x2+y,但g2和gy等并没有值被求出。 Mathematics约定fx中的x_表示函数f的自变量,而fx表示函数f当自变量取值为x时的函数值。,“:=”与“=”的差别,如果将例中的“:=“改用“=“,却一切正常,看不出问题.但它们的差别可由下例说明。 两种等号的差别之一: x=2;fx_=2x;gx_:=2x;?f ?g
3、f3g3,在例中因为开始己经定义x=2,当使用“=”定义f(x)时,立即将右边的数学表达式进行求值,将x=2代入得到函数定义式fx_=4,Mathematica记忆的是fx_=4。而使用“:=”时,Mathematics总是将输入的函数定义式原样记忆。,如果事先没有定义x=2,则不会出现上述问题,被Mathematica记忆的仍是fx=2x.使用表达式fx_=2x与使用表达式fx_:=2x没有区别,再求f3时都是将x=3代入定义式右边的数学表达式,得到6。也就是说,都可以理解成了f(x)=2x了,因此两种等号没有差别。 二种等号的差别之二,在例中前一个函数定义后右边的积分立即被求出,而后一个函
4、数在定义后并不进行积分,再求函数值时才进行积分.使用“?”查看可知,被Mathematica记忆的函数表达式不同。使用“=”时立即对右边的数学表达式进行计算,使用“:=”时右边的数学表达式不变,当求函数值时才进行计算。定义函数时,两种等号都可以使用,应当弄清两者的差别适当选用,不要造成定义函数必须使用“:=”的错觉。,由多个表达式定义的函数,可以使用递推公式定义函数。 自定义计算n!的函数。 f0=1;fn_:=n fn-1;f10 说明:在例中In1定义了函数值f0,In2的函数定义式是递推公式,由此实际上定义了f(n)=n!.但以上定义有缺陷,如果求f0.5就会出错,因为Mathemati
5、ca并不认为n表示非负整数。解决方法是用n_Integer? Positive替代n_,说明n是整数(头为Integer)并且满足是正数的条件,其中问号是后一条件的分隔符.,参数个数不确定的函数,定义一个函数时,允许事先对参数指定默认值,如果使用时不给出参数值,就自动将默认值作为参数值。这样的参数格式如下: x_:v 其中冒号后面的v表示参数x的默认值. fx_, y_:0 := x2 + y2; f3; f3, 4 以上In1中定义了第2个参数的默认值为0,这样在求值时允许不给出第2个参数的值。但是如果两个参数都使用默认值,就会出问题,在In2中就无法识别所给的一个参数值究竟是赋给哪一个参数
6、的。当只有一个可选参数时,使用以上方法是最方便的。,复杂情况,(1)参数的一般表示法 _ 可以表示任何一个表达式 x_ 代表一个名为x的表达式. x_h 代表一个名为x附加有限制性说明h的表达式. _ _可以代表任何一个或多个表达式 x_ _可以代表名为x的一个或多个表达式. x_ _h 代表名为x附加说明h的一个或多个表达式. _ _ _可以代表任何零个或多个表达式 x_ _ _可以代表名为x的零个或多个表达式. x_ _ _ h 代表名为x附加说明h的零个或多个表达式.,f := 2a; fx; fy + 2; f1, 2 说明:上例定义的是一元函数,无论自变量取何值都得到同一函数值,实际
7、上定义了一个常值函数。最后的f1,2是不合法的,因为一个下划线只能代表一个参数,Mathematica不能求值。 f_ := x + y; g_ := a b; fa; f1, 2, s; g; gr; g1, 2 说明:上述两个例子演示了单下划线、双下划线、三下划线的区别,一然而它们却没有实用价值,因为它们时函数定义式右边的数学表达式不起作用. 真正有实用价值的应用是自定义带有可选参数的函数。,Plotsina_, b_, opt_ := PlotSinx, x, a, b, opt; Plotsin0, 2Pi, AxesLabel - “t“, “r“, AxesOrigin - Pi,
8、 0 可选项可以是任意多个或没有,因而在定义式中使用了三下划线. fx_:=0+x;gx_,y_:=x y;f1,2,3,4,5;g-1,2,3,4,5 说明:这两个自定义函数并不复杂,但会使人感觉到,使用个数不确定的参数,既令人费解又容易出错。 以上作为函数参数使用的带有下划线的那些表达式称为模式,模式指明了参数的结构与名称,设置可选参数默认值的普遍方法 如果可选参数较多,可以使用以下两种方法设置默认值: SetOptionsf,option1-value1,.设置函数f的一个或多个可选参数的默认值。 Optionsf=option1-value1,.设置函数f的全部可选参数的默认值。 以上
9、两种设置方法的差别在于,后一个是设置全部可选参数的默认值,而前者可以只设置或改变部分默认值。后一函数还可以用于查阅默认值。,Optionsf=a-1,b-2;fx_,opt_:a xb/.opt/.Optionsf ?f;f2;f2,b-3;f2,a-2;f2,a-2,b-3 以上函数的定义式的形式为:函数表达式/.输入的可选参数表/.默认的可选参数表。执行过程是:首先将非可选参数的值代入函数表达式,然后将输入的可选参数表中给出的可选参数值代入函数表达式,因为用户给出的可选参数值先进行替换,就不会再用默认值替换了。用户没有给出值的可选参数,最后一律被默认值替换。这里需要注意opt的格式,是将所
10、有输入的可选参数表达式放入一个表中,这是操作符“/.”要求的。,纯函数,纯函数的表达式Mathematica还使用一种特殊的函数表示式,能定义一种没有函数名字的函数,称这种函数为纯函数 表达式:Function自变量,函数表达式表示一个函数。 Functionx,x2;Functionx,x22;Functionx,x23 也可以定义多元纯函数。 Functionx,y,SinxCosy;Functionx,y,SinxCosy2,3,纯函数表达式的缩写形式,以上纯函数表达式比普通函数的表达式还复杂,需要键入更多的字符。然而改用纯函数的缩写形式就方便了,缩写形式是: 函数表达式& 用&替代Fu
11、nction并省略自变量一项,其中一元自变量用特殊符号#表示,多元时用#n表示第n个自变量。 %2 f = Sin#1Cos#2 & f2, 3,说明:在例中In1是前例中定义的纯函数的缩写形式,在Out1中的#1与#意义相同,都表示自变量。缩写形式使纯函数表示法大大简化、用#字符表示自变量,用&表示纯函数。In2中的表达式%2即#12&2,表示当#1=2时的函数值.In3中将纯函数用f表示,因此In4中的f2,3也是求纯函数的函数值。引入纯函数,实际上给出了另一种定义函数f(x,y)=sin(x)cos(y)的方法,而且不必考虑自变量使用什么字符表示。 还有符号#表示所有自变量,#n表示从第
12、n个起往后的所有自变量。,函数的属性,查看函数的属性函数的属性用于指明函数所具有的某些特殊性质,Mathematica的内部函数大都带有一些属性,也可以给自定义函数添加属性. 查看Sinx的属性。 AttributesSin 查看、建立和清除属性的 Attributesf 查看名为f的函数的属性。 Attributesfattr1,attr2,. 设置f的属性 Attributesf 设置f的无任何属性,添加和清除属性的函数。 SetAttributesf,attr1,attr2,.添加属性到f的属性表中 ClearAttributesf,attr1,attr2,.清除f的指定属性 Clear
13、f清除f的定义但不清除属性。 ClearAllf清除f的定义和属性但不清除符号f。 Removef清除符号f. 常用的函数属性 (1)Protected Protected使函数的定义式受到保护,不能重新定义。Mathematica的内部函数都有此属性,以防被用户修改。除了使用上面列出的设置、添加、清除函数外,还有对这一属性的专门操作函数:,Protectf给函数f加上Protected属性. UnProtectf清除函数fProtected属性. 注意,内部函数也能被解除保护、重新定义和重新加上保护,但重启Mathematica时自动恢复原状。 fx_ := 2x Protectf ?f f
14、x_ := 3x (2) ReadProtected 属性ReadProtected使函数的定义式不能用“?”查看,但是并不保护这个函数。,fx_ := 2x; SetAttributesf, ReadProtected ?f; fx_ := 3x; f2 (3)Locked属性Locked将函数的属性锁定,既不能修改也不能清除,但是函数的定义式可以改变(当未加保护属性时)。 (4) Listable 有属性Listable的函数能将fa,b,c,.变成fa,fb,fc,.,Sin1, 2, 3 (5)NumericFunction 如果函数具有属性NumericFunction,当自变量是数时则Mathematica认为函数值也是数,例如Sinx有此属性。,