在 pari-gp 中创建初始化文件

问题描述

这个问题绝对是个愚蠢的问题。但是,来自 C;我在将头文件或“初始化”文件添加到我的 pari-gp 代码时遇到了问题。这意味着;我有一个 1 小时的代码编译来制作一个向量;一旦初始化,我就可以使用该向量;但我想为这个向量制作一个文件,这样我就可以在编译一次后访问它。

这是没有头文件代码;编译大约需要一个小时(假设系列精度/数值精度设置为 100)。

\p 100
\ps 100
Phi_Inv(w,l,{n=100}) =
{
    my(out = 0);
    for(i=0,n,out = w*exp(out)/(exp(l*(n+1-i))+w)
    );
    out;
}




beta_init(n) = {
    beta_taylor = vector(100,i,polcoef(Phi_Inv(w,n),i-1,w));
    print(beta_taylor);
}

而不是beta_taylor的残酷赋值;和像 print(beta_taylor) 这样的穴居人,我如何将其写入可以与脚本一起打包的初始化文件。那是;一个 X mb 文件,所有系数都整齐地打包在一起。如果文件丢失,只需运行代码(需要一个小时)重新写入初始化文件

我的意思是,我将如何正确执行 #include test.h 其中 test.h 只是一个非常长的泰勒级数值列表。这样我就可以只包含这个文件,并为第 i 个函数编写 beta_taylor[i]。就像包含变量一样简单,就像在 C 中一样。我知道我错过了一些简单的东西,这很令人沮丧——让我觉得自己很愚蠢。

我主要是询问执行此操作的语法。我想我知道怎么做;但我想这不是最好的方法

非常感谢任何帮助或建议(我是认真的,非常感谢)。

长话短说;我如何将beta_taylor保存为我们在初始化程序时加载的文件,如果文件删除,我们可以通过运行代码一个小时再次保存程序?

问候

解决方法

所以您想将数字向量序列化到一个文件中,然后再读回来?

writebin() 来救援。类似的东西

beta_init(n) = {
    beta_taylor = vector(100,i,polcoef(Phi_Inv(w,l,n),i-1,w));
    writebin("beta_taylor.dat",beta_taylor);
}

在一个 gp 会话中运行该函数,然后在另一个会话 beta_taylor=read("beta_taylor.dat") 中运行该函数。


先用 gp2c 编译你的代码,然后再运行它来计算数字,如果你还没有这样做的话,会加快速度,顺便说一句。 gp2c-run 通过编译文件并使用已加载的结果共享库启动新的 gp 会话来简化操作。您还可以研究是否可以在此处使用并行操作来加速初始计算;阅读 parvector() 的文档,我认为这不可能,因为 l 中使用的神秘 beta_init() 变量我没有看到你在任何地方定义,但你可能能够用硬编码常量或其他东西重新表述你的方程。