本帖最后由 hbghlyj 于 2021-2-17 03:07 编辑 - cyc = Total[# /. {{}, {a -> b, b -> c, c -> a}, {a -> c, b -> a, c -> b}}] &;
- sym = Total[# /. {{}, {b -> c, c -> b}, {a -> b, b -> c,
- c -> a}, {a -> b, b -> a, c -> c}, {a -> c, b -> a,
- c -> b}, {a -> c, b -> b, c -> a}}] &;
- cycQ = # === (# /. {a -> b, b -> c, c -> a}) === (# /. {a -> c,
- b -> a, c -> b}) &;
- symQ = # === (# /. {a -> b, b -> a}) === (# /. {a -> c, c -> a}) &;
- invcyc = Function[f,
- Module[{g = 0, f1 = Expand[f],first},
- If[PolynomialQ[f, {a, b, c}],
- If[cycQ[f],
- While[! f1 === 0, first = First[f1]; g = g + first;
- f1 = f1 - cyc[first]]; g, "Not cyclic"],
- "Not a polynomial of a,b,c"]]];
- invsym = Function[f,
- Module[{g = 0, f1 = Expand[f], l, m, n, first},
- If[PolynomialQ[f, {a, b, c}],
- If[symQ[f],
- While[! f1 === 0,
- first = First[f1]; {l, m, n} =
- Exponent[first, #] & /@ {a, b, c};
- If[l == m == n, first = first/6,
- If[l == m || l == n || m == n, first = first/2]];
- g = g + first; f1 = f1 - sym[first]]; g, "Not symmetric"],
- "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". |