当时间限制非常大时,我在使用odeint解决分段颂歌方面遇到了一些麻烦 . 我在这里包含了一个极简主义的例子:
import numpy as np
import matplotlib.pyplot as plt
from scipy.integrate import odeint
t0 = 1.5e+21
t_end = 4.4e+23
t= np.linspace(t0,t_end,10000)
def DMonly(y,tt):
return 1. if tt>=(t0+t_end)/2. else 0.
plt.semilogx(t,odeint(DMonly,0.,t),marker='.')
plt.show()
对于前半部分,解决方案应该是y = 0,然后对于后半部分应该线性增加,但是我总是得到y = 0,如此plot .
如果我采用完全相同的问题,但现在使用t0和t_end的不同值:
t2= np.linspace(1.,100.,10000)
def DMonly2(y,tt):
return 1. if tt>=(1.+100.)/2. else 0.
plt.plot(t2,odeint(DMonly2,0.,t2),marker='.')
plt.xlabel('t')
plt.ylabel('y(t)')
plt.show()
现在,该解决方案表现良好,如plot .
1 回答
我只想提出一个问题,是否有可能其中一个库不支持大数字 .
对于Python版本,我读了这个link,这解释了处理数字的Python非常好 . 但是,有没有一个库不支持那些大数字?
更新:请看看这个answer,尤其是迪特里希在答案中提到Sympy,也许这可以帮助更好;)
对不起......我不是数学方面的专家,但是从我做过的测试中我发现了这个,
这个号码
有资格参加
运行这样的值:
我得到
然后用这个值小于0:
我明白了: