本周文件交换精选

我们最好的用户意见书

布朗粒子运动的模拟

今天的文章由欧文·保罗撰写,他是一名学生大使技术项目专家。在加入数学工场之前,他自己是一名学生大使特色社区博客

内容

介绍

本周的选择是布朗粒子运动的模拟通过艾玛高斯.这个文件交换条目引起了我的注意,因为它在住脚本画廊艾玛·高是我们的一员学生大使!她在加州大学圣巴巴拉分校担任数学工作的学生大使已经三年了。

背景

如果你看一扇阳光照进来的窗户,你可能会注意到小尘埃四处飞舞。不管你多么努力地拍打这些灰尘颗粒,它们还是会漫无目的地飘来飘去。这种现象用布朗运动来描述。由于它们运动的随机性,试图预测这些粒子的去向是极其困难的。在这个文件交换条目中,Emma向我们展示了如何使用欧拉?Maruyama (EM)方法来模拟粒子如何在一维(1D)平面上移动。当被问及是什么促使艾玛写了这个关于这个主题的现场脚本时,她说“这个项目是在协助阿茨伯格教授(UCSB)在可微流形方面的工作的同时,基于[她]对布朗粒子运动的研究创建的。”但后来她把作品改编成了现场剧本来参加MATLAB在线编辑器挑战在2018年举行。

主要代码应用EM方法

现在让我们深入研究这个实时脚本的一些核心元素。在这个现场脚本中,我们可以看到如何应用EM方法的一维布朗运动,以及近似误差与此分析。我们可以看到下面的图,蓝色的线代表实际的路径,绿色的虚线代表预测的运动。
randn (“状态”,100) = 2;μ= 1;Xnot = 1;T = 1;N = 2 ^ 8;dt = 1 / N;dW = sqrt (dt) * randn (1, N);W = cumsum (dW);X_exact = Xnot * exp((λ闲置*μ^ 2)* ((dt: dt: T)) +μ* W);情节([0:dt: T], [Xnot X_exact],“b -”);持有R = 4;Dt = R * Dt;L = N / R;X_EM = 0(1升);X_temp = Xnot;drawtext (dW(dW *(j-1)+1)) = 1 and dW(dW *(j-1)+1) = 1);X_temp = X_temp + Dt*lambda*X_temp + X_temp*Winc;X_EM (j) = X_temp;结束情节([0:Dt: T], [Xnot X_EM],“g - o”)举行包含(“t”);ylabel (“X”);标题(10^4样本的近似误差

用其他方法求解布朗模拟

这段代码还有一个好处,它展示了我们如何用数字方法解决这个问题。这直接显示了解决问题方法的差异,也显示了这两种方法的编码差异。
numx = 101;numt = 2000;Dx = 1/(numx - 1);dt = 0.00005;x = 0: dx: 1;C = 0 (numx numt);t (1) = 0;C (1, - 1) = 0;numx C (1) = 0;μ= 0.5; sigma = 0.05;我= 2:numx-1 C(我,1)= exp (- (x(我)μ)^ 2 /(2 *σ^ 2))/√(2 *π*σ^ 2);结束t(J +1) = t(J) + dt;我= 2:numx-1 C (i, j + 1) = C (i, j) + (dt / dx ^ 2) * (C (i + 1, j) - 2 * C (i, j) + C(张,j));结束结束图保存情节(x, C (: 1));情节(x, C (:, 11));情节(x, C (:, 101));情节(x, C (:, 1001));情节(x, C (:, 2001));持有

Live脚本的好处

在这个现场脚本中,我们不仅看到了进行分析的代码,而且Emma还向我们介绍了理论(如下图)。我相信这是这个现场剧本中最强大的元素之一。在现场脚本Emma展示了如何推导电磁方法应用于布朗运动。这样可以更好地理解代码。当被问及在这个项目中使用现场脚本时,她说,
“使用实时脚本是编译和共享函数的好方法。它使其他人很容易学习,因为您可以看到代码并实时运行它。这实际上是我第一次在MATLAB中为比赛实验live script函数,我认为这肯定是我将来会使用的东西。”

评论

让我们知道你的想法在这里留下一个评论艾玛。

MATLAB®R2019b发布

|
  • 打印
  • 发送电子邮件

评论

请点击留下评论在这里登录到你的MathWorks帐户或创建一个新的。