我正在研究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;
答案 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-16
在t=145
之后。这意味着整个图形只有一种颜色。
并且,如果没有标题,这是一个“空白屏幕”。