Algorithme d'Abramov

De testwiki
Aller à la navigation Aller à la recherche

En mathématiques, en particulier en calcul formel, lModèle:'algorithme d'Abramov est un algorithme qui calcule toutes les solutions rationnelles d'une relation de récurrence linéaire à coefficients polynomiaux. L'algorithme a été publié par Sergei A. Abramov en 1989[1]Modèle:,[2].

Dénominateur universel

Le concept principal de l'algorithme d'Abramov est la notion de dénominateur universel. Soit 𝕂 être un corps de caractéristique zéro. La dispersion dis(p,q) de deux polynômes p,q𝕂[n] est par définition

dis(p,q)=max{k:deg(pgcd(p(n),q(n+k)))1}{1},

désigne l'ensemble des entiers non négatifs. Ainsi, la dispersion est le plus grand entier k tel que le polynôme p et le polynôme q décalé de k ont un facteur commun. La dispersion est égale à 1 si un tel k n'existe pas. La dispersion peut être calculée comme la plus grande racine entière non négative du résultantresn(p(n),q(n+k))𝕂[k][3]Modèle:,[4].

Soit

k=0rpk(n)y(n+k)=f(n)

une relation de récurrence d'ordre r à coefficients polynomiaux pk𝕂[n], avec f𝕂[n] et soit y(n)𝕂(n) une solution rationnelle. On pose y(n)=p(n)/q(n) pour deux polynômes relativement premiers p,q𝕂[n]. Soit D=dis(pr(nr),p0(n)) et

u(n)=pgcd([p0(n+D)]D+1_,[pr(nr)]D+1_)

[p(n)]k_=p(n)p(n1)p(nk+1)

désigne la factorielle décroissante d'une fonction. Alors q(n) divise u(n) . Par conséquent, le polynôme u(n) peut être utilisé comme dénominateur pour toutes les solutions rationnelles y(n) et c'est pourquoi on l'appelle un dénominateur universel[5].

Algorithme

Soit à nouveau

k=0rpk(n)y(n+k)=f(n)

une équation de récurrence à coefficients polynomiaux et soit u(n) un dénominateur universel. On pose y(n)=z(n)/u(n) pour un polynôme inconnu z(n)𝕂[n] ; en notant

(n)=ppcm(u(n),,u(n+r))

l'équation de récurrence équivaut à

k=0rpk(n)z(n+k)u(n+k)(n)=f(n)(n).

Comme on peut simplifier par u(n+k), on obtient une équation de récurrence linéaire avec des coefficients polynomiaux qui peut être résolue pour z(n). Il existe des algorithmes pour trouver des solutions polynomiales. Les solutions pour z(n) peuvent ensuite être utilisées à nouveau pour calculer les solutions rationnelles y(n)=z(n)/u(n)[2].

algorithm rational_solutions is
    input: Linear recurrence equation k=0rpk(n)y(n+k)=f(n),pk,f𝕂[n],p0,pr0.
    output: The general rational solution y if there are any solutions, otherwise false.

    D=disp(pr(nr),p0(n))
    u(n)=pgcd([p0(n+D)]D+1_,[pr(nr)]D+1_)
    (n)=ppcm(u(n),,u(n+r))
    Solve k=0rpk(n)z(n+k)u(n+k)(n)=f(n)(n) for general polynomial solution z(n)
    if solution z(n) exists then
        return general solution y(n)=z(n)/u(n)
    else
        return false
    end if

Exemple

L'équation de récurrence homogène d'ordre 1

(n1)y(n)+(n1)y(n+1)=0

sur a une solution rationnelle. Elle peut être calculée en considérant la dispersion

D=dis(p1(n1),p0(n))=disp(n,n1)=1.

Cela donne le dénominateur universel suivant:

u(n)=pgcd([p0(n+1)]2_,[pr(n1)]2_)=(n1)n

et

(n)=ppcm(u(n),u(n+1))=(n1)n(n+1).

En multipliant l'équation de récurrence d'origine par (n) et en posant y(n)=z(n)/u(n) on obtient :

(n1)(n+1)z(n)+(n1)(n1)z(n+1)=0.

Cette équation a la solution polynomiale

z(n)=c

pour une constante arbitraire c. En posant y(n)=z(n)/u(n) la solution rationnelle générale est

y(n)=c(n1)n

pour un c quelconque.

Références

Articles liés

Modèle:Portail