我创建了具有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
这可能吗?我是否必须使用其他结构来定义组?
答案 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的值或值。
仔细检查以确定在依赖它之前是否可以发现任何错误。