gpt4 book ai didi

matlab - 如何在 MATLAB 中矢量化随机游走模拟

转载 作者:太空宇宙 更新时间:2023-11-03 20:31:51 24 4
gpt4 key购买 nike

我正在 MATLAB 中重写蒙特卡罗仿真模型,重点是可读性。该模型涉及许多粒子,表示为 (x,y,z),它们在具有特定终止概率的一小组状态上随机游走。与输出相关的信息是终止于给定状态的粒子数。

模拟需要足够的粒子,因此为每个粒子单独运行它的成本过高。矢量化似乎是从 MATLAB 中获得性能的方法,但是是否有任何惯用的方法可以在 MATLAB 中创建此模拟的矢量化版本?

为了实现这一点,我正在拼命工作——我什至尝试创建一个 (nStates x nParticles) 矩阵来表示每个粒子状态组合,但这种方法在可读性方面很快就会失控,因为粒子相互独立地从一个状态跳到另一个状态。我是否应该硬着头皮改用一种更适合这种情况的语言?

最佳答案

只需照常编写代码即可。几乎所有的 matlab 函数都可以接受和返回矢量化输入。比如模拟N个粒子在一维空间的布朗运动

position = zeros([N 1]); %start at origin
sigma = sqrt(D * dt); %D is diffusion coefficient, dt is time step
for j = 1:numSteps
position = position + sigma*randn(size(position));
end

如果你想为每个位置设置不同的 sigma,你可以使 sigma 成为一个与 position 大小相同的向量,并使用“dot times”表示法逐元素操作

position = position + sigma.*randn(size(position));

如果散射是位置和一些随机元素的任意函数,您只需编写一个向量化函数,例如

function newstep = step(position)
%diffusion in a overdamped harmonic potential
newstep = -dt*k*position + D*randn(size(position));

for j = 1:numsteps; position = position + step(position);

等等

关于matlab - 如何在 MATLAB 中矢量化随机游走模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3783854/

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