这个问题绝对是个愚蠢的问题。但是,来自 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
只是一个非常长的泰勒级数值列表。这样我就可以只包含这个文件,并为第 i 个函数编写 beta_taylor[i]
。就像包含变量一样简单,就像在 C 中一样。我知道我错过了一些简单的东西,这很令人沮丧——让我觉得自己很愚蠢。
我主要是询问执行此操作的语法。我想我知道怎么做;但我想这不是最好的方法。
非常感谢任何帮助或建议(我是认真的,非常感谢)。
长话短说;我如何将beta_taylor
保存为我们在初始化程序时加载的文件,如果文件被删除,我们可以通过运行代码一个小时再次保存程序?
问候
答案 0 :(得分: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()
变量我没有看到你在任何地方定义,但你可能能够用硬编码常量或其他东西重新表述你的方程。