我正在使用Mathematica来解决与几何有关的一些简单方程,然后用不同的语言对这些解决方案进行硬编码†。而不是拥有许多代码页,将解决方案编码为多项式的根将更简洁。
我们来看看:
Solve[{
dist^2 == xstep^2 + ((h - 2 r)/(NR - 1))^2,
dist^2 == (w - 2 r - NC xstep)^2 + (h/2 - r - dist/2)^2
},{xstep, dist}]
产生“非常大的输出”,重量分数和平方根以及第四根。显然,这两个求解的变量是四次方程的根。
请问,是否有适用于包含符号的表达式的MinimalPolynomial []版本?所需要的就是dist四次的五个系数。
谢谢。
†“不同的语言”是PostScript,我真的没有编写// PostScriptForm函数的专业知识。实际上,在一般情况下,在重新计算重复表达式和使用“... dup ... roll”之间找到最佳平衡会很慢。
答案 0 :(得分:0)
我写了一个名为“Substitutions”(archived here)的包,它提取了一个子表达式层次结构,最大限度地减少了复杂表达式的编码。它包含在旧的MathSource库中。这是描述:
它通常很有用,尤其是在将Mathematica用于软件时 开发,将复合表达式的替换应用于减少 他们的形式。对于大型表达式,此任务可能变得乏味。 设计替代[]有助于找到有用的过程 用于简化表达式的替换集。
现在已经很老了,但仍应该有效。
答案 1 :(得分:0)
减少可能是你想要的:
我已将你的一些符号组合并为A,B,C(不是必需的,使其适合屏幕)
Reduce[{dist^2 == xstep^2 + (A)^2 &&
dist^2 == (C - NC xstep)^2 + (B - dist/2)^2 , {xstep, dist}]]
这会在一系列条件下产生相当大的输出。
如果您知道可以排除各种退化情况的约束,那么指定(我做了这些)
$Assumptions = B != 0 && B^2 != 3 C^2 && NC^2 != 3/4;
注意$假设由Simplify使用,但您需要将其显式添加到Reduce表达式中。
Simplify[Reduce[{dist^2 == xstep^2 + (A)^2 &&
dist^2 == (C - NC xstep)^2 + (B - dist/2)^2 && $Assumptions }, {xstep, dist}]]
输出..不太难看。根表达式包含你寻找的系数..
(xstep ==
Root[9 A^4 - 40 A^2 B^2 + 16 B^4 - 24 A^2 C^2 + 32 B^2 C^2 +
16 C^4 + (48 A^2 C NC - 64 B^2 C NC -
64 C^3 NC) #1 + (18 A^2 - 40 B^2 - 24 C^2 - 24 A^2 NC^2 +
32 B^2 NC^2 + 96 C^2 NC^2) #1^2 + (48 C NC -
64 C NC^3) #1^3 + (9 - 24 NC^2 + 16 NC^4) #1^4 &, 1] ||
xstep ==
Root[9 A^4 - 40 A^2 B^2 + 16 B^4 - 24 A^2 C^2 + 32 B^2 C^2 +
16 C^4 + (48 A^2 C NC - 64 B^2 C NC -
64 C^3 NC) #1 + (18 A^2 - 40 B^2 - 24 C^2 - 24 A^2 NC^2 +
32 B^2 NC^2 + 96 C^2 NC^2) #1^2 + (48 C NC -
64 C NC^3) #1^3 + (9 - 24 NC^2 + 16 NC^4) #1^4 &, 2] ||
xstep ==
Root[9 A^4 - 40 A^2 B^2 + 16 B^4 - 24 A^2 C^2 + 32 B^2 C^2 +
16 C^4 + (48 A^2 C NC - 64 B^2 C NC -
64 C^3 NC) #1 + (18 A^2 - 40 B^2 - 24 C^2 - 24 A^2 NC^2 +
32 B^2 NC^2 + 96 C^2 NC^2) #1^2 + (48 C NC -
64 C NC^3) #1^3 + (9 - 24 NC^2 + 16 NC^4) #1^4 &, 3] ||
xstep ==
Root[9 A^4 - 40 A^2 B^2 + 16 B^4 - 24 A^2 C^2 + 32 B^2 C^2 +
16 C^4 + (48 A^2 C NC - 64 B^2 C NC -
64 C^3 NC) #1 + (18 A^2 - 40 B^2 - 24 C^2 - 24 A^2 NC^2 +
32 B^2 NC^2 + 96 C^2 NC^2) #1^2 + (48 C NC -
64 C NC^3) #1^3 + (9 - 24 NC^2 + 16 NC^4) #1^4 &, 4]) &&
3 A^2 + 4 B dist + xstep (8 C NC + 3 xstep) ==
4 (B^2 + C^2 + NC^2 xstep^2)