声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 2095|回复: 13

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

[复制链接]
发表于 2011-8-7 15:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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

进化模型.rar

2.64 KB, 下载次数: 2

回复
分享到:

使用道具 举报

发表于 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)=[0,0].

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}));
 楼主| 发表于 2011-8-8 21:21 | 显示全部楼层
您好,第一次发帖,下次注意
您知道这个报错是为什么么,这个程序的意图是模拟一种形式进化的,lan元胞是我想要的变量,可是那个NaN的产生影响到了我迭代的计算,经常是在gen变量(迭代次数)在10一下的时候就因为NaN的出现而终止了,但也有的时候能完成总共100次的迭代,很疑惑,求大牛帮助
 楼主| 发表于 2011-8-8 21:22 | 显示全部楼层
回复 2 # ChaChing 的帖子

您好,第一次发帖,下次注意
您知道这个报错是为什么么,这个程序的意图是模拟一种形式进化的,lan元胞是我想要的变量,可是那个NaN的产生影响到了我迭代的计算,经常是在gen变量(迭代次数)在10一下的时候就因为NaN的出现而终止了,但也有的时候能完成总共100次的迭代,很疑惑,求大牛帮助
 楼主| 发表于 2011-8-8 21:23 | 显示全部楼层
回复 2 # ChaChing 的帖子

哦对了,我的报错和您的一样,也是这个,产生的便面上的原因就是因为TEMP_P元胞为空,而TEMP_P元胞为空就是在NaN产生之后才出现的,我单步调试发现的这个现象,可是不知道为什么,感觉很有意思但解决不了,谢谢
发表于 2011-8-10 13:47 | 显示全部楼层
看看P是多少了 是否保存了?
发表于 2011-8-11 00:18 | 显示全部楼层
1.个人水平/专业/时间有限, 要看清LZ的程序, 真有点吃力
2.nan出现的可能不外乎0/0或inf/inf, 也就是"/"的地方需注意
3.find下, 共有四处有除号, 设些判断语句检查下, 发现在main_creatQ中即开始出现nan, 原因即整行(或整列)皆为零!
4.至於传入main_creatQ的lan cell所含矩阵整行(或整列)皆为零, 是否合理, 只得LZ的专业判断及往前追错了
 楼主| 发表于 2011-8-13 16:59 | 显示全部楼层
回复 6 # yufeng 的帖子

您好,看看P的多少怎么理解?望解答
 楼主| 发表于 2011-8-13 17:02 | 显示全部楼层
回复 7 # ChaChing 的帖子

您好,感谢您帮我查出这些问题,我继续去具体看看怎么出现的。
还有个小麻烦,请问我怎么对于调用的.m文件进行debug的检查?就是想一步一步的检查那种
 楼主| 发表于 2011-8-13 17:03 | 显示全部楼层
回复 7 # ChaChing 的帖子

您好,感谢您帮我查出这些问题,我继续去具体看看怎么出现的。
还有个小麻烦,请问我怎么对于调用的.m文件进行debug的检查?就是想一步一步的检查那种
发表于 2011-8-15 08:51 | 显示全部楼层
回复 8 # lxlxlxx 的帖子

再出错前程序加上P
看数值多少
发表于 2011-8-16 11:25 | 显示全部楼层
回复 9 # lxlxlxx 的帖子

进入matlab后, 打开m文件, 不是就进入debug模式 !?
但LZ的程序牵涉许多循环, 一步一步执行实在不可行, 所以我是在几处猜测位置设些判断语句并设断点(如main_creatP)
  1. function P = main_creatP(m,n,A)
  2. %UNTITLED2 Summary of this function goes here
  3. %   Detailed explanation goes here
  4. for i = 1:n
  5.     for j = 1:m
  6.         if sum(A(i,1:m))==0      %****************
  7.             disp('ppp');                %****************设断点
  8.         end                          %****************
  9.         P(i,j) = A(i,j)/sum(A(i,1:m));
  10.         %Q(j,i) = A(i,j)/sum(A(1:n,j));
  11.     end
  12. end
  13. end
复制代码
只要判断语句成立即停滞, 再各参数检查下
 楼主| 发表于 2011-8-24 16:29 | 显示全部楼层
回复 11 # yufeng 的帖子

好的,我去试一试,谢谢您解答
 楼主| 发表于 2011-8-24 16:30 | 显示全部楼层
回复 12 # ChaChing 的帖子

谢谢楼主,我去查查看,麻烦了
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-21 11:14 , Processed in 0.076145 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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