gpt4 book ai didi

使用 QuickCheck 进行 Haskell 矩阵测试

转载 作者:行者123 更新时间:2023-12-02 12:17:47 25 4
gpt4 key购买 nike

我正在 Haskell 中创建一个 Matrix 模块,我想使用 QuickCheck 来测试我的代码的一些属性。具体来说,我想生成具有相关逆矩阵的随机矩阵。以下是我尝试创建一个生成此类矩阵的 QuickCheck 生成器。

invertibleMatrix :: (Num a, Arbitrary a) => Gen (Matrix a)
invertibleMatrix = do s <- choose (2,10)
a <- vectorOf s (vector s)
if (det (Matrix a) == 0) then
invertibleMatrix
else
return (Matrix a)

代码首先创建一个 2 到 10 之间的大小,然后创建一个由该大小的向量组成的向量。如果行列式为零,则矩阵不可逆,因此我递归地调用 invertibleMatrix。否则我返回新的矩阵。

问题是,当我将这段代码放入属性中进行测试时,它不会终止。 (我认为它不断创建相同的 s x s 零元素矩阵,显然没有逆矩阵,因此它进入无限循环)。我究竟做错了什么?我该如何解决?谢谢。

标记

最佳答案

作为绕过问题的一种方法,您可能会注意到,如果 An×n 矩阵,则 A - tI 是可逆的对于除最多 nt 值之外的所有值(即 A 的特征值)。因此生成一个矩阵,如果它不可逆,则向其添加一个恒等式的小倍数,并继续尝试,直到它可逆。然后,保证进程终止(只要底层数字类型表现得相当好,而浮点有时不会,例如,如果 A 的条目远大于 的值t 你尝试一下)。

关于使用 QuickCheck 进行 Haskell 矩阵测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10345271/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com