如果我从用户那里得到一个匿名操作符,我想测试(非常快)如果操作符是线性的。有没有标准的方法来做到这一点?我无法做符号运算符或解析函数。是尝试一些随机函数(我选择哪些随机函数)并查看它们是否满足线性的唯一方法?
提前致谢。
背景:
用户提供一个黑盒操作符,这是一个将功能带入功能的功能。
我可以给操作员一个函数,然后我得到一个函数。我想确定运算符是否是线性的?有一种标准的快速方法让我高度自信吗?
答案 0 :(得分:3)
不,不是没有扫描整个参数空间。想象一下:
@(f) @(x) f(x) + (x == 1e6)
此运算符是非线性的,但除非您碰巧在x == 1e6
进行测试,否则无法知道。
<强>更新强>
正如其他人所建议的那样,确定感兴趣的域可能“足够好”,并且可以在整个域中定期检查线性度。这可能会给你误报(即表示操作符是线性的,实际上它是非线性的),但绝不是假阴性。
答案 1 :(得分:0)
这是用户应提供的信息。添加参数linear
true / false,默认为false(我假设非线性代码也适用于线性,只需花费更多时间)。
随机测试的问题在于,您迟早会将非线性函数分类为线性,然后用户会遇到问题,因为您的函数不可预测会产生错误的结果< / strong>(取决于您随机选择的点数),这可能与正确结果相当接近,即人们可能没有注意到 loooong 时间 - &gt;这是灾难的秘诀。
实际上,用户首先应该知道这一点,非常非常重要,以避免误报,并且之前没有完全可靠的测试方法。省去麻烦并添加一个额外的参数。