本周文件交换精选

我们最好的用户提交

布朗粒子运动的模拟

今天的帖子是由Owen Paul发布的,他是一名专业技术项目的学生大使。他自己在加入MathWorks之前是学生大使,他确实是特色社区博客

目录

介绍

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

背景

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

主要代码应用电磁方法

现在,让我们深入了解一下这个实时脚本的一些核心元素。在这个实时脚本中,我们可以看到如何将EM方法应用于一维布朗运动,以及该分析的近似误差。我们可以看到下面绘制的图,其中蓝线表示实际路径,绿色虚线表示预测运动。
randn (“国家”,100)λ=2;mu=1;Xnot=1;T=1;N=2^8;dt=1/N;dW=sqrt(dt)*randn(1,N);W=总和(dW);X_精确=Xnot*exp((λ-.5*mu^2)*([dt:dt:T])+mu*W);绘图([0:dt:T],[Xnot,X_精确],“b-”); 持有在…上R = 4;Dt = R * Dt;L = N / R;X_EM = 0(1升);X_temp = Xnot;j=1:L Winc=sum(dW(R*(j-1)+1:R*j));X_temp=X_temp+Dt*lambda*X_temp+mu*X_temp*Winc;X_EM(j)=X_temp;结束情节([0:Dt: T], [Xnot X_EM],“g - o”)持有xlabel(“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;C(1,numx)=0;mu=0.5;sigma=0.05;我= 2:numx-1 C(我,1)= exp (- (x(我)μ)^ 2 /(2 *σ^ 2))/√(2 *π*σ^ 2);结束j=1:numt t(j+1)=t(j)+dt;i=2:numx-1c(i,j+1)=C(i,j)+(dt/dx^2)*(C(i+1,j)-2*C(i,j)+C(i-1,j));结束结束数字保持在…上情节(x, C (: 1));情节(x, C (:, 11));情节(x, C (:, 101));情节(x, C (:, 1001));情节(x, C (:, 2001));持有

实时脚本的好处

在这个现场脚本中,我们不仅看到了进行分析所需的代码,而且Emma还带领我们了解了理论(如下图所示)。我相信这是这个直播脚本中最强大的元素之一。在直播脚本中,Emma展示了EM方法是如何派生出来应用于布朗运动的。这有助于更好地理解代码。当被问及在这个项目中使用直播脚本时,她说,
“使用实时脚本是编译函数和共享函数的一种很好的方式。它使其他人很容易从中学习,因为你可以看到代码并实时运行。这实际上是我第一次在MATLAB中为竞赛使用实时脚本函数,我想这肯定是我在futu中使用的东西re。“

评论

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

发布与MATLAB®R2019b

|
  • 打印
  • 发送电子邮件

评论

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