免費論壇 繁體 | 簡體
Sclub交友聊天~加入聊天室當版主
分享
返回列表 发帖

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

本帖最后由 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".

测试:
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

TOP

回复 1# hbghlyj
这代码还是有问题

TOP

返回列表 回复 发帖