解决特定群体

时间:2018-05-27 12:44:53

标签: wolfram-mathematica

我创建了具有4个元素的组(其GF4代数):

OrderMat = {0, 1, lambda, lambda + 1}

通过函数实现此矩阵的操作(。)的定义:

         |   0   |   1    |   lambda   |   lambda+1   |
        ______________________________________________
       0||   0   |   0    |      0     |       0      |
       1||   0   |   1    |   lambda   |   lambda+1   |
  lambda||   0   | lambda |  lambda+1  |       1      |
lambda+1||   0   |lambda+1|     1      |     lambda   |


OPMatrix =         {{0, 0, 0, 0},
        {0, 1, lambda, lambda + 1},
        {0, lambda, lambda + 1, 1},
        {0, lambda + 1, 1, lambda}}

GF4Mult[x_, y_] := OPMatrix[[Position[OrderMat, x][[1]][[1]]]][[Position[OrderMat, y][[1]][[1]]]]

现在我想解决这个组中的方程式。 例如:

Solve[x.lambda == 1,x]      ... x=>lambda+1

或者像这样:

Solve[GF4Mult[x,lambda]== 1,x]      ... x=>lambda+1

这可能吗?我是否必须使用其他结构来定义组?

1 个答案:

答案 0 :(得分:1)

我不知道这是否是一种很好的方法,但它似乎比我所要求的最后几件事更接近你所要求的。它使用您选择的符号,除了Mathematica重新排序lambda + 1在输出上为1 + lambda。

首先让我们定义你的乘法运算符

times={{0,0,0},{0,1,0},{0,lambda,0},{0,lambda+1,0},
  {1,0,0},{1,1,1},{1,lambda,lambda},{1,lambda+1,lambda+1},
  {lambda,0,0},{lambda,1,lambda},{lambda,lambda,lambda+1},{lambda,lambda+1,1},
  {lambda+1,0,0},{lambda+1,1,lambda+1},{lambda+1,lambda,1},{lambda+1,lambda+1,lambda}};

这正是你所拥有的,除了我把它变成矢量。

现在让我们展示一种类似于Solve的方法,它可能适合您。

假设作为第一个例子,你想知道是否有一个lambda + 1 * something = lambda + 1

Cases[times,{lambda+1,x_,lambda+1}]

这表明只有一个值满足,即身份。

{{1+lambda,1,1+lambda}}

另一个例子

Cases[times,{lambda+1,x_,lambda}]

给你

{{1+lambda,1+lambda,lambda}}

另一个例子是lambda + 1 * anythingBUTlambda + 1 = lambda

Cases[times,{lambda+1,Except[lambda+1],lambda}]

给你

{}

表明没有这样的价值。

另一个例子

Cases[times,{lambda+1,x_,Except[x_]}]

给你

{{1+lambda,1,1+lambda},{1+lambda,lambda,1},{1+lambda,1+lambda,lambda}}

这有很大的灵活性,因为你可以在任何位置都有未知数。但由于这种灵活性,它不仅仅会向您返回单个值。也许你可以将它用于你的想法,或者你可以想办法使你适应你想要做的事情。

如果要提取结果的一个值,则可以执行以下操作:

 Cases[times,{lambda+1,x_,lambda}:>x]

将返回

{1+lambda}

是满足该值的x的值或值。

仔细检查以确定在依赖它之前是否可以发现任何错误。