使用MatLab对gierer-meinhardt系统进行模式形成刺激

时间:2018-04-07 12:07:47

标签: matlab design-patterns

我正在研究Gierer-Meinhardt反应扩散系统,我试图对模型进行编码,以产生一些模式,如斑点或条纹。我计算了图灵不稳定空间,并使用该空间的值作为输入,但几秒后屏幕变为空白!所以可能是错误的数学,或者可能是错误的代码,这是我的学位,任何帮助都会很棒!

function gierermeinhardt(a, b) % Diffusion rates
D=2; % Size of grid width = 128; % 5,000 simulation seconds with 4 steps per simulated second
dt = .25;
stoptime = 3000;
[t, u, v] = initial_conditions(width);
axes('Position',[0 0 1 1]) axis off   % Add a scaled-color image
hi = image(v);
set(hi,'CDataMapping','scaled');
targetframerate = 6; %24;
frametime = 1/(24*60*60*targetframerate);
nextframe = now + frametime;
tic nframes = 1;
while t<stoptime
    ut = u + (a - b*u + u.^2./v  + my_laplacian(u))*dt;
    vt = v + (u.^2 - v + D.*my_laplacian(v))*dt;
    u = ut;
    v = vt;
    set(hi,'CData',v);
    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']);
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]));
function [t, u, v] = initial_conditions(n)
t = 0; % Initialize A to one
v = ones(n); % Initialize B to zero which a clump of ones
u = zeros(n);
u(51:60 ,51:70) = 1;
u(61:80,71:80) = 1;

1 个答案:

答案 0 :(得分:0)

我在Octave下运行你的程序,所以可能会有所不同,但我认为 我明白这是什么问题。

首先,你的标题ht.String似乎没有出现在任何地方 数字(我们稍后会看到,这很重要)。我把它改成了

s = text(40,10, 'Time = 0');

还有:

if now > nextframe
    set(s,'string', ['Time = ',num2str(t),' 1+', num2str(min(min(v))-1),' <= v <= 1+',num2str(max(max(v))-1)])
    drawnow
    nextframe = now + frametime;
end

播放的电影取决于a和b的值,我选择a=1; b=2。 我得到的是,v的值全部等于1+2.2e-16t=145之后。这意味着整个图形只有一种颜色。 并且,如果没有标题,这是一个“空白屏幕”。