Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matrix 极大值中行列式不为零的随机矩阵_Matrix_Random_Moodle_Maxima_Determinants - Fatal编程技术网

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

Matrix 极大值中行列式不为零的随机矩阵,matrix,random,moodle,maxima,determinants,Matrix,Random,Moodle,Maxima,Determinants,我想使用极大值生成一个包含随机项的矩阵,这样矩阵的行列式就不会为零,然后在Moodle的堆栈中实现它。我对Maxima(或任何CAS)的工作都是全新的,因此我一直在浏览我在网上找到的各种示例,到目前为止,我成功地获得了以下信息: 生成具有0或1的2x2随机矩阵(为简单起见)并计算其行列式: g[i,j]:=1-random(2); M1:genmatrix(g,2,2); dM1:determinant(M1); 下一步,我想定义一个矩阵M2,如下所示: M2:(if dM1#0 then M

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

生成具有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的堆栈中实现的东西(问题是要解决一个线性方程组,生成的矩阵就是这个系统的矩阵),所以我不知道在堆栈中使用if和while循环是否有任何限制,因此,如果有人知道已知的问题,我将非常感谢您的任何意见。

您可以说,
用于。。。做return(something)
从for循环中产生
something
,可以将其分配给变量。在这种情况下,它看起来像预期的那样工作:

(%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 ]
请注意,
genmatrix
的第一个参数是lambda表达式(即未命名函数)。如果在示例中输入数组函数的名称,如
g
,则不会产生预期效果,因为在Maxima中,数组函数是记忆函数,为以前看到的输入提供存储输出。显然,如果输出被认为是随机的,那么这并不是故意的

还请注意,如果for循环运行到结束时没有找到非奇异矩阵,则将为
M2
赋值
done
。我认为这很有用,因为您可以查看是否完成了
M2#
,以确保获得结果


最后请注意,使用“无局部变量的表达式组”
(…)
作为for循环的主体,而不是“带局部变量的表达式组”
块(…)
,这是有区别的,因为
返回的效果在这两种情况下是不同的

多谢各位!似乎这个解决方案适用于Maxima,但不适用于STACK,但这可能是另一个问题的一部分。我对STACK了解不多,您可能需要找到一个特定于STACK的论坛来询问这个问题。