当前位置: 首页 > 面试题库 >

Sympy:在有限域中求解矩阵

葛承教
2023-03-14
问题内容

对于我的项目,我需要求解给定矩阵Y和K的矩阵X。(XY =
K)每个矩阵的元素必须是整数,以随机256位素数为模。解决这个问题的第一个尝试是使用SymPymod_inv(n)函数。问题是我的矩阵大小为30的内存用完了。我的下一个想法是执行矩阵分解,因为这样可能减轻了内存的负担。但是,SymPy似乎不包含能够找到以模为模的矩阵的求解器。我可以使用任何解决方法或自制代码吗?


问题答案:

sympyMatrix类支持模逆。这是模5的示例:

from sympy import Matrix, pprint

A = Matrix([
    [5,6],
    [7,9]
])

#Find inverse of A modulo 26
A_inv = A.inv_mod(5)
pprint(A_inv)

#Prints the inverse of A modulo 5:
#[3  3]
#[    ]
#[1  0]

rref查找行还原梯形形式方法支持一个关键字iszerofunction,指示哪些条目内的矩阵应当为零来处理。尽管我不确定,但我相信预期用途是为了保持数值稳定性(将小数设为零)。我已将其用于模块化缩减。

这是模5的示例:

from sympy import Matrix, Rational, mod_inverse, pprint

B = Matrix([
        [2,2,3,2,2],
        [2,3,1,1,4],
        [0,0,0,1,0],
        [4,1,2,2,3]
])

#Find row-reduced echolon form of B modulo 5:
B_rref = B.rref(iszerofunc=lambda x: x % 5==0)

pprint(B_rref)

# Returns row-reduced echelon form of B modulo 5, along with pivot columns:
# ([1  0  7/2  0  -1], [0, 1, 3])
#  [                ]
#  [0  1  -2   0  2 ]
#  [                ]
#  [0  0   0   1  0 ]
#  [                ]
#  [0  0  -10  0  5 ]

这是正确的,除了由返回的矩阵中rref[0]仍包含5和小数。通过采用mod并将分数解释为模数逆来处理此问题:

def mod(x,modulus):
    numer, denom = x.as_numer_denom()
    return numer*mod_inverse(denom,modulus) % modulus

pprint(B_rref[0].applyfunc(lambda x: mod(x,5)))

#returns
#[1  0  1  0  4]
#[             ]
#[0  1  3  0  2]
#[             ]
#[0  0  0  1  0]
#[             ]
#[0  0  0  0  0]


 类似资料:
  • 问题内容: 您可以使用coeff()获得特定项的系数; 在这里,我想提取x,x ** 2(等等)的所有系数,例如; 有一个方法as_coefficients_dict(),但是这似乎不符合我想要的方式。 问题答案: 最简单的方法是使用

  • SymPy是一个象征性的操作方案,纯Python写的。其目的是要成为一个全功能的Python代数计算库,同时保持为代码尽可能简单,以便理解和容易扩展。目前,Sympy目前只有1600的代码(包括注释行),其功能包括基本的算术,基本简化,一系列扩大,功能(exp, ln, sin, cos, tan, 等),分化,整合(目前只能做很简单的积分),基本替代,任意精度的整数和有理数,标准(Python)的浮点,基本复杂的数字和符号的限制。

  • 在我的应用程序中使用了谷歌地图V2。下面是描述映射片段的代码片段。 如何限制​​用户可以导航的地图?我试着用OnCamerachenglistener做这件事,但它看起来很丑,而且不稳定。(也许这是我的错)

  • 问题内容: 我在Python中有一个SymPy表达式,我想将其复制并粘贴到Java源代码中。问题在于,对幂有不同的表示法: Java用途; Python使用。 所以我的问题是:有没有办法以“ Java格式”打印SymPy表达式? 问题答案: SymPy有几个专门用于此目的的代码打印机。虽然没有Java代码打印机,但是有一种Javascript打印机。我不能说Java和Javascript是否在每种

  • 给定一个矩阵(包含布尔值-true/false)。我们将定义: 数组中的真实区域,作为所有具有真实值的相邻单元格的最大集合。 相互对角定位的单元格不被认为是相邻的。 在本例中,有3个真实区域:真实区域 我的解决方案在Java中尝试: 这显然不起作用。 我在考虑遍历每个单元格,如果该单元格有真值,则在总区域(不知何故)中加1,然后将该值设为假,并将该值设为假(将该区域标记为“已访问”)。 虽然我发现

  • 在matlab中,我有一个非负数项的矩阵a。见以下一条: 我想找到所有零元素的邻居,除了零元素。这意味着我想在向量v中存储a(1,1),a(2,5),a(3,1),a(3,6),a(4,5)和a(5,1)的邻居,如果这些邻居中的一个是零,那么我就不存储它。 所谓元素(i,j)的邻居,是指离(i,j)远一个元素的元素,即A(i,j+1)、A(i,j-1)、A(i-1,j)、A(i-1,j-1)、A(

  • 我在AS3工作。 我有一个通用的矩形。这个矩形可以有任何长度、任何宽度和任何旋转。我正在尝试求解矩形四个角的x和y坐标。我知道矩形中心的坐标,我知道它的宽度、高度、最高点和最低点之间的y距离以及最远左侧和最远右侧之间的x距离,以及知道旋转。 我的代码目前看起来像这样(当然,对象是有问题的矩形,请记住,当我应用它时,它可以具有任何维度 - 这只是一种可能性。初始宽度和高度是实际的长度和宽度,而后面引

  • 嗨,我正在学习线性代数与python的Edx课程。(http://nbviewer.ipython.org/github/ULAFF/notebooks/tree/may-14-2014/). 在第一个框中的“02.4.2.10矩阵向量乘法练习”中,代码为: 生成问题是Edx教授创建的一个模块。但是,我在导入Symphy时出错。 我得到的错误如下: 我下载并安装了症状,如果我导入,它可以在终端(苹