HOROWITZ

Horowitz-Ostrogradsky方法

Hermite方法避免了完全分解,但仍要求无平方分解和关于$r_i$的部分分式分解。Horowitz-Ostrogradsky方法则不需要其他工具,通过待定系数法将问题归结为线性方程的求解问题。

$$\frac{q}{r}=\frac{q_1}{r_1}+\int\frac{q_2}{r_2},$$其中$\dfrac{q_1}{r_1}$为积分的有理部分,由部分分式的结果可知$r_1=(r,r')$$r_2=r/r_1$。求导得到
\begin{align*}
  \frac{q}{r}&=\left(\frac{q_1}{r_1}\right)'+\frac{q_2}{r_2} \\
  &=\frac{q_1'r_1-q_1r_1'}{r_1^2}+\frac{q_2r_1}{r} \\
  &=\frac{q_1'r_2-q_1r_1'r_2/r_1+q_2r_1}{r}.
\end{align*}
从而问题归结为求$q_1$$q_2$满足$q=q_1'r_2-q_1r_1'r_2/r_1+q_2r_1$$\deg q_1<\deg r_1$$\deg q_2<\deg r_2$。以$q_1$$q_2$的系数作为未知变量,这是一个至多$\deg r$维的线性方程组问题。

注1 设$\deg r=n$,则Hermite方法的时间复杂度为$O(M(n)\log n)$[3],其中$M(n)$为乘法的复杂度。而Horowitz-Ostrogradsky方法的复杂度为$O(n^3)$(解线性方程组),尽管渐进意义上后者要比前者慢将近两个量级,但在实践中还是要分析具体情况而定。

回到顶部Rothstein-Trager方法

下面的问题是如何求出对数部分,因此我们设$r(x)$无平方因子的首一多项式,并可设$$\int\frac{q}{r}=\sum_{i=1}^mc_i\ln v_i,$$其中$c_i$为互不相同的常数,$v_i$为无平方因子的首一多项式,两两互素(可以通过合并项来满足这些条件)。求导得到$$\frac{q}{r}=\sum_{i=1}^m\frac{c_iv_i'}{v_i}.$$由于$v_i$无平方因子且两两互素可知$$r=\prod\limits_{i=1}^mv_i.$$$u_i=\prod\limits_{j\ne i}v_i$,则有$$r'=\sum_{i=1}^mu_iv_i'$$$$q=\sum_{i=1}^mc_iu_iv_i'.$$于是对于$1\le k\le n$
\begin{equation*}
  \begin{aligned}
    (q-c_kr',r)&=(q-c_kr',\prod_{i=1}^mv_i) \\
    &=\prod_{i=1}^m(q-c_kr',v_i) \\
    &=\prod_{i=1}^m\left(\sum_{j=1}^m(c_j-c_k)u_jv_j',v_i\right)\\
    &=v_k.
  \end{aligned}  \tag{3}
\end{equation*}
最后一个等式成立是因为
\begin{equation*}
  ((c_j-c_k)u_jv_j',v_i)=
  \begin{cases}
    v_i & i\ne j, \\
    1 & i=j, i\ne k, \\
    v_i & i=j, i=k,
  \end{cases}
\end{equation*}
从而
\begin{equation*}
  \left(\sum_{j=1}^m(c_j-c_k)u_jv_j',v_i\right)=
  \begin{cases}
    1 & i\ne k, \\
    v_i & i=k.
  \end{cases}
\end{equation*}

由式(3)可以看出,当我们找出系数$c_k$后即可通过最大公因子的计算求出$v_k$。如何求出$c_k$呢?同样的论证可以知道$(q-yr',r)>1\Leftrightarrow \exists 1\le k\le m,y=c_k$,而$(q-yr',r)>1\Leftrightarrow\res_x(q-yr',r)=0$(此结式称为Rothstein-Trager结式),故求解关于$y$的方程$\res_x(q-yr',r)=0$即可得到所有的系数$c_k$

例2 设$r=x^3+x+1$$q=3x^2+1$,则Rothstein-Trager结式$\res_x(q-yr',r)=\res_x((1-y)(3x^2+1),x^3+x+1)=-31(y-1)^3$。从而方程$\res_x(q-yr',r)=0$有唯一的根$y=1$,最大公因子$(q-yr',r)=r=x^3+x+1$,故$$\int\frac{q}{r}=\ln (x^3+x+1)$$即为积分结果。 
注2 Rothstein-Trager方法的时间复杂度为$O(nM(n)\log n)$[3]
注3 对于高次Rothstein-Trager结式,其根可能无法显式地表达出来。设$r$无平方因子,$n$个根为$a_i$$i=1,\ldots,n$),不难求得(1)中的$b_{i1}$,此时可直接将积分表示为$$\int\frac{q}{r}=\sum_{i=1}^n\frac{q(a_i)}{r'(a_i)}\ln(x-a_i),$$便于进一步的运算。
posted @ 2020-01-16 22:05  ARCONIC  阅读(208)  评论(0编辑  收藏  举报