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

Creating an initialization file in pari-gp

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

这是没有头文件的代码;编译大约需要一个小时(假设系列 precision/numerical 精度设置为 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,l,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() 的文档 我不认为它可以,因为 beta_init() 中使用的那个神秘的 l 变量我没有看到你在任何地方定义,但你可能能够用硬编码常量或其他东西重新表述你的等式。

Pari/GP 的初始化,在程序启动时: (gp.exe 目录中的文件 gprc.txt


lines  = 25
colors = "brightfg"
histfile = "gp_history.txt"
breakloop = 0
help = "@ perl\perl gphelp.pl -detex -ch 10 -cb 11 -cu 12"
prompt = "gp >"
prompt_cont="gpc>"
datadir = "u://paritty/syntax/_v11/"
path = "u://paritty/syntax/_v11/"
primelimit = 100 000 000
parisizemax = 1 000 000 000
read  "__init.gp"
echo = 0

文件__init.gp包含我常用的函数;读取预先计算的数据向量的命令当然可以包含在那里。如果未指定路径,将在 path= 语句中给出的目录中搜索。