julia - 使用 Julia 模拟布朗运动的插值
问题描述
我正在尝试插入布朗运动。该函数没有返回错误,但似乎 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)
非常感谢!
解决方案
我认为您的代码可以通过使用数组视图来简化。这消除了代码中的所有额外参数,并且更容易看到它在做什么。标准化使得内部步骤的变化更小也可以被简化。
所以这里是对这个简化的尝试:
function fractal(x)
if length(x) > 2
n = length(x)
mid = (n+1)÷2
x[mid] = (x[1] + x[n])/2 + randn() * sqrt(n)
fractal(@view x[1:mid])
fractal(@view x[mid:n])
end
end
这是此代码运行的结果:
a = zeros(1024)
fractal(a)
plot(a, legend=false)
简化的重点是强调算法涉及的思想:
- 根据端点插值中间值
- 对数组的左半部分和右半部分执行相同的操作
- 如果我们没有足够大的数组,就返回
这种方法避免了所有家务处理使图片复杂化,并且它第一次尝试就奏效了,主要是因为,我认为,我不必保持所有这些东西直截了当。
推荐阅读
- javascript - 返回每个选择的(例如选择为真)候选者共享的标签列表
- python - SSL 上的虚拟主机 - 从 httpd 2.2 升级到 2.4 后,无法在 virtualenv 中运行 Django 应用程序
- selenium-webdriver - 在 selenium webdriver 中初始化 chrome 浏览器时出错
- synchronization - Android Studio 3.2 毕业
- r - 将绘图另存为 SVG 删除填充符号上的笔划
- python - Python:如何获取文件的完整路径以便移动它?
- google-colaboratory - 在单元格输出 iframe 中时,Google colab 无法重新启动运行时
- google-analytics - 在没有浏览量的情况下发送 GA 电子商务事件
- ios - 在同一个项目和同一个包 ID 上与其他人合作
- sas - 如何在 SAS 中按类和 ID 创建运行条件和变量