【发布时间】:2021-10-15 05:07:48
【问题描述】:
我正在尝试插入布朗运动。该函数没有返回错误,但似乎 Julia 没有将值放在向量 B 上。这里是代码。
function interpolation(i,j,N,BM)
if j-i>1
k = sqrt((j-i)/((2^N))/4)
d = (i+j)/2
BM[d] =((BM[i]+BM[j])/2)+k*randn(1)
BM = interpolation(i,d,N,BM)
BM = interpolation(d,j,N,BM)
end
end
plot(BM)
非常感谢!
【问题讨论】:
-
您能否也发布您将初始值分配给
BM的代码部分以及您如何调用interpolation方法? -
我对递归函数的理解很差,但有一点看不出来。通常,递归函数有 >=1 个条件分支,您不会在其中递归调用该函数,也就是 基本情况。您的代码只有 1 个执行递归的分支,因此隐式基本情况是将 if 语句跳过到函数末尾,这将返回
nothing。也许nothing正在通过您的递归调用进行传播?这不是 MWE,所以我们无法找到自己。 -
@BatWannaBe 这是一种非常标准的递归方式来生成分形。这个想法是函数副作用 BM。
-
@Ted Dunning 我明白了,所以大部分工作都在
BM[d]=...行中完成,并且递归调用正在循环回它。在那种情况下,我很惊讶没有错误,因为第一个递归调用在改变Vector后将BM重新分配给基本情况nothing,所以第二个递归调用将尝试BM=interpolation(d,j,N,nothing)。 -
@BatWannaBe 请参阅我的单独答案,了解如何避免您遇到的问题。关键是每个递归调用都有自己的指向数组的指针。我的回答还使用了
@view,因此我正在处理的数组的哪一部分的维护由 Julia 自己处理。
标签: julia interpolation