24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 3906  |  回复: 10

文刀星

木虫 (小有名气)

[求助] ode45积分出现NaN 已有1人参与

对一个函数积分,给定初始值,积分到某一时刻,出现了NaN的情况,最后一项是一个常数,不用管;然后以出现NaN之前的一个数据重新积分,却可以积分到最后,什么情况?

options=odeset('events',@eventRe);
x0=[0.9922,-0.1396,0,1.0157,0,0,0.1667];
[t,x,te,xe,ie]=ode45(@myGAzrfun,[0,2],x0,options)
%上面的积分积分到t=0.0324(t(17))的下一个节点0.0357时,出现NaN情况,见下面部分数据;

x1=x(17,;
[t,x,te,xe,ie]=ode45(@myGAzrfun,[t(17),2],x1,options)
%然后将t=0.0324的时刻所对应的的初值及时间重新积分,却又能够继续积分下去;

   0.9939   -0.1396         0    1.0139    0.0125         0    0.1667
    0.9948   -0.1396         0    1.0130    0.0188         0    0.1667
    0.9957   -0.1396         0    1.0121    0.0252         0    0.1667
    0.9965   -0.1395         0    1.0112    0.0315         0    0.1667
       NaN       NaN       NaN       NaN       NaN       NaN    0.1667
       NaN       NaN       NaN       NaN       NaN       NaN    0.1667
       NaN       NaN       NaN       NaN       NaN       NaN    0.1667
       NaN       NaN       NaN       NaN       NaN       NaN    0.1667
       NaN       NaN       NaN       NaN       NaN       NaN    0.1667
%上面是积分遇到问题时的部分数据;
%下面是积分到最后的部分数据,而且也是我想要的数据,说明应当是正确的,可是为啥会出现上面的情况?
   0.4418   -0.1594         0    1.0001    0.1092         0    0.1667
    0.4221   -0.1612         0    1.0001    0.1096         0    0.1667
    0.4030   -0.1631         0    1.0000    0.1100         0    0.1667
te =
    0.1213
xe =
    0.4030   -0.1631         0    1.0000    0.1100         0    0.1667
ie =
     1

ode45积分出现NaN
360截图20150516124651022.jpg
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wuhanfeng

新虫 (小有名气)

可能在函数在这个点产生奇性,或者值比较大,matlab算不出来

[ 发自小木虫客户端 ]
2楼2015-05-16 14:37:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

文刀星

木虫 (小有名气)

引用回帖:
2楼: Originally posted by wuhanfeng at 2015-05-16 14:37:27
可能在函数在这个点产生奇性,或者值比较大,matlab算不出来

先谢谢你的回复!
那为什么以上一个点代入继续积分却可以呢?而且感觉我的函数中没有产生奇异点的可能,因为只有x(4)做分母,但第四列没有出现零啊。
3楼2015-05-16 14:45:41
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

文刀星

木虫 (小有名气)

现在发现把该语句[t,x,te,xe,ie]=ode45(@myGAzrfun,[0,2],x0,options)
改为[t,x,te,xe,ie]=ode45(@myGAzrfun,[0,1],x0,options)就可以正常积分出来了;也就是把[0,2]改为[0,1]就可以了;后来试了几组数据,发现1.2还行,1.3就不行了。这是怎么回事啊???请各位大神指点指点!给点意见!
4楼2015-05-16 17:03:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wuhanfeng

新虫 (小有名气)

不知道你的函数具体形式,总之ode45是数值计算方法,只要在区间内的值都能算出来,积分就能积的出来
5楼2015-05-16 18:56:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

文刀星

木虫 (小有名气)

引用回帖:
5楼: Originally posted by wuhanfeng at 2015-05-16 18:56:59
不知道你的函数具体形式,总之ode45是数值计算方法,只要在区间内的值都能算出来,积分就能积的出来

搞了一天,确实是在积分过程中出现了一个Inf,但是现在知道问题了。但是还是不明白为啥改变积分区间就会有不同的结果。谢谢你啦!
6楼2015-05-16 22:10:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

allengjn

新虫 (正式写手)

引用回帖:
6楼: Originally posted by 文刀星 at 2015-05-16 22:10:22
搞了一天,确实是在积分过程中出现了一个Inf,但是现在知道问题了。但是还是不明白为啥改变积分区间就会有不同的结果。谢谢你啦!...

我也遇到这个问题了,我的程序如果积分终点时间是0.000151就能得到151步的结果,如果积分时间是大于等于0.000152,就在128步的位置出现复数,但是129步的实部与128步还是连续的,请问楼主知道为什么了么?求解惑啊!
7楼2015-07-18 11:46:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

文刀星

木虫 (小有名气)

引用回帖:
7楼: Originally posted by allengjn at 2015-07-18 11:46:55
我也遇到这个问题了,我的程序如果积分终点时间是0.000151就能得到151步的结果,如果积分时间是大于等于0.000152,就在128步的位置出现复数,但是129步的实部与128步还是连续的,请问楼主知道为什么了么?求解惑啊 ...

具体问题的原因我还是不太清楚。我后来把ode45的abtol和retol设到了e-10甚至更小,然后inf就消失了。因为我的被积方程中有一个函数不稳定,所以提高精度就好点。我猜测你的应该也是在128步时出现了对负数开方的情况,可以试一下将精度提高。ode45是变步长积分,它会根据积分区间取步长。但问啥会出现我们遇到的问题,我还是不太明白。如果你找到了,希望你也能告诉我一声,谢谢!
8楼2015-07-19 13:09:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

binnya

新虫 (初入文坛)

引用回帖:
8楼: Originally posted by 文刀星 at 2015-07-19 13:09:04
具体问题的原因我还是不太清楚。我后来把ode45的abtol和retol设到了e-10甚至更小,然后inf就消失了。因为我的被积方程中有一个函数不稳定,所以提高精度就好点。我猜测你的应该也是在128步时出现了对负数开方的情况 ...

楼主楼主我也是这样的情况,你能具体说下怎么改的abtol和retol吗?不是很明白,拜托了!!!
9楼2016-02-18 13:06:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

文刀星

木虫 (小有名气)

引用回帖:
9楼: Originally posted by binnya at 2016-02-18 13:06:43
楼主楼主我也是这样的情况,你能具体说下怎么改的abtol和retol吗?不是很明白,拜托了!!!...

用odeset函数。具体参见help文件,大概是这样的:options=odeset('Abtol',1e-10,'Retol',1e-8);[....]=ode45(@fun,tspan,X0,options,...);

提高有时候提高精度也不一定能积出来,实在不行,个人觉得,如果精度要求不高,可以自己编写4阶龙格库塔法求解。
10楼2016-02-19 08:38:57
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 文刀星 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 一志愿北京化工大学材料与化工(085600)296求调剂 +12 稻妻小编 2026-03-26 12/600 2026-03-29 01:04 by 我是小康
[考研] 343求调剂 +5 爱羁绊 2026-03-28 5/250 2026-03-28 20:53 by 唐沐儿
[考研] 083000学硕274求调剂 +8 Li李鱼 2026-03-26 8/400 2026-03-28 20:33 by 加油向未来啊
[考研] 346求调剂 一志愿070303有机化学 +3 萝卜炖青菜 2026-03-28 3/150 2026-03-28 14:11 by 唐沐儿
[考研] 0856,材料与化工321分求调剂 +12 大馋小子 2026-03-27 13/650 2026-03-28 10:56 by self2008
[考研] 085602 307分 求调剂 +7 不知道叫什么! 2026-03-26 7/350 2026-03-28 09:57 by 神马都不懂
[考研] 085404求调剂,总分309,本科经历较为丰富 +4 来财aa 2026-03-25 4/200 2026-03-28 07:41 by 棒棒球手
[考研] 张芳铭-中国农业大学-环境工程专硕-298 +4 手机用户 2026-03-26 4/200 2026-03-28 07:17 by mmm just
[考博] 26申博 +3 加油冲啊! 2026-03-26 3/150 2026-03-27 15:38 by cls512
[考研] 085600,材料与化工321分调剂 +4 大馋小子 2026-03-27 6/300 2026-03-27 14:11 by 松花缸1201
[考研] 求调剂 +3 刘柯@ 2026-03-24 4/200 2026-03-27 11:28 by shangxh
[考研] 0703化学338求调剂! +6 Zuhui0306 2026-03-26 7/350 2026-03-27 10:35 by shangxh
[考研] 359求调剂 +4 王了个楠 2026-03-25 4/200 2026-03-27 08:43 by 不吃魚的貓
[考研] 求调剂,一志愿 南京航空航天大学大学 ,080500材料科学与工程学硕 +4 @taotao 2026-03-26 5/250 2026-03-27 08:10 by hypershenger
[考研] 化学工程085602 305分求调剂 +17 RichLi_ 2026-03-25 17/850 2026-03-26 19:44 by plmuchong
[考研] 打过很多竞赛,085406控制工程300分,求调剂 +3 askeladz 2026-03-26 3/150 2026-03-26 09:08 by 给你你注意休息
[考研] 340求调剂 +5 话梅糖111 2026-03-24 5/250 2026-03-25 06:53 by ilovexiaobin
[考博] 26申博自荐 +3 whh869393 2026-03-24 3/150 2026-03-24 09:55 by 21018060
[考研] 材料/农业专业,07/08开头均可,过线就行 +3 呵唔哦豁 2026-03-23 4/200 2026-03-23 22:30 by 汪!?!
[考研] 361求调剂 +3 Glack 2026-03-22 3/150 2026-03-23 22:03 by fuyu_
信息提示
请填处理意见