Как использовать PARI/GP для вычисления обратного степенного ряда?

Я хочу инвертировать степенной ряд с помощью PARI/GP:
если $y=a[1]*x+a[2]*x^2+...+O(x^N)$ закодировано заданным массивом, скажем, a=vector(N-1), я хочу, чтобы PARI создал вектор b такой, что $x=b[1]*y+b[2]*y^2+...+O(y^N)$.
Это можно сделать с использованием полиномов Белла. В справочнике Pari есть

Bell(k,n=-1)=
{
my(var(i)=eval(Str("X",i)));
my(x,v,dv);
v=vector(k,i,if(i==1,’E,var(i-1)));
dv=vector(k,i,if(i==1,’X*var(1)*’E,var(i)));
x=diffop(’E,v,dv,k)/’E;
if(n<0,subst(x,’X,1),polcoeff(x,n,’X))
}

производство напр.

gp > Bell(3)
%3 = X1^3 + 3*X2*X1 + X3

Но я понятия не имею, как их использовать, т.е. приписывать значения X1, X2, ... в последующей формуле в Pari (на самом деле, я с трудом понимаю, как eval() и subst() работают в приведенной выше формуле!). Это должно быть тривиально для тех, кто знает... Помогите, пожалуйста!


person Wolfgang    schedule 12.02.2020    source источник


Ответы (1)


PARI имеет встроенную функцию для реверсии степенных рядов, поэтому нет необходимости переходить к низкоуровневой реализации, которая, безусловно, очень неоптимальна и сложна.

Пример использования:

serreverse( x / (1 + x)^2 + O(x^20))

Второй пример (на основе примера по ссылке, указанной в вопросе)

serreverse(atan(x + O(x^20)))
tan(x + O(x^20))

Если ваш ряд находится в векторе v, вы должны сначала преобразовать его в степенной ряд, а затем вызвать serreverse. Например:

serreverse(Ser(v))

Чтобы позже преобразовать обратно в вектор, используйте функцию Vec. При преобразовании из степенного ряда в векторный PARI удалит все начальные нули, что может раздражать. Чтобы предотвратить это, есть второй аргумент, который вы обычно задаете как -n или -(n+1), где n — количество членов в степенном ряду.

person Andrew    schedule 13.02.2020
comment
о, спасибо, буду знать! (На жаргоне PARI было бы serreverse(atan(x + O(x^20))) :) - person Wolfgang; 13.02.2020
comment
И теперь я также знаю, почему я не мог найти его с помощью Google. Я попросил инверсию вместо реверса :) :) - person Wolfgang; 13.02.2020