在Matlab中创建3D绘图

时间:2015-11-29 21:27:50

标签: arrays matlab loops plot

我想创建一个三维地图,描绘地球上覆盖的草的最后部分(=从现在开始的20亿年)(= A),作为草的死亡率(= D)和生长的变化的函数草率(= G)。

A的最终值(距离现在20亿年)可以使用循环计算,其中包含以下标准化公式:

A(t + dt)= A(t)*((1-A(t))* G-D)* dt + A(t)

objects = ArticlesManager().as_manager()

现在我仍然坚持如何根据变化的G和D来创建A的最终值的3D图。我得到了这个,但经过几次试验后,它一直给出错误:

%Define variables and arrays

D=0.1;                              %constant value 
G=0.4;                              %constant value
A=0.001;                            %initial value of A at t=0
t=0;
dt=10E6; 
startloop=1;                        %define number of iterations
endloop=200;                  

timevector=zeros(1,endloop);        %create vector with 0
grassvector=zeros(1,endloop);

%Define the loop

for t=startloop:endloop
    A=A.*((((1-A).*G)-D)) + A;   
    grassvector(t)=A;
    timevector(t)=t*dt;
end

有人可以帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:5)

您的代码错误,因为grassvector(t)= A;由于尺寸不一致,因此无法执行。但是,我想你可能想这样做:

grassvector=zeros([size(Ggrid),endloop]);

并在循环中:

grassvector(:,:,t)=A;

此外,尽管在计算上完全不需要,但您可能希望将A初始化为A=0.001*ones(size(Dgrid)),因为它在逻辑上更有意义。

无论如何:这就是你最终可以如何绘制它的方式:

surf(Ggrid,Dgrid,A,'LineStyle','none');
xlabel('growth rate ')
ylabel('death rate ')
zlabel('grass')
colorbar

给出:

enter image description here

但是,由于我实际上对你的研究感兴趣,我决定制作一些情节,看看草的生长速度有多快。这是一些不错的绘图代码。你可以在这里修改不同的东西,以便能够改变它的外观。我使用自定义色彩映射,因此如果它不起作用,请删除colormap(viridis())行。如果你喜欢色图,visit this

fh=figure();
filename='grass.gif';
for t=startloop:endloop
    clf
    hold on
    surf(Ggrid,Dgrid,grassvector(:,:,t),'LineStyle','none');
    [c,h]=contour3(Ggrid,Dgrid,grassvector(:,:,t)+0.05,[0:0.1:1],'LineColor',[153,0,18]/255,'LineWidth',2);
    clabel(c,h);
    xlabel('growth rate ')
    ylabel('death rate ')
    zlabel('grass')
    title(['Years passed: ' num2str(t*dt/1000000) ' million'])
    colormap(viridis())
    axis([0 1 0 1 0 1])
grid on
    view(-120,40);

    frame = getframe(fh);
    im = frame2im(frame);
    [imind,cm] = rgb2ind(im,256);
    if t == 1;
        imwrite(imind,cm,filename,'gif', 'Loopcount',inf);
    else
        imwrite(imind,cm,filename,'gif','WriteMode','append','DelayTime',0.1);
    end
end

结果: