Matrix 八度:群上的矩阵乘法

Matrix 八度:群上的矩阵乘法,matrix,octave,gnu,Matrix,Octave,Gnu,我想简单地计算两个矩阵的乘法 但是我想用矩阵中有限群的元素来代替实数。 也就是说,我想使用F4={0,1,x,1+x}的元素(所以我只有4个可能的元素)。在这一组中,加法和乘法定义明确,关系x^2=1+x、1+1=0和x+x=0成立 由于我是八度音阶编程的初学者,我不知道如何用与实数不同的东西来计算运算 我的想法是,如果可以在某一组元素(这里是F4)上定义一些运算,那么在对矩阵进行乘法时就可以使用这些运算。我认为使用有限组可能值和非标准加法和乘法进行算术的最有效方法是查表 表查找要求对矩阵进行编

我想简单地计算两个矩阵的乘法

但是我想用矩阵中有限群的元素来代替实数。 也就是说,我想使用F4={0,1,x,1+x}的元素(所以我只有4个可能的元素)。在这一组中,加法和乘法定义明确,关系x^2=1+x、1+1=0和x+x=0成立

由于我是八度音阶编程的初学者,我不知道如何用与实数不同的东西来计算运算


我的想法是,如果可以在某一组元素(这里是F4)上定义一些运算,那么在对矩阵进行乘法时就可以使用这些运算。

我认为使用有限组可能值和非标准加法和乘法进行算术的最有效方法是查表

表查找要求对矩阵进行编码,以便将元素索引到组元素列表中。由于索引从1开始,所以需要将{0,1,x,x+1}表示为{1,2,3,4}

但是,除了1=0,2=1的笨拙映射之外,表查找的事情非常简单。这是我编写的一些示例代码,它似乎有效,但我可能犯了一些错误(我可能误解了确切的算术规则):

例如:

>> lhs=[1,2,3,4;2,3,1,4]';
>> rhs=[2,3;4,1];
>> group_mtimes(lhs,rhs);
lhs = 
    '0'      '1'  
    '1'      'x'  
    'x'      '0'  
    '1+x'    '1+x'

rhs = 
    '1'      'x'
    '1+x'    '0'

lhs * rhs = 
    '1+x'    '0'
    '0'      'x'
    'x'      '0'
    'x'      '1'
此代码中没有输入检查,如果输入包含5,您将获得和索引超出范围错误


正如我在评论中提到的,您可以创建一个类来封装这种类型的数组。然后,您可以重载
plus
times
mtimes
(分别适用于操作员
+
*
*
),以及
disp
,以正确写出值。您可以定义构造函数,以便此类的对象始终具有有效值,这将防止查找表索引错误。这样的类将使使用这些函数变得更简单。

对于偶数特征的Galois字段的特殊情况,如F4,您可以使用Octave Forge的通信包提供的函数:

奇数字符的伽罗瓦字段尚未实现:


您将无法重复使用现有的
*
运算符,但您可以为此组创建一个类,并重载
mtimes
方法。无论哪种方式,您都必须显式地写出乘法。另外:枚举数在倍频程中还不受支持,因此您需要将组表示为整数:{0,1,2,3}。这不会影响通用性,您甚至可以编写一个特殊的打印函数,将输出2作为“x”,将输出3作为“x+1”。但这会使编码变得更具挑战性,因为将更容易将组的值与常规数字混合。谢谢您提供了有用的答案!我想这已经解决了我的问题,因为我不太擅长编码,而这正是你提供给我的。事实上,我可以在第二个表(乘法)中找出一个错误。由于x*x=x^2=1+x(根据F4的定义),x*(1+x)=x+x^2=1,(1+x)*(1+x)=x(类似),您可以将表中右下角的2x2正方形从[1,2;2,2]调整为[4,2;2,3]。除了这个小小的算术错误,到目前为止一切都很完美。谢谢你的回答@是的,我不确定这些,我很快就填好了这些矩阵,重要的部分是力学我更新了答案。
>> lhs=[1,2,3,4;2,3,1,4]';
>> rhs=[2,3;4,1];
>> group_mtimes(lhs,rhs);
lhs = 
    '0'      '1'  
    '1'      'x'  
    'x'      '0'  
    '1+x'    '1+x'

rhs = 
    '1'      'x'
    '1+x'    '0'

lhs * rhs = 
    '1+x'    '0'
    '0'      'x'
    'x'      '0'
    'x'      '1'