找回密码
 快速注册
搜索
查看: 1695|回复: 3

不等式mathematica对称求和和轮换求和的自定义的函数

[复制链接]

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

hbghlyj 发表于 2020-1-29 12:09 |阅读模式
本帖最后由 hbghlyj 于 2021-2-17 03:07 编辑
  1. cyc = Total[# /. {{}, {a -> b, b -> c, c -> a}, {a -> c, b -> a, c -> b}}] &;
  2. sym = Total[# /. {{}, {b -> c, c -> b}, {a -> b, b -> c,
  3.       c -> a}, {a -> b, b -> a, c -> c}, {a -> c, b -> a,
  4.       c -> b}, {a -> c, b -> b, c -> a}}] &;
  5. cycQ = # === (# /. {a -> b, b -> c, c -> a}) === (# /. {a -> c,
  6.       b -> a, c -> b}) &;
  7. symQ = # === (# /. {a -> b, b -> a}) === (# /. {a -> c, c -> a}) &;
  8. invcyc = Function[f,
  9.   Module[{g = 0, f1 = Expand[f],first},
  10.    If[PolynomialQ[f, {a, b, c}],
  11.     If[cycQ[f],
  12.      While[! f1 === 0, first = First[f1]; g = g + first;
  13.       f1 = f1 - cyc[first]]; g, "Not cyclic"],
  14.     "Not a polynomial of a,b,c"]]];
  15. invsym = Function[f,
  16.   Module[{g = 0, f1 = Expand[f], l, m, n, first},
  17.    If[PolynomialQ[f, {a, b, c}],
  18.     If[symQ[f],
  19.      While[! f1 === 0,
  20.       first = First[f1]; {l, m, n} =
  21.        Exponent[first, #] & /@ {a, b, c};
  22.       If[l == m == n, first = first/6,
  23.        If[l == m || l == n || m == n, first = first/2]];
  24.       g = g + first; f1 = f1 - sym[first]]; g, "Not symmetric"],
  25.     "Not a polynomial of a,b,c"]]]
复制代码
2月17日更新:
把cyc,sym函数限制到了a,b,c的式子上.
增加了cycQ,symQ判断式子是否关于a,b,c轮换或对称.
增加了invcyc,若f是关于a,b,c的轮换多项式,输出a,b,c的多项式g使$f=\sum_{\text{cyc}}g$;
若f是关于a,b,c的不轮换的多项式,输出"Not cyclic";
若f不是关于a,b,c的多项式,输出"Not a polynomial of a,b,c".
增加了invsym,若f是关于a,b,c的对称多项式,输出a,b,c的多项式g使$f=\sum_{\text{sym}}g$;
若f是关于a,b,c的不对称的多项式,输出"Not symmetric";
若f不是关于a,b,c的多项式,输出"Not a polynomial of a,b,c".

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2021-2-17 03:09
测试:
Simplify[cyc[invcyc[(a + b + c) cyc[a^3 (a + c)]]] - (a + b + c) cyc[a^3 (a + c)]]
Simplify[sym[invsym[(a + b + c) sym[a^3 (a + c)]]] - (a + b + c) sym[a^3 (a + c)]]
输出:
0
0

3149

主题

8386

回帖

6万

积分

$\style{scale:11;fill:#eff}꩜$

积分
65391
QQ

显示全部楼层

 楼主| hbghlyj 发表于 2021-4-2 03:36
回复 1# hbghlyj
这代码还是有问题

730

主题

1万

回帖

9万

积分

积分
93593
QQ

显示全部楼层

kuing 发表于 2023-9-11 18:20
maple 平台上的 bottema2009 程序的三元轮换对称求和函数的写法是这样的:
  1. sgm:=proc(expr)
  2.    local rap,ex2,ex3,ex:
  3.    
  4.    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,
  5.          ra=rb,rb=rc,rc=ra,ma=mb,mb=mc,mc=ma,wa=wb,wb=wc,wc=wa,ka=kb,kb=kc,kc=ka,
  6.          HA=HB,HB=HC,HC=HA,IA=IB,IB=IC,
  7.          IC=IA,Ha=Hb,Hb=Hc,Hc=Ha,A=B,B=C,C=A,Ra=Rb,Rb=Rc,Rc=Ra,GA=GB,GB=GC,
  8.          GC=GA,JA=JB,JB=JC,JC=JA,ca=cb,cb=cc,cc=ca,Ja=Jb,Jb=Jc,Jc=Ja}:
  9.          
  10.    ex2:=subs(rap,expr):
  11.    ex3:=subs(rap,ex2):
  12.    ex:=expr+ex2+ex3:
  13.    RETURN(ex)
  14. end:
复制代码

(中间那些 ha Ra 之类的是三角形里的几何量。
另外我才发现竟然有两组 A=B,B=C,C=A,Ra=Rb,Rb=Rc,Rc=Ra 😳)

像这么多的轮换元素,如果在 mma 里写应该咋写呢?按楼主的写法好像有点麻烦……

四元轮换的话:
  1. sgm4:=proc(expr)
  2.    local rap,ex2,ex3,ex4,ex:
  3.    
  4.    rap:={a=b,b=c,c=d,d=a,x=y,y=z,z=w,w=x}:
  5.          
  6.    ex2:=subs(rap,expr):
  7.    ex3:=subs(rap,ex2):
  8.    ex4:=subs(rap,ex3):
  9.    ex:=expr+ex2+ex3+ex4:
  10.    RETURN(ex)
  11. end:
复制代码

手机版|悠闲数学娱乐论坛(第3版)

GMT+8, 2025-3-4 12:17

Powered by Discuz!

× 快速回复 返回顶部 返回列表