数学表达式简化了最少的操作

时间:2017-05-27 20:31:58

标签: math optimization

我有一个数学表达式,我想简化它,如果它是可行的,使它具有最少的操作,因此是最快的计算。我对精度,速度都不感兴趣。我发现许多在线网站简化了数学表达,但仅用于人类可读的目的,而不是计算机。有没有算法/方法呢? 顺便说一下我的一个表达方式是:
a(a*x+b*y+c*z)+d(d*x-b*z+c*y)+z(d*y-c*x+a*z)-b(d*z-a*y+b*x)
休息是类似的。

1 个答案:

答案 0 :(得分:1)

让我们从

开始
a*(a*x+b*y+c*z)+d*(d*x-b*z+c*y)+z*(d*y-c*x+a*z)-b*(d*z-a*y+b*x)

有16次乘法和11次加法/减法。

第三个括号看起来有点奇怪,有z作为乘数,我可能在这里预期一个常数c。

如果我们扩展

a*a*x+a*b*y+a*c*z+d*d*x-d*b*z+d*c*y+z*d*y-c*x*z+a*z*z-b*d*z-a*b*y+b*b*x

最多24次乘法和11次加法/减法。

按x,y,z的幂分组

(a*a+d*d+b*b)*x-c*x*z+(a*b+d*c-a*b)*y+d*y*z+(a*c-d*b-b*d)*z+a*z*z

提供18次乘法和11次加法。我们本可以去

(a*a+d*d+b*b-c*z)*x+(a*b+d*c-a*b+d*z)*y+(a*c-d*b-b*d+a*z)*z

15次乘法和11次加法。有一些简化 当a b y取消时,有两个d b z。

(a*a+d*d+b*b-c*z)*x+(d*c+d*z)*y+(a*c-2*d*b+a*z)*z

13次乘法8次加法。

进一步分组

(a*a+d*d+b*b-c*z)*x+(c+z)*d*y+(a*(c+z)-2*d*b)*z

下降到11次乘法8次加法。有一个共同的c + z术语,所以我们可以使用一个临时变量

c_z = c+z
(a*a+d*d+b*b-c*z)*x+c_z*d*y+(a*c_z-2*d*b)*z

11次乘法和7次加法。我认为,这是你将获得的最好成绩。

首先要注意的是,这并不比初始版本好。 18个操作与27个相比,可能节省了三分之一的评估时间。您可能会发现这不是您的计划的瓶颈。

有一种名为Horner's Rule的算法可以简化多项式的评估。如果您拥有单个变量的更高权力,这往往会更好。

以上建议使用算法

  1. 展开所有字词以形成一组单项式,取消字词并收集类似字词
  2. 找出最常用的符号,比如x
  3. 使用该符号的组。
  4. 重复2
  5. 所以在你的情况下,扩展给出了

    a*a*x+a*b*y+a*c*z+d*d*x-d*b*z+d*c*y+z*d*y-c*x*z+a*z*z-b*d*z-a*b*y+b*b*x
    

    取消和收集类似条款

    a*a*x+a*c*z+d*d*x+d*c*y+z*d*y-c*x*z+a*z*z-2*b*d*z+b*b*x
    

    使用

    找到最常见的符号,例如x,组
    (a*a+d*d-c*z+b*b)*x+a*c*z+d*c*y+z*d*y+a*z*z-2*b*d*z
    

    重复。常用符号为z

    (a*a+d*d-c*z+b*b)*x+(a*c+d*y+a*z-2*b*d)*z+d*c*y
    

    重复。这次最常见的符号是第二个括号内的a

    (a*a+d*d-c*z+b*b)*x+((c+z)*a+d*y-2*b*d)*z+d*c*y
    

    再次重复,这次最常见的符号为d

    (a*a+d*d-c*z+b*b)*x+((c+z)*a+(y-2*b)*d)*z+d*c*y
    

    给出11次乘法和8次加法/减法的版本。

    第一个常见符号的替代方法是d

    a*a*x+a*c*z+d*d*x+d*c*y+z*d*y-c*x*z+a*z*z-2*b*d*z+b*b*x
    

    d

    a*a*x+a*c*z+ (d*x+c*y+z*y-2*b*z)*d-c*x*z+a*z*z+b*b*x
    

    X

    (a*a-c*z+b*b)*x+a*c*z+ (d*x+c*y+z*y-2*b*z)*d+a*z*z
    

    (a*a-c*z+b*b)*x+(c*z+z*z)*a+ (d*x+c*y+z*y-2*b*z)*d
    

    ž

    (a*a-c*z+b*b)*x+((c+z)*z)*a+ (d*x+c*y+(y-2*b)*z)*d
    

    再一次有11次乘法和8次加法/减法的解。