gpt4 book ai didi

java - 如何找到函数范围?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:45:32 24 4
gpt4 key购买 nike

我有一个带有多个参数的任意函数或不等式(由许多三角、对数、指数和算术项组成),我想知道所有参数的域来获取它的范围。是否有任何 Java 库可以帮助解决问题?这样做的最佳做法是什么?我是对的,对于任意函数,唯一可以做的就是蛮力逼近?此外,我对可以为给定域构建交集和互补的函数很感兴趣。

更新。 函数由用户输入,因此无法预测其复杂性。但是,如果图书馆至少会处理简单的情况(1-2 个变量,1-2 个项),那就没问题了。我建议函数将主要定义间隔并且最多包含 2 个自变量。例如,像

这样的定义
y >  (x+3), x ∈ [-7;8]
y <= 2x, x ∈ [-∞; ∞]
y = x, x ∈ {1,2,3}

将在 99% 的病例中得到治疗,目前覆盖它们就足够了。

嗯,也许编写一个简单的蛮力来处理这种情况会更快。可能这对我的情况会令人满意,但如果有更好的选择,我想学习它们。

最佳答案

注释:我假设你想找到 range函数的值,即函数可以采用的值集。

我觉得这个问题不简单。我认为“蛮力”根本不是解决方案,当我们有连续的间隔(即无限多个点!)时,“蛮力”甚至意味着什么。

但是,在某些特殊情况下,这实际上是可能的。例如,当你取一个 sin(F(x)) 函数时,你知道它的范围是 [-1,1],而不管内部函数 F(x) 或者当你取 Exp (x) 你知道范围是 (0,+inf)。

您可以尝试构建一个语法树,其中包含与每个节点关联的范围的信息。然后,您可以尝试自下而上遍历树,尝试计算有关函数值所在的实际区间的信息。

例如,对于函数 Sin(x)+Exp(x) 和 x in (-inf, +inf) 你会得到一棵树

   +          range: [left range] union [right range]
/ \
sin exp range [-1, 1] , range: (0,+inf)
| |
x x

所以这里的结果是 [-1, 1] union (0, +inf) = [-1, +inf)。

当然这种方法有很多问题,例如 + 的范围操作并不总是并集。假设您有两个函数 F(x) = Sin(x) 和 G(x) = 1-Sin(x)。两者的范围都是 [-1,1],但它们的总和会缩减为 {1}。您需要检测并处理此类行为,否则您将只能获得可能范围的上限(类似密码域)。

如果您提供更多示例,也许有人可以提出更好的解决方案,我想很大程度上取决于功能的细节。

@High Performance Mark:我看了JAS,好像主要是处理多元多项式环,但是题中提到了三角函数,对数函数等transcendental functions所以纯粹的多项式算术是不够的。

关于java - 如何找到函数范围?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3178659/

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