コンピューター代数システム (CAS) によって生成された一連の多項式があります。たとえば、これはこのセットの 1 つの要素です。
-d*d*l*l*qb*b*l*l*q+2*d*f*j*l*q+2*b*f*h*l*qf*f*j*j*qb *b*j*j*q+2*b*d*h*j*qf*f*h*h*qd*d*h*h*q+b*b*j*j*o*o-2 *b*d*h*j*o*o+d*d*h*h*o*o-2*b*b*j*l*n*o+2*b*d*h*l*n *o+2*b*f*h*j*n*o-2*d*f*h*h*n*o+2*b*d*j*l*m*o-2*d*d *h*l*m*o-2*b*f*j*j*m*o+2*d*f*h*j*m*o+b*b*l*l*n*n-2 *b*f*h*l*n*n+f*f*h*h*n*n-2*b*d*l*l*m*n+2*b*f*j*l*m *n+2*d*f*h*l*m*n-2*f*f*h*j*m*n+d*d*l*l*m*m-2*d*f*j *l*m*m+f*f*j*j*m*m
それらすべてを C プログラムでできるだけ早く実行する必要があります。これらの式のいずれかを注意深く見ると、計算速度を最適化できることは明らかです。たとえば、上に貼り付けた多項式では、-d*d*l*l*q、2*d*f*j*l*q、および -f*f*j*j*q という項がすぐにわかります。その合計を -q*square(d*lf*j) で置き換えることができるようにします。ここでできることはたくさんあると思います。私は、コンパイラがこの最適化、またはおそらくより高度な最適化を見つけることができるとは信じていません (しかし、おそらく私は間違っています)。これを maxima (CAS) に依頼しようとしましたが、何も出てきませんでした (私は maxima の初心者なので、魔法のコマンドを見逃している可能性があります)。ですから、私の最初の質問は次のとおりです。計算速度のために多項式を最適化するために使用できるツール/アルゴリズムは何ですか?
ほとんどの変数を共有する一連の多項式を最適化する場合、事態はさらに複雑になります。実際、式ごとに最適化することは、最適化前にコンパイラーによって共通部分が識別される可能性がありますが、これが全体として実行されない場合、最適化後に識別されないため、最適ではない可能性があります。2 つ目の質問は、一連の多項式式を計算速度のために最適化するために使用できるツール/アルゴリズムは何ですか?
よろしくお願いします、
PS : この投稿は、「多項式のセットの演算数を最小限に抑えるためのコンピューター代数ソフト」といくつかの類似点を共有していますが、その 1 つの答えは、目標を達成するためにそれらを使用する方法を述べるのではなく、CAS プログラムを指しています。