gpt4 book ai didi

wolfram-mathematica - 避免重复调用 Interpolation

转载 作者:行者123 更新时间:2023-12-04 04:55:42 25 4
gpt4 key购买 nike

我想在mathematica中插入一个函数。

该函数取决于一个参数a ,实际上它是函数的逆 F这也取决于 a ,所以我建立我的近似值如下,

approx = Interpolation[Table[{F[0.1 n, a], 0.1 n}, {n, -100, 100}]]

现在我可以直接调用 approx[x]计算某一点的反函数。

相反,我想做这样的事情:定义一个带参数的函数,
G[x_,a_] = "construct the interpolating function,
and return the value of the function at x"

然后写 G[x,a] 来评估函数。否则,我将不得不对我感兴趣的所有参数重复插值,并且周围有很多变量。我曾尝试将 Interpolation[] 调用放在一个模块中,但这只是在我每次调用 G[x,a] 时构建插值!我将如何避免这种情况?

谢谢阅读。

最佳答案

第一步是参数化approxa :

approx[a_] := Interpolation[Table[{F[0.1 n,a],0.1 n},{n,-100,100}]]

有了这个定义, G然后可以这样定义:
G[x_, a_] := approx[a][x]

但是,正如问题中所观察到的,这最终会在每次 G 时重建插值。叫做。避免这种情况的一种方法是重新定义 approx使用内存:
m: approx[a_] := m = Interpolation[Table[{F[0.1 n,a],0.1 n},{n,-100,100}]]

现在, approx将保存任何给定 a 的插值函数,避免在后续调用中使用相同的 a 进行重建.当然,这会占用内存,因此如果有大量不同的 a 值那么内存可能会不足。可以本地化 approx 使用的缓存。通过将保存的值与另一个符号相关联(在本例中为 cache):
approx[a_] := cache[a] /.
_cache :> (cache[a] = Interpolation[Table[{F[0.1` n,a],0.1` n},{n,-100,100}]])

使用此版本的 approx , cache可以使用 Block 进行本地化,例如:
Block[{cache}
, Table[G[x, a], {x, 0, 5}, {a, 0, 1, 0.1}]
]

对于 a 的每个不同值,插值函数仍会临时存储。 ,但现在这些保存的定义在 Block 之后发布退出。

有关 Mathematica 中具有内存的函数的更多信息,请参阅 SO 问题:

The best way to construct a function with memory

Dynamic Programming in Mathematica: how to automatically localize and / or clear memoized function's definitions

关于wolfram-mathematica - 避免重复调用 Interpolation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7781981/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com