Mathematica 如何计算“减少”?

计算科学 算法 数学
2021-12-02 22:57:05

我提交了一个Reduce命令并得到如下结果:

Reduce[t0 >= 0 && -9 + t0 - 5 t1 + 154 >= 0 && -5 + t0 - 3 t1 + 77 >= 0, {t0, t1}, integers]

带输出:

Reduce::bdomv: Warning: integers is not a valid domain specification. Assuming it is a variable to eliminate. (0 <= t0 <= 75/2 && t1 <= (72 + t0)/3) || (t0 > 75/2 && t1 <= (145 + t0)/5)

简而言之,使用什么算法来获得这些结果?

1个回答

序言:“整数”-> 问题陈述中的整数,Mathematica 使用 CamelType。

该方法自然取决于您的问题。在您的情况下,它似乎是 Contejean-Devie 方法。Mathematica 文档的 [隐藏] 摘录

对于多项式系统,Reduce 对实域使用圆柱代数分解,对复域使用 Gröbner 基方法。

使用代数函数,Reduce 构造等价的纯多项式系统。

使用超越函数,Reduce 生成由超越条件组成的多项式系统,然后使用函数关系和逆图像信息数据库来减少这些。使用分段函数,Reduce 进行符号扩展以构造连续系统的集合。

对于单变量超越方程,Reduce 将解表示为超越根对象。对于实数上的 exp-log 函数方程,Reduce 使用精确的 exp-log 根隔离算法。对于有界实域或复域上的解析函数方程,Reduce 使用经过验证的数值方法求根。对于初等函数,根的数量和位置都使用区间算术方法进行了充分验证。对于非初等函数,根数的验证取决于数值积分的正确性,根位置的验证取决于 Wolfram 语言显着性算法提供的准确度估计的正确性.

对于丢番图系统,Reduce 使用 Hermite 范式求解线性方程组,使用 Contejean-Devie 方法求解线性不等式。对于单变量多项式方程,它使用改进的 Cucker-Koiran-Smale 方法,而对于二元二次方程,它使用 Hardy-Muskat-Williams 椭圆方法和 Pell 和其他情况的经典技术。Reduce 包括用于大约 25 类丢番图方程的专门方法,包括用于 Thue 方程的 Tzanakis-de Weger 算法。

还值得一提的是,原始问题很容易手动减少:

t00andt1{t03+24if t032,t05+29otherwise