如何确定用户的匿名运算符是否为线性运算符

时间:2010-11-02 18:12:07

标签: matlab user-defined-functions

如果我从用户那里得到一个匿名操作符,我想测试(非常快)如果操作符是线性的。有没有标准的方法来做到这一点?我无法做符号运算符或解析函数。是尝试一些随机函数(我选择哪些随机函数)并查看它们是否满足线性的唯一方法?

提前致谢。

背景:

用户提供一个黑盒操作符,这是一个将功能带入功能的功能。

我可以给操作员一个函数,然后我得到一个函数。我想确定运算符是否是线性的?有一种标准的快速方法让我高度自信吗?

2 个答案:

答案 0 :(得分:3)

不,不是没有扫描整个参数空间。想象一下:

@(f) @(x) f(x) + (x == 1e6)

此运算符是非线性的,但除非您碰巧在x == 1e6进行测试,否则无法知道。

<强>更新

正如其他人所建议的那样,确定感兴趣的域可能“足够好”,并且可以在整个域中定期检查线性度。这可能会给你误报(即表示操作符是线性的,实际上它是非线性的),但绝不是假阴性。

答案 1 :(得分:0)

这是用户应提供的信息。添加参数linear true / false,默认为false(我假设非线性代码也适用于线性,只需花费更多时间)。

随机测试的问题在于,您迟早会将非线性函数分类为线性,然后用户会遇到问题,因为您的函数不可预测会产生错误的结果< / strong>(取决于您随机选择的点数),这可能与正确结果相当接近,即人们可能没有注意到 loooong 时间 - &gt;这是灾难的秘诀。

实际上,用户首先应该知道这一点,非常非常重要,以避免误报,并且之前没有完全可靠的测试方法。省去麻烦并添加一个额外的参数。