首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >线性代数中的测试驱动开发

线性代数中的测试驱动开发
EN

Stack Overflow用户
提问于 2018-10-31 16:38:19
回答 3查看 84关注 0票数 0

我想学习TDD在科学编程(量子化学)中线性代数(或基本与矩阵)的工作。然而,由于中间体是未知的,而且有时唯一知道的是最终结果,我不知道该怎么做。

你能告诉我在上面的例子中你会怎么做TDD吗?

代码语言:javascript
复制
for i,j = start1:end1, k,l = start2:end2
    A[i,j] = B[i,k] * C[k,l] * D[l,j]
end

其中A是在函数中计算的新矩阵。

其中B、C、D是预定义矩阵。

其中start1、start2、end1、end2是预定义的整数。

在通常的程序中,我有大约20个这样的块。所以我想我对新的A一无所知。

我遇到的大多数bug都是简单的输入错误,比如

代码语言:javascript
复制
B[k,i]

而不是上面的。

如果最终结果是错误的,我能做的唯一的调试方案是将所有内容写两次,然后检查A和希望我没有做过两次相同的输入错误。

EN

回答 3

Stack Overflow用户

发布于 2018-10-31 19:58:49

你能告诉我在上面的例子中你会怎么做测试开发吗?

好消息是,您从根本上处理的是一个函数。

代码语言:javascript
复制
A = function(B,C,D,start1,end1,start2,end2)

我看到有两种引入测试的一般方法

1)从简单的问题开始-一个接一个的矩阵,单位矩阵;每次你计算出答案应该是什么,并检查函数是否产生了正确的答案

2)从简单的验证开始-您可以从确保答案具有正确的行数和列数开始,确保其中一个输入加倍输出,依此类推。Nat Pryce对Diamond Kata的演示应该会让您对它的工作原理有所了解。

票数 0
EN

Stack Overflow用户

发布于 2018-11-10 22:00:47

我用来测试矩阵乘法例程的一种技术是使用只有一个1的矩阵,其他的都是零。设E(i,j)为矩阵

代码语言:javascript
复制
E(i,j)[k,l] = delta(i,k)*delta(j,l)

(例如,在i,j处有1,在其他地方有零)一点代数表明

代码语言:javascript
复制
E(i,j)*E(i',j') = delta(j,i')*E(i,j')

测试是检查乘法例程是否获得具有n×n矩阵的所有幂(n,4)元组i,j,i',j‘的写入应答。

票数 0
EN

Stack Overflow用户

发布于 2018-11-26 20:55:12

我的一个朋友向我展示了如何测试这些函数。

这是通过模拟矩阵来完成的。

你可以想象

代码语言:javascript
复制
B[i,k]    

作为

代码语言:javascript
复制
function B(i,k):    
return B[i,k]        

现在,您可以通过创建一个跟踪输入的列表来测试它们。

这将提供以下函数。

代码语言:javascript
复制
function B(i,k):
list.append(i,k)
return B[i,k]

然后,可以根据哪个索引更快来测试该列表。这取决于首先是列还是行,以及您如何定义循环,但您将得到如下内容:

代码语言:javascript
复制
1   1
1   2
1   3
2   1
2   2
2   3
3   1
3   2
3   3

代码语言:javascript
复制
1   1
2   1
3   1
1   2
2   2
3   2
1   3
2   3
3   3

现在,问题函数中的B[i,k]B[k,i]将生成不同的列表,因此您可以检测错误,因此可以对它们进行测试。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53079296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档