如何减少mathematica中的自变量数量

Qia*_* Li 5 wolfram-mathematica

这不是真的是一个数学问题,或者实际上是一个数学问题.:d

假设我有一个矩阵

{{4/13 + (9 w11)/13 + (6 w12)/13, 
  6/13 + (9 w21)/13 + (6 w22)/13}, {-(6/13) + (6 w11)/13 + (4 w12)/
   13, -(9/13) + (6 w21)/13 + (4 w22)/13}}
Run Code Online (Sandbox Code Playgroud)

w11,w12,w21,w22作为自由参数.

我通过视觉检查知道3*w11+2*w12可以表示为一个变量,并且3*w21+2*w22可以表示为另一个变量.所以基本上这个矩阵只有两个独立的变量.给定此形式的任何矩阵,是否有任何方法可以自动减少自变量的数量?我想我坚持用精确的数学方法来制定它.

请分享你的想法.非常感谢.

编辑:

我的问题实际上如下.给出这样的矩阵

{{4/13 + (9 w11)/13 + (6 w12)/13, 
  6/13 + (9 w21)/13 + (6 w22)/13}, {-(6/13) + (6 w11)/13 + (4 w12)/
   13, -(9/13) + (6 w21)/13 + (4 w22)/13}}
Run Code Online (Sandbox Code Playgroud)

或涉及其他一些象征性的常数

{{a+4/13 + (9 w11)/13 + (6 w12)/13, 
  6/13*c + (9 w21)/13 + (6 w22)/13}, {-(6/13)/d + (6 w11)/13 + (4 w12)/
   13, -(9/13) + (6 w21)/13 + (4 w22)/13}}
Run Code Online (Sandbox Code Playgroud)

我想使用mathematica自动识别n自变量的数量(在这种情况下是2),然后命名这些独立的变量y1,y2,...,yn,然后用y1,y2重写矩阵,...,而不是w11,w12,w21,w22.

Dan*_*lau 10

从...开始

mat = {{4/13 + (9 w11)/13 + (6 w12)/13,6/13 + (9 w21)/13 + (6 w22)/13},
  {-(6/13) + (6 w11)/13 + (4 w12)/13, -(9/13) + (6 w21)/13 + (4 w22)/13}};
Run Code Online (Sandbox Code Playgroud)

形成不确定,相同尺寸的第二个矩阵.

mat2 = Array[y, Dimensions[mat]];
Run Code Online (Sandbox Code Playgroud)

现在考虑通过设置mat-mat2 == 0形成的多项式(实际上是线性的)系统.我们可以消除原始变量并寻找新变量之间的依赖关系.可以使用消除; 我将展示GroebnerBasis.

GroebnerBasis[Flatten[mat - mat2], Variables[mat2], Variables[mat]]
Run Code Online (Sandbox Code Playgroud)

Out [59] = {-3 + 2 y [1,2] - 3 y [2,2], - 2 + 2 y [1,1] - 3 y [2,1]}

因此,我们在原始矩阵元素之间得到一对显式关系.

- -编辑 - -

您可以获取新变量的表达式,这些表达式清楚地表明其中两个的依赖关系.为此,形成Groebner基础并在多项式简化中使用它.

gb = GroebnerBasis[Flatten[mat - mat2], Variables[mat2], Variables[mat]];
vars = Flatten[mat2];

PolynomialReduce[vars, gb, vars][[All, 2]]
Run Code Online (Sandbox Code Playgroud)

Out [278] = {1 + 3/2 y [2,1],3/2 + 3/2 y [2,2],y [2,1],y [2,2]}

---结束编辑---

Daniel Lichtblau Wolfram Research