当前位置: 首页 > 知识库问答 >
问题:

极大值中行列式不为零的随机矩阵

后焕
2023-03-14

我想用极大值生成一个包含随机项的矩阵,这样矩阵的行列式就不会为零,然后进一步在Moodle的堆栈中实现这一点。我对Maxima(或任何与此相关的CA)的工作都是全新的,因此我一直在浏览我在网上找到的各种示例,到目前为止,我成功地做到了这一点:

生成具有0或1的2x2随机矩阵(出于简单性原因)并计算其行列式:

g[i,j]:=1-random(2);
M1:genmatrix(g,2,2);
dM1:determinant(M1);

对于下一步,我想定义一个矩阵M2,如下所示:

M2:(if dM1#0 then M1 else ***)

如果矩阵M1的行列式已经不是零,好吧,我会同意,但我正在努力解决其他部分。我正在考虑为M1创建一个循环,生成新的随机数g[i, j],直到我得到一个行列式不是零的矩阵,但我不确定如何做到这一点,或者是否有其他选择。

此外:正如我提到的,这最终是我想在Moodle的STACK中实现的东西(问题将是解决一个线性方程组系统,生成的矩阵是这个系统的矩阵),所以我不知道在STACK中使用if和时循环是否有任何限制,所以如果有人意识到已知的问题,我将感谢任何输入。

共有1个答案

马泰
2023-03-14

你可以说。。。做return(something)从for循环中生成可以分配给变量的东西。在这种情况下,它看起来像是按预期工作:

(%i9) M2: for i thru 10
            do (genmatrix (lambda ([i, j], 1 - random(2)), 2, 2),
                if determinant(%%) # 0 then return(%%));
                            [ 1  0 ]
(%o9)                       [      ]
                            [ 0  1 ]
(%i10) M2: for i thru 10
            do (genmatrix (lambda ([i, j], 1 - random(2)), 2, 2),
                if determinant(%%) # 0 then return(%%));
                            [ 1  0 ]
(%o10)                      [      ]
                            [ 1  1 ]
(%i11) M2: for i thru 10
            do (genmatrix (lambda ([i, j], 1 - random(2)), 2, 2),
                if determinant(%%) # 0 then return(%%));
                            [ 1  1 ]
(%o11)                      [      ]
                            [ 0  1 ]

请注意,genrix的第一个参数是lambda表达式(即未命名函数)。如果您在示例中使用g等数组函数的名称,它将不会产生预期的效果,因为在Maxima中,数组函数是记忆函数,为之前看到的输入提供存储的输出。如果输出应该是随机的,显然这不是预期的。

另请注意,如果for循环运行到完成,而未找到非奇异矩阵,则将分配M2。我认为这很有用,因为您可以查看是否完成了,以确保您确实得到了结果。

最后请注意,使用“无局部变量的表达式组”(…)会有所不同 作为for循环的主体,而不是“带有局部变量的表达式组”<代码>块(…)

 类似资料:
  • 这个问题就像标题所暗示的那样简单,尽管我正试图构建一个Moodle堆栈问题,但我受到了限制,因此无法访问Maxima的所有库(也不能将表达式放在表单字段的多行上,以及我可能还没有意识到的其他限制)。不过,基本的矩阵操作(如检索矩阵的一行)似乎是可用的。 有没有一个现成的功能来实现这个目的(留档暗示没有),或者我需要自己做一个吗?由于上述限制,自己做可能是不可能的。

  • 我有一个非常大的100000左右的平方矩阵,我想知道这个矩阵的行列式值是否为零。 最快的方法是什么? 我必须在C中实现它

  • 我想取一个nxn矩阵的逆矩阵,用于我的GraphSlam。 我遇到的问题: <代码>。inverse()特征库(3.1.2)不允许零值,返回NaN LAPACK(3.4.2)库不允许使用零行列式,但允许使用零值(使用C中使用LAPACK计算矩阵逆的示例代码) 由于某种原因,Seldon库(5.1.2)无法编译 是否有人成功实现了允许负值、零值和零行列式的n x n矩阵反演代码?有什么好的库(C)推

  • 我有一个线性方程组,如MX=N。M是一个21x21矩阵,其中许多元素为零。当我试图用X=np求解这个系统时。linalg。求解(M,N),它会产生以下错误: 这里的问题是返回的值是0.0。我尝试了两种不同的方法来生成矩阵,这时我遇到了一个奇怪的行为: i) M的非零元素在代码中的其他地方计算。所有这些元素都是浮点数,表示为m_1,m_2,m_21。首先,为了生成M,我尝试了以下代码: 该矩阵的行列

  • 根据定义,行列式为零的方阵不应可逆。然而,出于某种原因,在生成协方差矩阵后,我成功地对其求逆,但求协方差矩阵的行列式的结果是输出为0.0。 可能会出现什么问题?我应该不信任行列式输出,还是应该不信任逆协方差矩阵?或者两者都有? 我的代码片段:

  • 我使用default_rng生成了这个数组: 我想用seed=5的生成器在这个矩阵中添加10个零。我想用dimessions[5,10]创建一个新数组,在里面放10个0,剩下的是一个,然后把两个数组混合起来,但是我必须使用生成器,所以我不能这样做。