本地设置系列精度 -- pari-gp

locally setting series precision -- pari-gp

大家。这是关于 pari-gp 的另一个快速问题。

我已经编写了我的主文件,如果 \ps 100\ps 36 两个不同的函数可以更好地工作;所以我想在 运行 之前指定一些函数,以便在本地我们可以说 \ps 100\ps 36.

因此,我想要一个功能与 localprec 类似的函数——但具有序列精度而不是数字精度。这意味着我们可以有这样的东西,

\ps 100
/*....a bunch of code here....*/

my_local_function(var) = {
    localserprec(36); /*sets local series precision to 36, only for this function*/
    
    /*bunch of code here....*/
}

100 系列精度函数从不与 36 系列精度函数交互,除非下降到 36。我们从不尝试从 36 到 100,所以应该没有真正的问题。

非常感谢任何帮助或意见。

如果我没有正确理解你的问题,你想要这样的东西:

my_local_function(var, {d=36}) = {
    my(old_precision = default(seriesprecision));
    default(seriesprecision, d);

    /* bunch of your code here.... */

    default(seriesprecision, old_precision);    
}

这会将 d 设置为局部的系列精度,如您预期的那样仅应用于您的函数体。

我使用的代码是(是self-explained)

Serprec(n) = if(type(n) == "t_INT" && n > 0,
             default(seriesprecision,n); default(seriesprecision),
             default(seriesprecision));

如果 n 被省略或无效,它 returns 当前系列精度。有效值将系列精度设置为 n 项。

一个例子,两个向量的component-wise乘法。它修改系列精度,但在退出前恢复它。

mult_vec(A,B,n1=#B) = 
{    
my(n = min(#B,min(n1,#A)), q = vector(n), p = Serprec());
Serprec(n);
q = Vec(serconvol(Ser(A),Ser(B)));
Serprec(p);
return(q);
}