我需要在我的应用程序中求解一些数学方程。以下是此类等式的典型示例:
a + b * c - d / e = a
附加规则:
- b % 10 = 0
- b >= 0
- b <= 100
- 每个数字必须是整数
- ...
我想获得 a、b、c、d 和 e 的可能解决方案集。
是否有任何库,无论是开源的还是商业的,我可以用来解决这样的方程?如果是,他们提供什么样的结果?
求解线性系统通常可以使用线性规划来求解。我建议初学者看一下Boost uBLAS - 它有一个简单的三角求解器。然后,您可能会检查针对更多特定领域方法的库,也许是QSopt。
你正在冒险进入数值分析的世界,这里是龙。看似微小的规范差异可能会对正确的方法产生巨大的影响。
如果没有对问题域进行相当精确的描述,我会犹豫提出具体的建议。听起来很肤浅,就像您正在解决足够简单的受限线性问题,以至于有很多方法可以解决,但是“...”可能是个问题。
一般求解器等的一个很好的资源是GAMS。对于您的要求,许多软件可能有点重。
你想要一个计算机代数系统。
看https://stackoverflow.com/questions/160911/symbolic-math-lib,其答案大多与 c++ 和 c 相关。
我知道这不是你真正的问题,但你可以将给定的方程简化为:
d = b * c * e 与 e != 0
很确定数字食谱会有一些东西
你正在寻找一个计算机代数系统,这不是一件小事。
但是,其中有很多可用,请在 Wikipedia 上尝试以下列表:
http://en.wikipedia.org/wiki/Comparison_of_computer_algebra_systems
-亚当
这看起来像线性规划。这个清单有帮助吗?
除了其他帖子。您的约束集让人想起整数规划问题,因此您可能也想检查这种事情。也许您的问题可以(重新)陈述为一个。
但是,您必须知道,整数规划问题往往是更难的计算问题之一,因此您最终可能会使用许多时钟周期来破解它。
只看“附加规则”部分,它看起来确实像线性规划,在这种情况下,LINDO 或实现单纯形算法的类似程序应该没问题。
但是,如果第一个方程真的很典型,则表明您的方程不是线性代数问题 - 线性方程中不应出现相互相乘或相除的 2 个变量!
所以我会说你肯定需要一个计算机代数系统或使用遗传算法解决问题。
由于您的限制类似于线性规划中的限制,尽管您并不完全在那里,如果您只想解决您的特定问题,我会说选择维基百科关于遗传算法的文章末尾提到的任何库和开发一个应用程序来给你结果。如果您想要更通用的方法,那么您必须在计算机上模拟代数运算,别无他法。
TI-89 计算器有一个“求解器”应用程序。它旨在解决您示例中的问题。我知道它不是图书馆。但是那里有几个 TI-89 仿真器。