找回密码
 注册
关于网站域名变更的通知
查看: 407|回复: 2
打印 上一主题 下一主题

源代码在Matlab主程序中运行没有问题,在App designer 中运行,点击完start,关闭...

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2020-12-10 19:52 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
源代码在Matlab主程序中运行没有问题,在App designer 中运行,点击完start,关闭元胞自动机页面后页面就会报错。
此类型的变量不支持使用点进行索引错误,位置在mov(k)=getframe(gcf);位置。matlab是win 10 64位2018a。
请教大神,非常感谢!
/ s8 H  ^3 m' K; W/ n$ {) `

# f7 Z8 {' G- f7 t6 x1 ?
主程序

. `, q6 {* _3 C7 B  W/ S2 }7 }
  • function start(app)
  •             m=100;
  •             n=100;
  •             C=cell(n);
  •             Nme=zeros(n+1);
  •             Nme(1:n,1:n)=ceil(m*rand(n));
  •             SubstPro1=0.045*rand(20,40);
  •             SubstPro=cat(2,SubstPro1,zeros(20,60));
  •             SubstConsm=rand(1,m);
  •             SubstCell=2*ones(n);
  •             x=linspace(0,1,n+1);
  •             y=linspace(0,1,n+1);
  •             [X,Y]=meshgrid(x,y);
  •             h0=pcolor(app.UIAxes,X,Y,Nme)
  •             colormap(app.UIAxes,jet(101));
  •             colorbar;
  •             set(h0,'edgecolor','none');
  •             title(app.UIAxes,'元胞的初始状态')
  •             axis square
  •             axis off
  •             for i=1:n
  •                 for j=1:n
  •                     C{i,j}{1}=Nme(i,j);
  •                     C{i,j}{2}=SubstCell(i,j);
  •                 end
  •             end
  •             N=50;
  •             for k=1:N
  •                 Ck{k}=C;
  •                 C=UpdateCell(C,n,SubstPro,SubstConsm);
  •                 for i=1:n
  •                     for j=1:n
  •                         Nme(i,j)=C{i,j}{1};
  •                     end
  •                 end
  •                 h=pcolor(app.UIAxes,X,Y,Nme);
  •                 set(h,'edgecolor','none');
  •                 colormap(app.UIAxes,jet(101));
  •                 title(app.UIAxes,['\bf 元胞更新',num2str(k),'月后的空间状态'])
  •                 colorbar;
  •                 axis square
  •                 axis off
  •                   saveas(gcf, [num2str(k)],'jpg');
  •                  frame=imread(k,'jpg');
  •                  writeVideo(mov,frame);
  •             end
  •             save('mov','mov');
  •             %myObj=VideoWriter('newfile.avi');
  •             %writerObj.FreameRate=5;
  •             %open(myObj);
  •             %writeVideo(myObj,mov);
  •             %close(myObj);
  •         end
  •     end
    & p! f7 S6 I' w; }2 M# i1 q
1 x3 N$ d0 O# z3 W8 v, d
复制代码7 `  L0 W1 w! z$ U1 N

1 |( f! J/ |# ]3 R# m7 {* F6 |: m5 C+ B2 _1 T. S! @0 Y5 C. Z
里面涉及的函数" M2 m# s; F7 C0 Z( b  C0 Q
  • function [in, jn] = GetNeigbr(i, j, n)
  • % ====本函数根据元胞自己的索引,确定其邻居的索引,采用周期边界=====
  • % =====i, j 为元胞自己的索引,n 为行数或列数======
  • zs = [i-1, j-1];       s = [i-1, j];       ys = [i-1, j+1]; % 上面的邻居
  • z =   [i, j-1]; y = [i,   j+1];   %  左右的邻居
  • zx = [i+1, j-1];   x = [i+1, j];   yx = [i+1, j+1];  % 下面的邻居
  • ng = [zx; x; yx; z; y; zs; s; ys]; % 8 个邻居的位置
  • ng1 = ng( : );
  • for j = 1: length(ng1)
  • if ng1(j)<1; ng1(j) = n;
  • elseif ng1(j)>n; ng1(j) = 1;
  • end
  • end
  • ng = reshape(ng1, 8, 2);
  • [in, jn]= deal(ng(:,1), ng(:,2)); %相当于 in=ng(:,1),jn=ng(:,2)
  • end
  • " D1 d+ h$ g% {* b8 z+ t7 x. A
: R% o8 A4 V+ h# `# g6 p( J
复制代码5 k+ P5 r5 }  y1 a0 ~
  • function NmeCalt=NmeCalUpt(Nme)
  • NmeCal=[];
  • Nme1=sort(Nme( : ));
  • while 1
  • h=0;
  • u=Nme1(1);
  • for j=1:length(Nme1)
  • if u==Nme1(j);h=h+1;end
  • end
  • NmeCal=cat(1,NmeCal,[u,h]);
  • Nme1(1:h)=[];
  • if isempty(Nme1); break; end
  • end
  • NmeCal(1,: )=[];
  • NmeCalt=sortrows(NmeCal,-2);
  • end
  • & T! P9 b3 k$ j- S

" y- p. j, y. b7 C. G9 E/ X复制代码2 b1 ]* d5 X& J! a# s
  • function Ct=UpdateCell(C,n,SubstPro,SubstConsm)
  • % =====各元胞上微生物状态的更新===============
  • for i = 1:n
  •   for j = 1:n
  •        [in, jn] = GetNeigbr(i, j, n);       % (i,j)元胞邻居的索引
  •         neighbsubt = [];
  •           for k = 1:8
  •                neighbsubt = cat(1, neighbsubt, C{in(k), jn(k)}{2});
  •           end
  •          SubstNeigb(i,j) =sum(neighbsubt);   %计算(i,j)元胞邻居底物浓度之和
  •            if C{i, j}{1} == 0;     % 表示此元胞上没有微生物
  •                  sp = [];
  •                  for k = 1:8
  •                      sp = cat(1, sp, C{in(k), jn(k)}{1});
  •                  end
  •                   if all(sp == 0)             % 表示周围邻居位置中没有物种占领
  •                        C{i, j}{1} = 0;
  •                   else
  •                        sp1 = sp;
  •                        sp1(sp1==0) =[];  % 把为物种 0 的元胞位置去除
  •                         m = randi([1, length(sp1)],1,1); % 表示从周围邻居任找一物种占领此位置
  •                         mi = find(sp==sp1(m));
  •                          C{i, j}{1}= C{in(mi(1)), jn(mi(1))}{1};
  •                   end
  •                     C{i, j}{2} = C{i, j}{2};   %此元胞内底物浓度不变
  •            else
  •                    if C{i,j}{1}<=40           %若此菌为“好人”
  •                         if (0.01*SubstNeigb(i,j)+C{i,j}{2})>=SubstConsm(C{i,j}{1})
  •                             C{i,j}{1}=C{i,j}{1};
  •                             if C{i,j}{2}>=SubstConsm(C{i,j}{1})
  •                                 C{i,j}{2}=C{i,j}{2}+sum(SubstPro(:,C{i,j}{1}))-SubstConsm(C{i,j}{1});
  • else
  • C{i,j}{2}=sum(SubstPro(:,C{i,j}{1}));
  • for k = 1:8
  • C{in(k), jn(k)}{2}=C{in(k), jn(k)}{2}-...
  •     0.00125*(SubstConsm(C{i,j}{1})-C{i,j}{2});
  • end
  •                             end
  •                         else
  • C{i,j}{1}=0;
  •                         end
  • else %若此菌为“骗子”
  • if (0.2*SubstNeigb(i,j)+C{i,j}{2})>=SubstConsm(C{i,j}{1})
  • %底物浓度判断
  • C{i,j}{1}=C{i,j}{1};
  • if C{i,j}{2}>=SubstConsm(C{i,j}{1})
  • %若元胞底物足够供“骗子”生存
  • C{i,j}{2}=C{i,j}{2}-SubstConsm(C{i,j}{1});
  • else
  • C{i,j}{2}=0;
  • for k = 1:8
  • C{in(k), jn(k)}{2}=C{in(k), jn(k)}{2}-...
  •     0.025*(SubstConsm(C{i,j}{1})-C{i,j}{2});
  • end
  • end
  • else
  • C{i,j}{1}=0;
  • end
  • end
  • end
  • end
  • end
  • Ct=C;
  • end

  • " k3 n4 W* s. `3 c

+ N2 [- y% U' F9 ~" y* V* c! E! Z
+ I" n5 o& R6 M
0 f- B, v+ s9 R4 d4 G

该用户从未签到

2#
发表于 2020-12-10 20:08 | 只看该作者
初步推断和app没啥关系。

该用户从未签到

3#
发表于 2020-12-10 20:09 | 只看该作者
打个断点看下报错位置变量的类型,可能就是不支持索引的那种。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-6-20 07:39 , Processed in 0.078125 second(s), 23 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表