Как использовать PARI / GP для вычисления инверсии степенного ряда? - PullRequest
0 голосов
/ 12 февраля 2020

Я хочу инвертировать ряд степеней с помощью 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)$.
Это можно сделать , используя полиномы Белла . В справочнике пари есть

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, ... в последующей формуле в пари (в На самом деле, я не понимаю, как eval() и subst() работают в приведенной выше формуле!). Это должно быть тривиально для тех, кто знает ... Помогите, пожалуйста!

1 Ответ

1 голос
/ 13 февраля 2020

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 - количество членов в степенном ряду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...