lxlxlxx 发表于 2011-8-7 15:35

一个研究进化的模型,基本成型,可在运算中不定时的出现NaN.....

一个研究进化的模型,基本成型,可在运算中不定时的出现NaN,比如100次的迭代进化,最后在10次左右就因为NaN的出现终止了,望大牛指点,为什么会出现NaN的结果呢?
附件已经添加了,直接打开main.m,运行就可以
里面generation表示已经迭代的次数,即繁衍代数
谢谢

ChaChing 发表于 2011-8-7 21:00

本帖最后由 ChaChing 于 2011-8-7 21:00 编辑

怎没法复製LZ的错误!?
我的报错是 ??? Attempted to access P(1,1); index out of bounds because size(P)=.

Error in ==> main_creatA at 8
      if x <= P(i,1)

Error in ==> main at 70
      lan{1,i} = main_creatA(m,n,k,double(TEMP_P{1,i}));

lxlxlxx 发表于 2011-8-8 21:21

您好,第一次发帖,下次注意
您知道这个报错是为什么么,这个程序的意图是模拟一种形式进化的,lan元胞是我想要的变量,可是那个NaN的产生影响到了我迭代的计算,经常是在gen变量(迭代次数)在10一下的时候就因为NaN的出现而终止了,但也有的时候能完成总共100次的迭代,很疑惑,求大牛帮助

lxlxlxx 发表于 2011-8-8 21:22

回复 2 # ChaChing 的帖子

您好,第一次发帖,下次注意
您知道这个报错是为什么么,这个程序的意图是模拟一种形式进化的,lan元胞是我想要的变量,可是那个NaN的产生影响到了我迭代的计算,经常是在gen变量(迭代次数)在10一下的时候就因为NaN的出现而终止了,但也有的时候能完成总共100次的迭代,很疑惑,求大牛帮助

lxlxlxx 发表于 2011-8-8 21:23

回复 2 # ChaChing 的帖子

哦对了,我的报错和您的一样,也是这个,产生的便面上的原因就是因为TEMP_P元胞为空,而TEMP_P元胞为空就是在NaN产生之后才出现的,我单步调试发现的这个现象,可是不知道为什么,感觉很有意思但解决不了,谢谢

yufeng 发表于 2011-8-10 13:47

看看P是多少了 是否保存了?

ChaChing 发表于 2011-8-11 00:18

1.个人水平/专业/时间有限, 要看清LZ的程序, 真有点吃力
2.nan出现的可能不外乎0/0或inf/inf, 也就是"/"的地方需注意
3.find下, 共有四处有除号, 设些判断语句检查下, 发现在main_creatQ中即开始出现nan, 原因即整行(或整列)皆为零!
4.至於传入main_creatQ的lan cell所含矩阵整行(或整列)皆为零, 是否合理, 只得LZ的专业判断及往前追错了

lxlxlxx 发表于 2011-8-13 16:59

回复 6 # yufeng 的帖子

您好,看看P的多少怎么理解?望解答

lxlxlxx 发表于 2011-8-13 17:02

回复 7 # ChaChing 的帖子

您好,感谢您帮我查出这些问题,我继续去具体看看怎么出现的。
还有个小麻烦,请问我怎么对于调用的.m文件进行debug的检查?就是想一步一步的检查那种

lxlxlxx 发表于 2011-8-13 17:03

回复 7 # ChaChing 的帖子

您好,感谢您帮我查出这些问题,我继续去具体看看怎么出现的。
还有个小麻烦,请问我怎么对于调用的.m文件进行debug的检查?就是想一步一步的检查那种

yufeng 发表于 2011-8-15 08:51

回复 8 # lxlxlxx 的帖子

再出错前程序加上P
看数值多少

ChaChing 发表于 2011-8-16 11:25

回复 9 # lxlxlxx 的帖子

进入matlab后, 打开m文件, 不是就进入debug模式 !?
但LZ的程序牵涉许多循环, 一步一步执行实在不可行, 所以我是在几处猜测位置设些判断语句并设断点(如main_creatP)function P = main_creatP(m,n,A)
%UNTITLED2 Summary of this function goes here
%   Detailed explanation goes here
for i = 1:n
    for j = 1:m
      if sum(A(i,1:m))==0      %****************
            disp('ppp');                %****************设断点
      end                        %****************
      P(i,j) = A(i,j)/sum(A(i,1:m));
      %Q(j,i) = A(i,j)/sum(A(1:n,j));
    end
end
end只要判断语句成立即停滞, 再各参数检查下

lxlxlxx 发表于 2011-8-24 16:29

回复 11 # yufeng 的帖子

好的,我去试一试,谢谢您解答

lxlxlxx 发表于 2011-8-24 16:30

回复 12 # ChaChing 的帖子

谢谢楼主,我去查查看,麻烦了
页: [1]
查看完整版本: 一个研究进化的模型,基本成型,可在运算中不定时的出现NaN.....