bottema2009 里定义了 sgm 函数,这是纯粹为了方便输入的,比如输入 sgm(a^2*b) 得到的是 a^2*b+b^2*c+c^2*a。
查了一下源代码,是这样定义的:- sgm:=proc(expr)
- local rap,ex2,ex3,ex:
-
- rap:={a=b,b=c,c=a,A=B,B=C,C=A,x=y,y=z,z=x,ha=hb,hb=hc,hc=ha,Ra=Rb,Rb=Rc,Rc=Ra,
- ra=rb,rb=rc,rc=ra,ma=mb,mb=mc,mc=ma,wa=wb,wb=wc,wc=wa,ka=kb,kb=kc,kc=ka,
- HA=HB,HB=HC,HC=HA,IA=IB,IB=IC,
- IC=IA,Ha=Hb,Hb=Hc,Hc=Ha,A=B,B=C,C=A,Ra=Rb,Rb=Rc,Rc=Ra,GA=GB,GB=GC,
- GC=GA,JA=JB,JB=JC,JC=JA,ca=cb,cb=cc,cc=ca,Ja=Jb,Jb=Jc,Jc=Ja}:
-
- ex2:=subs(rap,expr):
- ex3:=subs(rap,ex2):
- ex:=expr+ex2+ex3:
- RETURN(ex)
- end:
复制代码 那个 rap 里很清楚地显示了这个函数适用于哪些字母。
但是里面只定义了求和,没有求积,也没有四元,所以可以仿照着定义一下,方便使用。
四元的情况的 rap 就不用定义那么多东西了,就弄 a,b,c,d 和 x,y,z,w 好了。- sgm4:=proc(expr)
- local rap,ex2,ex3,ex4,ex:
-
- rap:={a=b,b=c,c=d,d=a,x=y,y=z,z=w,w=x}:
-
- ex2:=subs(rap,expr):
- ex3:=subs(rap,ex2):
- ex4:=subs(rap,ex3):
- ex:=expr+ex2+ex3+ex4:
- RETURN(ex)
- end:
- pro:=proc(expr)
- local rap,ex2,ex3,ex:
-
- rap:={a=b,b=c,c=a,A=B,B=C,C=A,x=y,y=z,z=x,ha=hb,hb=hc,hc=ha,Ra=Rb,Rb=Rc,Rc=Ra,
- ra=rb,rb=rc,rc=ra,ma=mb,mb=mc,mc=ma,wa=wb,wb=wc,wc=wa,ka=kb,kb=kc,kc=ka,
- HA=HB,HB=HC,HC=HA,IA=IB,IB=IC,
- IC=IA,Ha=Hb,Hb=Hc,Hc=Ha,A=B,B=C,C=A,Ra=Rb,Rb=Rc,Rc=Ra,GA=GB,GB=GC,
- GC=GA,JA=JB,JB=JC,JC=JA,ca=cb,cb=cc,cc=ca,Ja=Jb,Jb=Jc,Jc=Ja}:
-
- ex2:=subs(rap,expr):
- ex3:=subs(rap,ex2):
- ex:=expr*ex2*ex3:
- RETURN(ex)
- end:
- pro4:=proc(expr)
- local rap,ex2,ex3,ex4,ex:
-
- rap:={a=b,b=c,c=d,d=a,x=y,y=z,z=w,w=x}:
-
- ex2:=subs(rap,expr):
- ex3:=subs(rap,ex2):
- ex4:=subs(rap,ex3):
- ex:=expr*ex2*ex3*ex4:
- RETURN(ex)
- end:
复制代码
|