本地设置系列精度 -- 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);
}
大家。这是关于 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);
}