1

这个问题绝对是个愚蠢的问题。但是,来自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,l,n),i-1,w));
    print(beta_taylor);
}

而不是残酷的分配beta_taylor;和像穴居人一样print(beta_taylor),我怎样才能把它写到一个初始化文件中,我可以用脚本打包。那是; 一个 X mb 文件,所有系数都整齐地打包在一起。如果文件丢失,只需运行代码(需要一个小时)重新编写初始化文件。

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

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

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

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

问候

4

2 回答 2

1

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

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(),我看不到您在任何地方定义,但是您可以用硬编码的常量或其他东西重新表述您的方程式。

于 2021-07-14T03:26:07.460 回答
1

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


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=语句中给出的目录中进行搜索。

于 2021-10-17T09:16:28.690 回答