如何调用计算化简后的函数

我遇到的问题里含有一些(物理系统)参数,在计算的时候,自定义的函数依赖这些参数。在给定参数的情况下,研究的问题会反复调用这些自定义的函数。因此,我经常碰到的情况是:1.改变系统参数来探究结果和物理参数的关系,于是,函数利用物理参数来定义是方便的;2.给定参数后,函数需反复调用,于是,函数中重复计算的部分事先处理掉就能节省大量的计算时间。我的问题是,如何利用参数定义了函数,然后去调用这个函数预处理后的函数。

下面我举个例子来说明我的问题。假定,我需要的物理参数是$\eta=1.0$,涉及的函数是$f(x)=erfi(\eta)*x$,其中,erfi是一个特殊函数(用于得到长的计算时间)。代码如下:

using SpecialFunctions
@time erfi(10.0)

得到的运行时间为:
0.000014 seconds
erfi(1.0)的结果为1.52430742270867e42。

下面定义函数:

f(x)=erfi(10.0)*x
f1(x)=1.52430742270867e42*x

在给定参数$\eta=1.0$后,这两个函数给出相同的结果。查看两个函数的计算时间(第二次运行的计算时间):

@time f(1.0)

时间是0.000013 seconds,而调用处理后的函数f1,

@time f1(1.0)

时间是0.000000 seconds.这两者差别相当大。

在这个例子里,我的问题是,定义了f(x)后,怎么让julia在计算中使用f1(x)来计算来减少计算时间?

谢谢!

加个缓存

https://github.com/JuliaCollections/Memoize.jl

1赞

非常给力,谢谢!计算时间变为0.000002 seconds了!

备案号:京ICP备17009874号-2