这个问题绝对是个愚蠢的问题。但是,来自C;我在向pari代码中添加头文件或“初始化”文件时遇到了困难。这意味着,我有一个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‘’th函数编写beta_taylor[i]。它就像包含变量一样简单,就像C。我知道我错过了一些简单的东西,这让我感到很沮丧--让我觉得自己很蠢。
我主要是问一下要做什么语法。我想我知道怎么做,但我想这不是最好的办法。
任何帮助或建议都是非常感谢的(我是认真的,非常感谢)。
长话短说:在初始化程序时,如何将beta_taylor保存为加载的文件?如果文件被删除,我们可以通过运行一个小时的代码再次保存程序?
问候
发布于 2021-07-14 03:26:07
所以你想把你的数字向量序列化成一个文件,然后再读回来?
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变量,我看不到您在任何地方定义,但是您可能可以用硬编码常量或其他什么来重新表述您的方程。
发布于 2021-10-17 09:16:28
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=语句中给定的目录中搜索路径。
https://stackoverflow.com/questions/68371128
复制相似问题