假设我们在做一个化学反应实验,存在U和V两种化学物质,其中每单位U物质在两单位V物质的催化下,生成新的V物质。那么V物质的浓度将会发生怎样的变化?

设想一下,随着时间的推移,反应皿中 V物质的浓度应该是持续升高的,由于现实情况,比如气压、重力、气温等因素,V物质在容器中并不会均匀的分散在溶液中,而是“抱团分布”。

回到V物质的斑图上,视频中的黄色区域即V物质浓度高的区域,起始时,黄色区域为一个“环状”,随着时间的推移,黄色区域逐渐扩散,最终成为了一个“迷宫”。

那么其他色彩区域是否指的是没有V物质的存在呢,并不是这样的,其他区域的颜色变化其实是指V物质的浓度不高,本视频中,“黄色——浅黄色——浅蓝色——蓝色”区域的V物质的浓度是逐渐降低的。

下面将详细解释图灵斑图的实现。

01

由于斑图是一种研究区域变化随时间变化的一种方法,其可以用于数学、统计学、生物学、地理学、物理学、化学、医学等各个专业。

老虎斑纹的出现究其根本是化学物质浓度的区域性差异所导致的,所以本文以Gray-Scott模型为例,讲述反应扩散方程的斑图的模拟与绘制。

反应扩散方程

下列方程组为反应扩散方程的一般形式:

其中,和为方程组中的扩散项,DU和DV分别为U和V的扩散系数,而f(U,V)与g(U,V)分别为U和V的生成率,图灵认为这两项为二次多项式。

上述内容比较抽象,下面直接以Gray-Scott模型为例进行讲述。

Gray-Scott模型

该体系的总体行为由下面的公式描述,两个方程描述了两种化学物质的三种增减源。

上述方程组中:

F——进料率,代表补给率,常数;

k——去除率,常数;

04

斑图形成的条件

想要实现斑图就需要考虑其时空性质,即时间和

时空离散的捕食者系统斑图形成的条件具体来说为以下三点:

(1)稳定空间均匀

离散系统存在一个非平凡空间均匀定态,此定态对空间均匀扰动是稳定的

是稳定的;

稳定的;

(2) Neimark- Sacker失稳的条件:

稳定空间均匀定态在 Neimark- Sacker分岔作用下而变得不稳定;

(3)图灵失稳的条件:

稳定空间均匀定态对于至少一类空间非均匀扰动变得不稳定。

受篇幅所限,此处不讲述该模型的数值分析内容,该模型是符合这三点要求的。我们直接进行建模绘图。

05

斑图的形成

思考:

在绘制斑图时,我们可以将一张斑图划分为N*N个正方形格子,填充每个格子颜色,就可以绘制出一个斑图。而填充颜色是可以考虑通过建立一个N*N的矩阵,通过比较矩阵的每个元素与其他元素的值的大小可以确定颜色填充的差异。

因此,我们需要计算每个格子(矩阵元素)的值,此时最大的问题是如何确定边界上格子的值,比如矩阵第一列的元素的值,此时我们可以通过将这个矩阵视作无缝连接的矩阵,即矩阵第一行与最后一行相邻,第一列与最后一列相邻。

在matlab中可以通过circshift()函数完成我们的构想。

Step 1:构造网格影响方程函数:

function out = my_laplacian(in)

out = -in ...

+ .20*(circshift(in,[ 1, 0]) + circshift(in,[-1, 0]) ...

+ circshift(in,[ 0, 1]) + circshift(in,[ 0,-1])) ...

+ .05*(circshift(in,[ 1, 1]) + circshift(in,[-1, 1]) ...

+ circshift(in,[-1,-1]) + circshift(in,[ 1,-1]));

Step 2:设置系数值与初始矩阵

f=.055;%进料率

k=.062;%去除率

da = 1;%U的扩散率

db = .5;%V的扩散率

% 网格的大小

width = 128;

% 5,000个模拟秒,每模拟秒4步

dt = .25;

stoptime = 5000;

设置初始矩阵:

function [t, A, B] = initial_conditions(n)

t = 0;

A = ones(n);

B = zeros(n);

B(51:60 ,51:70) = 1;

B(61:80,71:80) = 1;

Step 3:运行主程序

[t, A, B] = initial_conditions(width);

%主程序

tic

nframes = 1;

while t

anew = A + (da*my_laplacian(A) - A.*B.^2 + f*(1-A))*dt;

bnew = B + (db*my_laplacian(B) + A.*B.^2 - (k+f)*B)*dt;

A = anew;

B = bnew;

t = t+dt;

nframes = nframes+1;

end

%画图

axes('Position',[0 0 1 1])

axis off

hi = image(B);

hi.CDataMapping = 'scaled';

delta = toc;

disp([num2str(nframes) ' frames in ' num2str(delta) ' seconds']);

下面第一幅图为B(对应前文的V)的区域分布斑图

Step 4:拓展

如果我们想观察一段时间内B的分布区域的变化情况,那么我们可以通过绘制动图来实现。

[t, A, B] = initial_conditions(width);

targetframerate = 24;

frametime = 1/(24*60*60*targetframerate);

nextframe = now + frametime;

tic

nframes = 1;

while t

anew = A + (da*my_laplacian(A) - A.*B.^2 + f*(1-A))*dt;

bnew = B + (db*my_laplacian(B) + A.*B.^2 - (k+f)*B)*dt;

A = anew;

B = bnew;

hi.CData = B;

t = t+dt;

ht.String = ['Time = ' num2str(t)];

if now > nextframe

drawnow

nextframe = now + frametime;

end

nframes = nframes+1;

end

delta = toc;

disp([num2str(nframes) ' frames in ' num2str(delta) ' seconds']);

在原来的基础上,通过增加绘制动图的指令即可实现。

matlab db函数_图灵斑图与反应扩散方程——Matlab的实现相关推荐

  1. matlab实现图灵斑图与反应扩散方程动态图

    参考链接:https://blog.csdn.net/weixin_30278943/article/details/112067158 function out = my_laplacian(in) ...

  2. matlab disp函数_代码 | 求解LP问题单纯形法的Matlab代码

    介绍求解LP问题最优解的Matlab代码. Contents 求LP问题的基本(可行)解Matlab代码 基本原理 Matlab代码 初始化 是否随机生成LP问题还是自己指定LP问题 初始化系数矩阵A ...

  3. matlab plot函数_慧图大讲堂 | 一起来认识MATLAB吧!

    慧图大讲堂 岁月流转,时光飞逝.转眼间又开学了,小伙伴们在使用MATLAB吗?想知道漂亮的图表.还原模糊图像.图像识别.模型预测,这些好玩的东西怎么做?快点和慧图君一起认识MATLAB吧! 01 什么 ...

  4. matlab cat函数_如何用Matlab编写贪吃蛇游戏?(持续更新)

    今后我们实验室的研究重点将会聚焦在"基于游戏的测评"和"教育游戏化"这两个主题上,因此很有必要研究实现"爆款"游戏的一些基本的技术方法.这篇 ...

  5. matlab meshc函数_有那些相见恨晚的MATLAB绘图命令

    有那些相见恨晚的MATLAB绘图命令 MATLAB的绘图功能可谓非常的强大,常用的有plot,plot3,subplot,scatter等等,这些函数有许多的参数设置,可以画出各种需求的图.但是这些强 ...

  6. matlab里surf函数,matlab surf 函数画3维图

    这个函数很方便.在matlab的环境下,这种交互式的画图方式很节约时间.不过如果对surf函数作图的一些细节不去了解清楚的话,可能会导致一些错误,一下是我使用时的一些总结: 假 设有两列数X[N],Y ...

  7. matlab rbf函数_基于径向基函数(RBF)的无网格伪谱法与程序实现(2)——微分矩阵...

    参考资料 Gregory E. Fasshauer. Meshfree Approximation Methods with MATLAB. P.387 P401 数值实现 Matlab 2019a ...

  8. matlab hist函数_算法工匠MATLAB专训营:Matlab绘图,小试牛刀

    作者 | 蔡老师 仿真秀专栏作者 首发 | 仿真秀平台 导读:正文之前,我在此详细说明一下,因为本文包含的程序太难得,网上肯定找不到这样的程序.随着讲课的越来越深入,我给出的程序会越来越实用,接近于实 ...

  9. matlab meshgrid函数_从零开始的matlab学习笔记——(28)立体图切面与三视图

    matlab应用--求极限,求导,求积分,解方程,概率统计,函数绘图,三维图像,拟合函数,动态图....更多内容尽在个人专栏:matlab学习 这一节我们说一说立体图的切面问题 slice函数 sli ...

最新文章

  1. Dorado用法与示例
  2. 中继TensorRT集成
  3. 使用nginx阻止别人域名绑定到自己的IP上
  4. Keepalived双机热备
  5. 苹果5g手机_5G手机即将大量上市,iPhone缺席首批5G手机,苹果为何不急?
  6. 【图像】imagededup照片去重(感知哈希,汉明距离)
  7. Eclipse-cdt 配合 gdbserver 进行 arm 程序远程调试
  8. think php框架 跨域,ThinkPHP框架实现session跨域问题
  9. 2021年了,`IEnumerator`、`IEnumerable`接口还傻傻分不清楚?
  10. Kubernetes攻略之新手上路
  11. 《dp补卡——买卖股票问题》
  12. scaling之旅_机器学习算法之旅 - lwaif的个人空间 - OSCHINA - 中文开源技术交流社区...
  13. 华为发布最强 AI 处理器昇腾 910,全场景 AI 框架 MindSpore 将开源
  14. 02 ZooKeeper分布式集群安装
  15. 页面中打开Word,在线浏览
  16. 一个app管理平台-app-host的搭建
  17. ERP库存管理 华夏
  18. 【笔试or面试】美团2014校园招聘
  19. 苹果开发者账号个人级升级为公司级
  20. [USACO12FEB]牛券Cow Coupons

热门文章

  1. webservice 传输数据过大,解析失败
  2. hadoop漏洞_【漏洞公告】CVE-2017-7669:Apache Hadoop远程权限提升漏洞
  3. php 换行输出_Fracker:PHP函数调用追踪与分析工具
  4. mpAndroidchart 坐标和图表距离_数据对比图表,如何让你的总结报告更具说服力!...
  5. PyCharm安装步骤
  6. C++之STL种类及实现
  7. RK3399 Mali-T860占用率
  8. android7.0 netd与netlink的framework,kernel通信流程
  9. android5.1不生成odex
  10. centos6.9终端命令